From 44da0e251a3c73aacd9bb99179943aae898d9b38 Mon Sep 17 00:00:00 2001 From: Bryan Frimin Date: Fri, 5 Jun 2026 14:45:57 +0200 Subject: [PATCH] Add new supported language Signed-off-by: Bryan Frimin --- .../_components/translationDefaults.ts | 11 +- packages/cookie-banner/src/i18n.ts | 22 +- pkg/cookiebanner/defaults.go | 322 +++++++++++++++++- pkg/coredata/migrations/20260605T124137Z.sql | 267 +++++++++++++++ 4 files changed, 611 insertions(+), 11 deletions(-) create mode 100644 pkg/coredata/migrations/20260605T124137Z.sql diff --git a/apps/console/src/pages/organizations/cookie-banners/configuration/translations/_components/translationDefaults.ts b/apps/console/src/pages/organizations/cookie-banners/configuration/translations/_components/translationDefaults.ts index ed3ca5a1d..7e5f27a49 100644 --- a/apps/console/src/pages/organizations/cookie-banners/configuration/translations/_components/translationDefaults.ts +++ b/apps/console/src/pages/organizations/cookie-banners/configuration/translations/_components/translationDefaults.ts @@ -14,9 +14,18 @@ export const SUPPORTED_LANGUAGES = [ { code: "en", label: "English" }, - { code: "fr", label: "Français" }, { code: "de", label: "Deutsch" }, { code: "es", label: "Español" }, + { code: "fr", label: "Français" }, + { code: "id", label: "Indonesian" }, + { code: "it", label: "Italiano" }, + { code: "ja", label: "日本語" }, + { code: "ko", label: "한국어" }, + { code: "pl", label: "Polski" }, + { code: "pt", label: "Português" }, + { code: "tr", label: "Türkçe" }, + { code: "uk", label: "Українська" }, + { code: "zh", label: "中文" }, ] as const; export const BANNER_KEYS = [ diff --git a/packages/cookie-banner/src/i18n.ts b/packages/cookie-banner/src/i18n.ts index 64df2e2c5..f19ff9b94 100644 --- a/packages/cookie-banner/src/i18n.ts +++ b/packages/cookie-banner/src/i18n.ts @@ -44,9 +44,18 @@ export function interpolate( const COOKIE_DETAIL_LABELS: Record> = { en: { label_type: "Type: {{value}}", label_description: "Description: {{value}}", label_duration: "Duration: {{value}}" }, - fr: { label_type: "Type : {{value}}", label_description: "Description : {{value}}", label_duration: "Durée : {{value}}" }, de: { label_type: "Typ: {{value}}", label_description: "Beschreibung: {{value}}", label_duration: "Dauer: {{value}}" }, es: { label_type: "Tipo: {{value}}", label_description: "Descripción: {{value}}", label_duration: "Duración: {{value}}" }, + fr: { label_type: "Type : {{value}}", label_description: "Description : {{value}}", label_duration: "Durée : {{value}}" }, + id: { label_type: "Tipe: {{value}}", label_description: "Deskripsi: {{value}}", label_duration: "Durasi: {{value}}" }, + it: { label_type: "Tipo: {{value}}", label_description: "Descrizione: {{value}}", label_duration: "Durata: {{value}}" }, + ja: { label_type: "タイプ:{{value}}", label_description: "説明:{{value}}", label_duration: "期間:{{value}}" }, + ko: { label_type: "유형: {{value}}", label_description: "설명: {{value}}", label_duration: "기간: {{value}}" }, + pl: { label_type: "Typ: {{value}}", label_description: "Opis: {{value}}", label_duration: "Czas trwania: {{value}}" }, + pt: { label_type: "Tipo: {{value}}", label_description: "Descrição: {{value}}", label_duration: "Duração: {{value}}" }, + tr: { label_type: "Tür: {{value}}", label_description: "Açıklama: {{value}}", label_duration: "Süre: {{value}}" }, + uk: { label_type: "Тип: {{value}}", label_description: "Опис: {{value}}", label_duration: "Тривалість: {{value}}" }, + zh: { label_type: "类型:{{value}}", label_description: "描述:{{value}}", label_duration: "时长:{{value}}" }, }; export function getCookieDetailLabels(lang: string): Record { @@ -69,9 +78,18 @@ export function getTrackerTypeLabel(type: string): string { const GPC_LABELS: Record = { en: "Opt-Out Preference Signal Honored", - fr: "Signal de préférence de désinscription respecté", de: "Opt-Out-Präferenzsignal beachtet", es: "Señal de exclusión respetada", + fr: "Signal de préférence de désinscription respecté", + id: "Sinyal Preferensi Opt-Out Dihormati", + it: "Segnale di preferenza di rinuncia rispettato", + ja: "オプトアウト設定シグナルが有効です", + ko: "옵트아웃 기본 설정 신호가 적용되었습니다", + pl: "Sygnał preferencji rezygnacji uhonorowany", + pt: "Sinal de preferência de exclusão respeitado", + tr: "Çıkış Tercihi Sinyali Onurlandırıldı", + uk: "Сигнал переваги відмови враховано", + zh: "退出偏好信号已生效", }; export function getGpcLabel(lang: string): string { diff --git a/pkg/cookiebanner/defaults.go b/pkg/cookiebanner/defaults.go index d29e3721b..1a1e867b0 100644 --- a/pkg/cookiebanner/defaults.go +++ b/pkg/cookiebanner/defaults.go @@ -16,7 +16,7 @@ package cookiebanner import "go.probo.inc/probo/pkg/coredata" -var SupportedLanguages = []string{"en", "fr", "de", "es"} +var SupportedLanguages = []string{"en", "de", "es", "fr", "id", "it", "ja", "ko", "pl", "pt", "tr", "uk", "zh"} var defaultCategories = []struct { Name string @@ -78,13 +78,6 @@ var defaultCategoryTranslationsByLanguage = map[string]map[string]struct { Name string Description string }{ - "fr": { - "necessary": {"Nécessaires", "Cookies essentiels au bon fonctionnement du site web."}, - "analytics": {"Analytiques", "Cookies qui aident à comprendre comment les visiteurs interagissent avec le site web."}, - "advertising": {"Publicitaires", "Cookies utilisés pour diffuser des publicités pertinentes et suivre les campagnes."}, - "functional": {"Fonctionnels", "Cookies qui permettent des fonctionnalités améliorées et la personnalisation."}, - "uncategorised": {"Non classés", "Cookies qui n'ont pas encore été assignés à une catégorie."}, - }, "de": { "necessary": {"Notwendige", "Wesentliche Cookies, die für das ordnungsgemäße Funktionieren der Website erforderlich sind."}, "analytics": {"Analytische", "Cookies, die helfen zu verstehen, wie Besucher mit der Website interagieren."}, @@ -99,9 +92,322 @@ var defaultCategoryTranslationsByLanguage = map[string]map[string]struct { "functional": {"Funcionales", "Cookies que permiten funcionalidades mejoradas y personalización."}, "uncategorised": {"Sin categoría", "Cookies que aún no han sido asignadas a una categoría."}, }, + "fr": { + "necessary": {"Nécessaires", "Cookies essentiels au bon fonctionnement du site web."}, + "analytics": {"Analytiques", "Cookies qui aident à comprendre comment les visiteurs interagissent avec le site web."}, + "advertising": {"Publicitaires", "Cookies utilisés pour diffuser des publicités pertinentes et suivre les campagnes."}, + "functional": {"Fonctionnels", "Cookies qui permettent des fonctionnalités améliorées et la personnalisation."}, + "uncategorised": {"Non classés", "Cookies qui n'ont pas encore été assignés à une catégorie."}, + }, + "id": { + "necessary": {"Diperlukan", "Cookie penting yang diperlukan agar situs web berfungsi dengan baik."}, + "analytics": {"Analitik", "Cookie yang membantu memahami bagaimana pengunjung berinteraksi dengan situs web."}, + "advertising": {"Iklan", "Cookie yang digunakan untuk menampilkan iklan yang relevan dan melacak kampanye."}, + "functional": {"Fungsional", "Cookie yang memungkinkan fungsionalitas dan personalisasi yang ditingkatkan."}, + "uncategorised": {"Tidak dikategorikan", "Cookie yang belum dikategorikan."}, + }, + "it": { + "necessary": {"Necessari", "Cookie essenziali necessari per il corretto funzionamento del sito web."}, + "analytics": {"Analitici", "Cookie che aiutano a capire come i visitatori interagiscono con il sito web."}, + "advertising": {"Pubblicitari", "Cookie utilizzati per fornire annunci pertinenti e monitorare le campagne."}, + "functional": {"Funzionali", "Cookie che abilitano funzionalità avanzate e personalizzazione."}, + "uncategorised": {"Non categorizzati", "Cookie che non sono ancora stati assegnati a una categoria."}, + }, + "ja": { + "necessary": {"必須", "ウェブサイトが正常に機能するために必要な必須クッキーです。"}, + "analytics": {"分析", "訪問者がウェブサイトとどのようにやり取りするかを理解するためのクッキーです。"}, + "advertising": {"広告", "関連する広告を表示しキャンペーンを追跡するために使用されるクッキーです。"}, + "functional": {"機能", "高度な機能とパーソナライズを可能にするクッキーです。"}, + "uncategorised": {"未分類", "まだカテゴリに割り当てられていないクッキーです。"}, + }, + "ko": { + "necessary": {"필수", "웹사이트가 제대로 작동하는 데 필요한 필수 쿠키입니다."}, + "analytics": {"분석", "방문자가 웹사이트와 어떻게 상호작용하는지 이해하는 데 도움이 되는 쿠키입니다."}, + "advertising": {"광고", "관련 광고를 제공하고 캠페인을 추적하는 데 사용되는 쿠키입니다."}, + "functional": {"기능", "향상된 기능과 개인화를 가능하게 하는 쿠키입니다."}, + "uncategorised": {"미분류", "아직 카테고리에 할당되지 않은 쿠키입니다."}, + }, + "pl": { + "necessary": {"Niezbędne", "Niezbędne pliki cookie wymagane do prawidłowego funkcjonowania strony internetowej."}, + "analytics": {"Analityczne", "Pliki cookie, które pomagają zrozumieć, jak odwiedzający wchodzą w interakcję ze stroną."}, + "advertising": {"Reklamowe", "Pliki cookie używane do wyświetlania odpowiednich reklam i śledzenia kampanii."}, + "functional": {"Funkcjonalne", "Pliki cookie umożliwiające rozszerzoną funkcjonalność i personalizację."}, + "uncategorised": {"Niesklasyfikowane", "Pliki cookie, które nie zostały jeszcze przypisane do kategorii."}, + }, + "pt": { + "necessary": {"Necessários", "Cookies essenciais necessários para o correto funcionamento do site."}, + "analytics": {"Analíticos", "Cookies que ajudam a entender como os visitantes interagem com o site."}, + "advertising": {"Publicitários", "Cookies usados para exibir anúncios relevantes e rastrear campanhas."}, + "functional": {"Funcionais", "Cookies que permitem funcionalidades avançadas e personalização."}, + "uncategorised": {"Sem categoria", "Cookies que ainda não foram atribuídos a uma categoria."}, + }, + "tr": { + "necessary": {"Zorunlu", "Web sitesinin düzgün çalışması için gerekli olan zorunlu çerezler."}, + "analytics": {"Analitik", "Ziyaretçilerin web sitesiyle nasıl etkileşime girdiğini anlamaya yardımcı olan çerezler."}, + "advertising": {"Reklamcılık", "İlgili reklamlar sunmak ve kampanyaları takip etmek için kullanılan çerezler."}, + "functional": {"İşlevsel", "Gelişmiş işlevsellik ve kişiselleştirmeyi etkinleştiren çerezler."}, + "uncategorised": {"Kategorisiz", "Henüz bir kategoriye atanmamış çerezler."}, + }, + "uk": { + "necessary": {"Необхідні", "Необхідні файли cookie, потрібні для правильної роботи веб-сайту."}, + "analytics": {"Аналітичні", "Файли cookie, які допомагають зрозуміти, як відвідувачі взаємодіють із сайтом."}, + "advertising": {"Рекламні", "Файли cookie, що використовуються для показу релевантної реклами та відстеження кампаній."}, + "functional": {"Функціональні", "Файли cookie, що забезпечують розширену функціональність та персоналізацію."}, + "uncategorised": {"Некатегоризовані", "Файли cookie, які ще не були призначені до категорії."}, + }, + "zh": { + "necessary": {"必要", "网站正常运行所需的必要 Cookie。"}, + "analytics": {"分析", "帮助了解访问者如何与网站互动的 Cookie。"}, + "advertising": {"广告", "用于投放相关广告和跟踪广告活动的 Cookie。"}, + "functional": {"功能", "实现增强功能和个性化的 Cookie。"}, + "uncategorised": {"未分类", "尚未分配到类别的 Cookie。"}, + }, } var defaultUIStringsByLanguage = map[string]map[string]string{ + "id": { + "banner_title": "Preferensi Cookie", + "banner_description": "Kami menggunakan cookie untuk meningkatkan pengalaman Anda dan menganalisis lalu lintas situs. {{cookie_policy_link}}", + "button_accept_all": "Terima semua", + "button_reject_all": "Tolak semua", + "button_customize": "Sesuaikan", + "button_save": "Simpan preferensi", + "panel_title": "Sesuaikan Preferensi", + "panel_description": "Pilih kategori cookie yang ingin Anda izinkan. Cookie {{necessary_category}} selalu aktif karena diperlukan agar situs berfungsi.", + "aria_close": "Tutup", + "aria_show_details": "Tampilkan detail cookie", + "aria_hide_details": "Sembunyikan detail cookie", + "aria_cookie_settings": "Pengaturan cookie", + "privacy_policy_link_text": "Kebijakan Privasi", + "cookie_policy_link_text": "Kebijakan Cookie", + "placeholder_text": "Konten ini memerlukan cookie {{category}}.", + "placeholder_button": "Kelola preferensi cookie", + + "banner_title_opt_out": "Pemberitahuan Cookie", + "banner_description_opt_out": "Kami menggunakan cookie dan teknologi serupa. Anda dapat menolak cookie yang tidak penting. {{cookie_policy_link}}", + "button_acknowledge": "OK", + "button_opt_out": "Jangan Jual atau Bagikan Informasi Pribadi Saya", + + "banner_title_notice": "Pemberitahuan Cookie", + "banner_description_notice": "Situs ini menggunakan cookie untuk meningkatkan pengalaman Anda. {{cookie_policy_link}}", + "button_dismiss": "Mengerti", + }, + "it": { + "banner_title": "Preferenze Cookie", + "banner_description": "Utilizziamo i cookie per migliorare la tua esperienza e analizzare il traffico del sito. {{cookie_policy_link}}", + "button_accept_all": "Accetta tutto", + "button_reject_all": "Rifiuta tutto", + "button_customize": "Personalizza", + "button_save": "Salva preferenze", + "panel_title": "Personalizza le Preferenze", + "panel_description": "Scegli quali categorie di cookie consentire. I cookie {{necessary_category}} sono sempre attivi poiché necessari per il funzionamento del sito.", + "aria_close": "Chiudi", + "aria_show_details": "Mostra dettagli cookie", + "aria_hide_details": "Nascondi dettagli cookie", + "aria_cookie_settings": "Impostazioni cookie", + "privacy_policy_link_text": "Informativa sulla Privacy", + "cookie_policy_link_text": "Informativa sui Cookie", + "placeholder_text": "Questo contenuto richiede i cookie {{category}}.", + "placeholder_button": "Gestisci le preferenze dei cookie", + + "banner_title_opt_out": "Avviso sui Cookie", + "banner_description_opt_out": "Utilizziamo cookie e tecnologie simili. Puoi rinunciare ai cookie non essenziali. {{cookie_policy_link}}", + "button_acknowledge": "OK", + "button_opt_out": "Non vendere né condividere le mie informazioni personali", + + "banner_title_notice": "Avviso sui Cookie", + "banner_description_notice": "Questo sito utilizza i cookie per migliorare la tua esperienza. {{cookie_policy_link}}", + "button_dismiss": "Capito", + }, + "ja": { + "banner_title": "クッキーの設定", + "banner_description": "私たちはクッキーを使用してユーザー体験を向上させ、サイトのトラフィックを分析します。{{cookie_policy_link}}", + "button_accept_all": "すべて承認", + "button_reject_all": "すべて拒否", + "button_customize": "カスタマイズ", + "button_save": "設定を保存", + "panel_title": "設定をカスタマイズ", + "panel_description": "許可するクッキーのカテゴリを選択してください。{{necessary_category}}クッキーはサイトの動作に必要なため、常に有効です。", + "aria_close": "閉じる", + "aria_show_details": "クッキーの詳細を表示", + "aria_hide_details": "クッキーの詳細を非表示", + "aria_cookie_settings": "クッキーの設定", + "privacy_policy_link_text": "プライバシーポリシー", + "cookie_policy_link_text": "クッキーポリシー", + "placeholder_text": "このコンテンツには{{category}}クッキーが必要です。", + "placeholder_button": "クッキー設定を管理", + + "banner_title_opt_out": "クッキーに関するお知らせ", + "banner_description_opt_out": "私たちはクッキーおよび類似技術を使用しています。不要なクッキーを拒否することができます。{{cookie_policy_link}}", + "button_acknowledge": "OK", + "button_opt_out": "個人情報の販売・共有を拒否する", + + "banner_title_notice": "クッキーに関するお知らせ", + "banner_description_notice": "このサイトはユーザー体験を向上させるためにクッキーを使用しています。{{cookie_policy_link}}", + "button_dismiss": "了解", + }, + "ko": { + "banner_title": "쿠키 설정", + "banner_description": "저희는 귀하의 경험을 개선하고 사이트 트래픽을 분석하기 위해 쿠키를 사용합니다. {{cookie_policy_link}}", + "button_accept_all": "모두 수락", + "button_reject_all": "모두 거부", + "button_customize": "맞춤 설정", + "button_save": "설정 저장", + "panel_title": "설정 맞춤화", + "panel_description": "허용할 쿠키 카테고리를 선택하세요. {{necessary_category}} 쿠키는 사이트 작동에 필요하므로 항상 활성화됩니다.", + "aria_close": "닫기", + "aria_show_details": "쿠키 세부 정보 표시", + "aria_hide_details": "쿠키 세부 정보 숨기기", + "aria_cookie_settings": "쿠키 설정", + "privacy_policy_link_text": "개인정보 처리방침", + "cookie_policy_link_text": "쿠키 정책", + "placeholder_text": "이 콘텐츠에는 {{category}} 쿠키가 필요합니다.", + "placeholder_button": "쿠키 설정 관리", + + "banner_title_opt_out": "쿠키 알림", + "banner_description_opt_out": "저희는 쿠키 및 유사 기술을 사용합니다. 비필수 쿠키를 거부할 수 있습니다. {{cookie_policy_link}}", + "button_acknowledge": "확인", + "button_opt_out": "내 개인정보 판매 또는 공유 금지", + + "banner_title_notice": "쿠키 알림", + "banner_description_notice": "이 사이트는 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. {{cookie_policy_link}}", + "button_dismiss": "확인했습니다", + }, + "pl": { + "banner_title": "Preferencje plików cookie", + "banner_description": "Używamy plików cookie, aby poprawić Twoje doświadczenia i analizować ruch na stronie. {{cookie_policy_link}}", + "button_accept_all": "Zaakceptuj wszystkie", + "button_reject_all": "Odrzuć wszystkie", + "button_customize": "Dostosuj", + "button_save": "Zapisz preferencje", + "panel_title": "Dostosuj preferencje", + "panel_description": "Wybierz, które kategorie plików cookie chcesz zezwolić. Pliki cookie {{necessary_category}} są zawsze aktywne, ponieważ są niezbędne do działania strony.", + "aria_close": "Zamknij", + "aria_show_details": "Pokaż szczegóły plików cookie", + "aria_hide_details": "Ukryj szczegóły plików cookie", + "aria_cookie_settings": "Ustawienia plików cookie", + "privacy_policy_link_text": "Polityka prywatności", + "cookie_policy_link_text": "Polityka plików cookie", + "placeholder_text": "Ta treść wymaga plików cookie {{category}}.", + "placeholder_button": "Zarządzaj preferencjami plików cookie", + + "banner_title_opt_out": "Powiadomienie o plikach cookie", + "banner_description_opt_out": "Używamy plików cookie i podobnych technologii. Możesz zrezygnować z nieistotnych plików cookie. {{cookie_policy_link}}", + "button_acknowledge": "OK", + "button_opt_out": "Nie sprzedawaj ani nie udostępniaj moich danych osobowych", + + "banner_title_notice": "Powiadomienie o plikach cookie", + "banner_description_notice": "Ta strona używa plików cookie, aby poprawić Twoje doświadczenia. {{cookie_policy_link}}", + "button_dismiss": "Rozumiem", + }, + "pt": { + "banner_title": "Preferências de Cookies", + "banner_description": "Utilizamos cookies para melhorar sua experiência e analisar o tráfego do site. {{cookie_policy_link}}", + "button_accept_all": "Aceitar tudo", + "button_reject_all": "Rejeitar tudo", + "button_customize": "Personalizar", + "button_save": "Salvar preferências", + "panel_title": "Personalizar Preferências", + "panel_description": "Escolha quais categorias de cookies permitir. Os cookies {{necessary_category}} estão sempre ativos, pois são necessários para o funcionamento do site.", + "aria_close": "Fechar", + "aria_show_details": "Mostrar detalhes dos cookies", + "aria_hide_details": "Ocultar detalhes dos cookies", + "aria_cookie_settings": "Configurações de cookies", + "privacy_policy_link_text": "Política de Privacidade", + "cookie_policy_link_text": "Política de Cookies", + "placeholder_text": "Este conteúdo requer cookies de {{category}}.", + "placeholder_button": "Gerenciar preferências de cookies", + + "banner_title_opt_out": "Aviso de Cookies", + "banner_description_opt_out": "Utilizamos cookies e tecnologias similares. Você pode recusar cookies não essenciais. {{cookie_policy_link}}", + "button_acknowledge": "OK", + "button_opt_out": "Não vender nem compartilhar minhas informações pessoais", + + "banner_title_notice": "Aviso de Cookies", + "banner_description_notice": "Este site usa cookies para melhorar sua experiência. {{cookie_policy_link}}", + "button_dismiss": "Entendi", + }, + "tr": { + "banner_title": "Çerez Tercihleri", + "banner_description": "Deneyiminizi iyileştirmek ve site trafiğini analiz etmek için çerezler kullanıyoruz. {{cookie_policy_link}}", + "button_accept_all": "Tümünü kabul et", + "button_reject_all": "Tümünü reddet", + "button_customize": "Özelleştir", + "button_save": "Tercihleri kaydet", + "panel_title": "Tercihleri Özelleştir", + "panel_description": "Hangi çerez kategorilerine izin vermek istediğinizi seçin. {{necessary_category}} çerezleri, sitenin çalışması için gerekli olduğundan her zaman etkindir.", + "aria_close": "Kapat", + "aria_show_details": "Çerez ayrıntılarını göster", + "aria_hide_details": "Çerez ayrıntılarını gizle", + "aria_cookie_settings": "Çerez ayarları", + "privacy_policy_link_text": "Gizlilik Politikası", + "cookie_policy_link_text": "Çerez Politikası", + "placeholder_text": "Bu içerik {{category}} çerezleri gerektirir.", + "placeholder_button": "Çerez tercihlerini yönet", + + "banner_title_opt_out": "Çerez Bildirimi", + "banner_description_opt_out": "Çerezler ve benzer teknolojiler kullanıyoruz. Zorunlu olmayan çerezleri reddedebilirsiniz. {{cookie_policy_link}}", + "button_acknowledge": "Tamam", + "button_opt_out": "Kişisel Bilgilerimi Satma veya Paylaşma", + + "banner_title_notice": "Çerez Bildirimi", + "banner_description_notice": "Bu site deneyiminizi geliştirmek için çerezler kullanır. {{cookie_policy_link}}", + "button_dismiss": "Anladım", + }, + "uk": { + "banner_title": "Налаштування файлів cookie", + "banner_description": "Ми використовуємо файли cookie для покращення вашого досвіду та аналізу трафіку сайту. {{cookie_policy_link}}", + "button_accept_all": "Прийняти всі", + "button_reject_all": "Відхилити всі", + "button_customize": "Налаштувати", + "button_save": "Зберегти налаштування", + "panel_title": "Налаштувати параметри", + "panel_description": "Виберіть, які категорії файлів cookie дозволити. Файли cookie {{necessary_category}} завжди активні, оскільки вони необхідні для роботи сайту.", + "aria_close": "Закрити", + "aria_show_details": "Показати деталі файлів cookie", + "aria_hide_details": "Приховати деталі файлів cookie", + "aria_cookie_settings": "Налаштування файлів cookie", + "privacy_policy_link_text": "Політика конфіденційності", + "cookie_policy_link_text": "Політика файлів cookie", + "placeholder_text": "Цей контент потребує файлів cookie {{category}}.", + "placeholder_button": "Керувати налаштуваннями файлів cookie", + + "banner_title_opt_out": "Повідомлення про файли cookie", + "banner_description_opt_out": "Ми використовуємо файли cookie та подібні технології. Ви можете відмовитися від неістотних файлів cookie. {{cookie_policy_link}}", + "button_acknowledge": "OK", + "button_opt_out": "Не продавати та не ділитися моїми персональними даними", + + "banner_title_notice": "Повідомлення про файли cookie", + "banner_description_notice": "Цей сайт використовує файли cookie для покращення вашого досвіду. {{cookie_policy_link}}", + "button_dismiss": "Зрозуміло", + }, + "zh": { + "banner_title": "Cookie 偏好设置", + "banner_description": "我们使用 Cookie 来改善您的体验并分析网站流量。{{cookie_policy_link}}", + "button_accept_all": "全部接受", + "button_reject_all": "全部拒绝", + "button_customize": "自定义", + "button_save": "保存偏好设置", + "panel_title": "自定义偏好设置", + "panel_description": "选择要允许的 Cookie 类别。{{necessary_category}} Cookie 始终处于活动状态,因为它们是网站正常运行所必需的。", + "aria_close": "关闭", + "aria_show_details": "显示 Cookie 详情", + "aria_hide_details": "隐藏 Cookie 详情", + "aria_cookie_settings": "Cookie 设置", + "privacy_policy_link_text": "隐私政策", + "cookie_policy_link_text": "Cookie 政策", + "placeholder_text": "此内容需要 {{category}} Cookie。", + "placeholder_button": "管理 Cookie 偏好设置", + + "banner_title_opt_out": "Cookie 通知", + "banner_description_opt_out": "我们使用 Cookie 和类似技术。您可以选择拒绝非必要 Cookie。{{cookie_policy_link}}", + "button_acknowledge": "确定", + "button_opt_out": "不要出售或共享我的个人信息", + + "banner_title_notice": "Cookie 通知", + "banner_description_notice": "本网站使用 Cookie 来提升您的体验。{{cookie_policy_link}}", + "button_dismiss": "知道了", + }, "en": { "banner_title": "Cookie Preferences", "banner_description": "We use cookies to improve your experience and analyze site traffic. {{cookie_policy_link}}", diff --git a/pkg/coredata/migrations/20260605T124137Z.sql b/pkg/coredata/migrations/20260605T124137Z.sql new file mode 100644 index 000000000..536f1972b --- /dev/null +++ b/pkg/coredata/migrations/20260605T124137Z.sql @@ -0,0 +1,267 @@ +-- Copyright (c) 2026 Probo Inc . +-- +-- Permission to use, copy, modify, and/or distribute this software for any +-- purpose with or without fee is hereby granted, provided that the above +-- copyright notice and this permission notice appear in all copies. +-- +-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +-- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +-- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +-- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +-- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +-- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +-- PERFORMANCE OF THIS SOFTWARE. + +-- Backfill default translations for the 9 new supported languages on all +-- existing cookie banners. Rows that already exist (via a prior manual upsert) +-- are skipped thanks to ON CONFLICT DO NOTHING. + +INSERT INTO cookie_banner_translations ( + id, + tenant_id, + organization_id, + cookie_banner_id, + language, + translations, + created_at, + updated_at +) +SELECT + generate_gid(decode_base64_unpadded(cb.tenant_id), 86), + cb.tenant_id, + cb.organization_id, + cb.id, + lang.language, + lang.translations::jsonb, + NOW(), + NOW() +FROM cookie_banners cb +CROSS JOIN (VALUES + ('id', '{ + "banner_title": "Preferensi Cookie", + "banner_description": "Kami menggunakan cookie untuk meningkatkan pengalaman Anda dan menganalisis lalu lintas situs. {{cookie_policy_link}}", + "button_accept_all": "Terima semua", + "button_reject_all": "Tolak semua", + "button_customize": "Sesuaikan", + "button_save": "Simpan preferensi", + "panel_title": "Sesuaikan Preferensi", + "panel_description": "Pilih kategori cookie yang ingin Anda izinkan. Cookie {{necessary_category}} selalu aktif karena diperlukan agar situs berfungsi.", + "aria_close": "Tutup", + "aria_show_details": "Tampilkan detail cookie", + "aria_hide_details": "Sembunyikan detail cookie", + "aria_cookie_settings": "Pengaturan cookie", + "privacy_policy_link_text": "Kebijakan Privasi", + "cookie_policy_link_text": "Kebijakan Cookie", + "placeholder_text": "Konten ini memerlukan cookie {{category}}.", + "placeholder_button": "Kelola preferensi cookie", + "banner_title_opt_out": "Pemberitahuan Cookie", + "banner_description_opt_out": "Kami menggunakan cookie dan teknologi serupa. Anda dapat menolak cookie yang tidak penting. {{cookie_policy_link}}", + "button_acknowledge": "OK", + "button_opt_out": "Jangan Jual atau Bagikan Informasi Pribadi Saya", + "banner_title_notice": "Pemberitahuan Cookie", + "banner_description_notice": "Situs ini menggunakan cookie untuk meningkatkan pengalaman Anda. {{cookie_policy_link}}", + "button_dismiss": "Mengerti" + }'), + ('it', '{ + "banner_title": "Preferenze Cookie", + "banner_description": "Utilizziamo i cookie per migliorare la tua esperienza e analizzare il traffico del sito. {{cookie_policy_link}}", + "button_accept_all": "Accetta tutto", + "button_reject_all": "Rifiuta tutto", + "button_customize": "Personalizza", + "button_save": "Salva preferenze", + "panel_title": "Personalizza le Preferenze", + "panel_description": "Scegli quali categorie di cookie consentire. I cookie {{necessary_category}} sono sempre attivi poiché necessari per il funzionamento del sito.", + "aria_close": "Chiudi", + "aria_show_details": "Mostra dettagli cookie", + "aria_hide_details": "Nascondi dettagli cookie", + "aria_cookie_settings": "Impostazioni cookie", + "privacy_policy_link_text": "Informativa sulla Privacy", + "cookie_policy_link_text": "Informativa sui Cookie", + "placeholder_text": "Questo contenuto richiede i cookie {{category}}.", + "placeholder_button": "Gestisci le preferenze dei cookie", + "banner_title_opt_out": "Avviso sui Cookie", + "banner_description_opt_out": "Utilizziamo cookie e tecnologie simili. Puoi rinunciare ai cookie non essenziali. {{cookie_policy_link}}", + "button_acknowledge": "OK", + "button_opt_out": "Non vendere né condividere le mie informazioni personali", + "banner_title_notice": "Avviso sui Cookie", + "banner_description_notice": "Questo sito utilizza i cookie per migliorare la tua esperienza. {{cookie_policy_link}}", + "button_dismiss": "Capito" + }'), + ('ja', '{ + "banner_title": "クッキーの設定", + "banner_description": "私たちはクッキーを使用してユーザー体験を向上させ、サイトのトラフィックを分析します。{{cookie_policy_link}}", + "button_accept_all": "すべて承認", + "button_reject_all": "すべて拒否", + "button_customize": "カスタマイズ", + "button_save": "設定を保存", + "panel_title": "設定をカスタマイズ", + "panel_description": "許可するクッキーのカテゴリを選択してください。{{necessary_category}}クッキーはサイトの動作に必要なため、常に有効です。", + "aria_close": "閉じる", + "aria_show_details": "クッキーの詳細を表示", + "aria_hide_details": "クッキーの詳細を非表示", + "aria_cookie_settings": "クッキーの設定", + "privacy_policy_link_text": "プライバシーポリシー", + "cookie_policy_link_text": "クッキーポリシー", + "placeholder_text": "このコンテンツには{{category}}クッキーが必要です。", + "placeholder_button": "クッキー設定を管理", + "banner_title_opt_out": "クッキーに関するお知らせ", + "banner_description_opt_out": "私たちはクッキーおよび類似技術を使用しています。不要なクッキーを拒否することができます。{{cookie_policy_link}}", + "button_acknowledge": "OK", + "button_opt_out": "個人情報の販売・共有を拒否する", + "banner_title_notice": "クッキーに関するお知らせ", + "banner_description_notice": "このサイトはユーザー体験を向上させるためにクッキーを使用しています。{{cookie_policy_link}}", + "button_dismiss": "了解" + }'), + ('ko', '{ + "banner_title": "쿠키 설정", + "banner_description": "저희는 귀하의 경험을 개선하고 사이트 트래픽을 분석하기 위해 쿠키를 사용합니다. {{cookie_policy_link}}", + "button_accept_all": "모두 수락", + "button_reject_all": "모두 거부", + "button_customize": "맞춤 설정", + "button_save": "설정 저장", + "panel_title": "설정 맞춤화", + "panel_description": "허용할 쿠키 카테고리를 선택하세요. {{necessary_category}} 쿠키는 사이트 작동에 필요하므로 항상 활성화됩니다.", + "aria_close": "닫기", + "aria_show_details": "쿠키 세부 정보 표시", + "aria_hide_details": "쿠키 세부 정보 숨기기", + "aria_cookie_settings": "쿠키 설정", + "privacy_policy_link_text": "개인정보 처리방침", + "cookie_policy_link_text": "쿠키 정책", + "placeholder_text": "이 콘텐츠에는 {{category}} 쿠키가 필요합니다.", + "placeholder_button": "쿠키 설정 관리", + "banner_title_opt_out": "쿠키 알림", + "banner_description_opt_out": "저희는 쿠키 및 유사 기술을 사용합니다. 비필수 쿠키를 거부할 수 있습니다. {{cookie_policy_link}}", + "button_acknowledge": "확인", + "button_opt_out": "내 개인정보 판매 또는 공유 금지", + "banner_title_notice": "쿠키 알림", + "banner_description_notice": "이 사이트는 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. {{cookie_policy_link}}", + "button_dismiss": "확인했습니다" + }'), + ('pl', '{ + "banner_title": "Preferencje plików cookie", + "banner_description": "Używamy plików cookie, aby poprawić Twoje doświadczenia i analizować ruch na stronie. {{cookie_policy_link}}", + "button_accept_all": "Zaakceptuj wszystkie", + "button_reject_all": "Odrzuć wszystkie", + "button_customize": "Dostosuj", + "button_save": "Zapisz preferencje", + "panel_title": "Dostosuj preferencje", + "panel_description": "Wybierz, które kategorie plików cookie chcesz zezwolić. Pliki cookie {{necessary_category}} są zawsze aktywne, ponieważ są niezbędne do działania strony.", + "aria_close": "Zamknij", + "aria_show_details": "Pokaż szczegóły plików cookie", + "aria_hide_details": "Ukryj szczegóły plików cookie", + "aria_cookie_settings": "Ustawienia plików cookie", + "privacy_policy_link_text": "Polityka prywatności", + "cookie_policy_link_text": "Polityka plików cookie", + "placeholder_text": "Ta treść wymaga plików cookie {{category}}.", + "placeholder_button": "Zarządzaj preferencjami plików cookie", + "banner_title_opt_out": "Powiadomienie o plikach cookie", + "banner_description_opt_out": "Używamy plików cookie i podobnych technologii. Możesz zrezygnować z nieistotnych plików cookie. {{cookie_policy_link}}", + "button_acknowledge": "OK", + "button_opt_out": "Nie sprzedawaj ani nie udostępniaj moich danych osobowych", + "banner_title_notice": "Powiadomienie o plikach cookie", + "banner_description_notice": "Ta strona używa plików cookie, aby poprawić Twoje doświadczenia. {{cookie_policy_link}}", + "button_dismiss": "Rozumiem" + }'), + ('pt', '{ + "banner_title": "Preferências de Cookies", + "banner_description": "Utilizamos cookies para melhorar sua experiência e analisar o tráfego do site. {{cookie_policy_link}}", + "button_accept_all": "Aceitar tudo", + "button_reject_all": "Rejeitar tudo", + "button_customize": "Personalizar", + "button_save": "Salvar preferências", + "panel_title": "Personalizar Preferências", + "panel_description": "Escolha quais categorias de cookies permitir. Os cookies {{necessary_category}} estão sempre ativos, pois são necessários para o funcionamento do site.", + "aria_close": "Fechar", + "aria_show_details": "Mostrar detalhes dos cookies", + "aria_hide_details": "Ocultar detalhes dos cookies", + "aria_cookie_settings": "Configurações de cookies", + "privacy_policy_link_text": "Política de Privacidade", + "cookie_policy_link_text": "Política de Cookies", + "placeholder_text": "Este conteúdo requer cookies de {{category}}.", + "placeholder_button": "Gerenciar preferências de cookies", + "banner_title_opt_out": "Aviso de Cookies", + "banner_description_opt_out": "Utilizamos cookies e tecnologias similares. Você pode recusar cookies não essenciais. {{cookie_policy_link}}", + "button_acknowledge": "OK", + "button_opt_out": "Não vender nem compartilhar minhas informações pessoais", + "banner_title_notice": "Aviso de Cookies", + "banner_description_notice": "Este site usa cookies para melhorar sua experiência. {{cookie_policy_link}}", + "button_dismiss": "Entendi" + }'), + ('tr', '{ + "banner_title": "Çerez Tercihleri", + "banner_description": "Deneyiminizi iyileştirmek ve site trafiğini analiz etmek için çerezler kullanıyoruz. {{cookie_policy_link}}", + "button_accept_all": "Tümünü kabul et", + "button_reject_all": "Tümünü reddet", + "button_customize": "Özelleştir", + "button_save": "Tercihleri kaydet", + "panel_title": "Tercihleri Özelleştir", + "panel_description": "Hangi çerez kategorilerine izin vermek istediğinizi seçin. {{necessary_category}} çerezleri, sitenin çalışması için gerekli olduğundan her zaman etkindir.", + "aria_close": "Kapat", + "aria_show_details": "Çerez ayrıntılarını göster", + "aria_hide_details": "Çerez ayrıntılarını gizle", + "aria_cookie_settings": "Çerez ayarları", + "privacy_policy_link_text": "Gizlilik Politikası", + "cookie_policy_link_text": "Çerez Politikası", + "placeholder_text": "Bu içerik {{category}} çerezleri gerektirir.", + "placeholder_button": "Çerez tercihlerini yönet", + "banner_title_opt_out": "Çerez Bildirimi", + "banner_description_opt_out": "Çerezler ve benzer teknolojiler kullanıyoruz. Zorunlu olmayan çerezleri reddedebilirsiniz. {{cookie_policy_link}}", + "button_acknowledge": "Tamam", + "button_opt_out": "Kişisel Bilgilerimi Satma veya Paylaşma", + "banner_title_notice": "Çerez Bildirimi", + "banner_description_notice": "Bu site deneyiminizi geliştirmek için çerezler kullanır. {{cookie_policy_link}}", + "button_dismiss": "Anladım" + }'), + ('uk', '{ + "banner_title": "Налаштування файлів cookie", + "banner_description": "Ми використовуємо файли cookie для покращення вашого досвіду та аналізу трафіку сайту. {{cookie_policy_link}}", + "button_accept_all": "Прийняти всі", + "button_reject_all": "Відхилити всі", + "button_customize": "Налаштувати", + "button_save": "Зберегти налаштування", + "panel_title": "Налаштувати параметри", + "panel_description": "Виберіть, які категорії файлів cookie дозволити. Файли cookie {{necessary_category}} завжди активні, оскільки вони необхідні для роботи сайту.", + "aria_close": "Закрити", + "aria_show_details": "Показати деталі файлів cookie", + "aria_hide_details": "Приховати деталі файлів cookie", + "aria_cookie_settings": "Налаштування файлів cookie", + "privacy_policy_link_text": "Політика конфіденційності", + "cookie_policy_link_text": "Політика файлів cookie", + "placeholder_text": "Цей контент потребує файлів cookie {{category}}.", + "placeholder_button": "Керувати налаштуваннями файлів cookie", + "banner_title_opt_out": "Повідомлення про файли cookie", + "banner_description_opt_out": "Ми використовуємо файли cookie та подібні технології. Ви можете відмовитися від неістотних файлів cookie. {{cookie_policy_link}}", + "button_acknowledge": "OK", + "button_opt_out": "Не продавати та не ділитися моїми персональними даними", + "banner_title_notice": "Повідомлення про файли cookie", + "banner_description_notice": "Цей сайт використовує файли cookie для покращення вашого досвіду. {{cookie_policy_link}}", + "button_dismiss": "Зрозуміло" + }'), + ('zh', '{ + "banner_title": "Cookie 偏好设置", + "banner_description": "我们使用 Cookie 来改善您的体验并分析网站流量。{{cookie_policy_link}}", + "button_accept_all": "全部接受", + "button_reject_all": "全部拒绝", + "button_customize": "自定义", + "button_save": "保存偏好设置", + "panel_title": "自定义偏好设置", + "panel_description": "选择要允许的 Cookie 类别。{{necessary_category}} Cookie 始终处于活动状态,因为它们是网站正常运行所必需的。", + "aria_close": "关闭", + "aria_show_details": "显示 Cookie 详情", + "aria_hide_details": "隐藏 Cookie 详情", + "aria_cookie_settings": "Cookie 设置", + "privacy_policy_link_text": "隐私政策", + "cookie_policy_link_text": "Cookie 政策", + "placeholder_text": "此内容需要 {{category}} Cookie。", + "placeholder_button": "管理 Cookie 偏好设置", + "banner_title_opt_out": "Cookie 通知", + "banner_description_opt_out": "我们使用 Cookie 和类似技术。您可以选择拒绝非必要 Cookie。{{cookie_policy_link}}", + "button_acknowledge": "确定", + "button_opt_out": "不要出售或共享我的个人信息", + "banner_title_notice": "Cookie 通知", + "banner_description_notice": "本网站使用 Cookie 来提升您的体验。{{cookie_policy_link}}", + "button_dismiss": "知道了" + }') +) AS lang(language, translations) +ON CONFLICT (cookie_banner_id, language) +DO NOTHING;