Files
ai-disclosure-standard/internal/i18n/catalog.go
T
2026-07-20 21:03:05 +02:00

431 lines
59 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package i18n
import (
"sort"
"strings"
)
type PresetText struct {
Title string `json:"title"`
Description string `json:"description"`
}
type Locale struct {
Code string `json:"code"`
Name string `json:"name"`
Text map[string]string `json:"text"`
Presets map[string]PresetText `json:"presets"`
Extents map[string]string `json:"extents"`
Components map[string]string `json:"components"`
Reviews map[string]string `json:"reviews"`
Activities map[string]string `json:"activities"`
Assurances map[string]string `json:"assurances"`
}
type LanguageOption struct {
Code string
Name string
}
var catalogs = map[string]Locale{
"de": locale("de", "Deutsch", map[string]string{
"meta_description": "Offene, maschinenlesbare und selbst hostbare Kennzeichnung von KI-Nutzung.",
"nav_generator": "Generator", "nav_api": "API", "nav_background": "Hintergrund",
"standard_eyebrow": "Offener Kennzeichnungsstandard", "hero_title": "Offenlegen, wie KI an einem Inhalt beteiligt war.",
"hero_lead": "Sichtbares SVG-Badge, verständliche Erklärungsseite und maschinenlesbares JSON-LD – ohne Cookies, Tracking oder Datenbankzwang.",
"generator_eyebrow": "Generator", "generator_title": "Einbettung erzeugen", "generator_intro": "Wähle eine Vorlage oder erfasse die KI-Nutzung strukturiert nach Inhaltsbestandteilen. Vorschau, Einbettungscode und maschinenlesbare Erklärung werden unmittelbar erzeugt.",
"field_preset": "Preset", "option_custom": "Benutzerdefinierte Struktur", "field_component": "Komponente", "field_extent": "KI-Anteil", "field_review": "Menschliche Prüfung",
"field_activities": "Tätigkeiten", "activities_help": "Kommagetrennte Standardwerte, zum Beispiel research, summarisation oder translation.",
"field_subject": "URL des gekennzeichneten Inhalts", "field_language": "Ausgabesprache", "field_theme": "Darstellung", "theme_mono": "Monochrom", "theme_color": "Farbig",
"preview": "Vorschau", "copy_html": "HTML kopieren", "copied": "Kopiert",
"pro_eyebrow": "Pro-Anpassung", "pro_title": "Eigene Texte und Badge-Designs", "pro_enabled": "Diese Instanz besitzt eine gültige Pro-Lizenz. Individuelle Texte und Farben können verwendet werden.",
"pro_locked": "Individuelle Titel, Beschreibungstexte, Badge-Beschriftungen und Farben sind in der Pro-Ausgabe verfügbar.",
"custom_title": "Eigener Erklärungstitel", "custom_description": "Eigene Beschreibung", "custom_badge_label": "Eigene Badge-Beschriftung links", "custom_badge_message": "Eigene Badge-Beschriftung rechts",
"custom_left_color": "Farbe links", "custom_right_color": "Farbe rechts", "pro_required": "Pro-Lizenz erforderlich",
"api_badge_title": "Badge-Endpunkt", "api_badge_desc": "Standard-Badges werden aus Presets und strukturierten Parametern erzeugt.",
"api_manifest_title": "Manifest", "api_manifest_desc": "Das JSON-LD-Manifest kann direkt verlinkt, validiert oder in Build-Prozesse übernommen werden.",
"api_stateless_title": "Zustandslos", "api_stateless_desc": "Keine Sessions und deterministische Antworten. Geeignet für horizontale Skalierung, Reverse Proxies und CDNs.",
"footer_no_legal": "Keine Rechtsberatung.", "back": "Zurück", "declaration_eyebrow": "KI-Nutzungserklärung", "fact_component": "Komponente", "fact_extent": "KI-Anteil",
"fact_activities": "Tätigkeiten", "fact_review": "Menschliche Prüfung", "fact_note": "Hinweis", "fact_assurance": "Nachweisniveau", "fact_subject": "Gekennzeichneter Inhalt",
"fact_responsibility": "Redaktionelle Verantwortung", "fact_declared_at": "Erstellt", "none_value": "keine", "transparency_label": "Transparenzhinweis:",
"transparency_text": "Diese Erklärung beschreibt die angegebene Nutzung von KI. Sie ist keine Lizenz, Zertifizierung oder Rechtsberatung.", "manifest": "Maschinenlesbares Manifest",
"ai_label": "KI-Nutzung", "capabilities": "Funktionen",
},
map[string]PresetText{
"no-ai": {"Kein Einsatz von KI", "Für die Erstellung des gekennzeichneten Inhalts wurde keine generative KI eingesetzt. Die inhaltliche Verantwortung und Prüfung lagen bei Menschen."},
"research": {"Rechercheunterstützung", "KI wurde unterstützend zur Recherche und zum Auffinden relevanter Quellen eingesetzt. Auswahl, Einordnung und redaktionelle Ausarbeitung erfolgten durch Menschen."},
"summary": {"Inhaltliche Zusammenfassung", "KI wurde zur Zusammenfassung von Quellen eingesetzt. Auswahl, fachliche Einordnung und Endfassung wurden durch Menschen verantwortet und geprüft."},
"full": {"Vollständige Inhaltserstellung", "Der gekennzeichnete Inhalt wurde überwiegend oder vollständig mit generativer KI erstellt. Die veröffentlichte Fassung wurde anschließend menschlich geprüft und redaktionell verantwortet."},
},
map[string]string{"none": "Kein Einsatz von KI", "assisted": "KI-unterstützt", "partial": "Teilweise KI-generiert", "mostly": "Überwiegend KI-generiert", "full": "Vollständig KI-generiert"},
map[string]string{"text": "Text", "coverImage": "Titelbild", "image": "Bild", "audio": "Audio", "video": "Video", "code": "Code", "other": "Sonstiges"},
map[string]string{"none": "Keine", "basic": "Grundlegend", "editorial": "Redaktionell", "expert": "Fachlich"},
map[string]string{"research": "Recherche", "summarisation": "Zusammenfassung", "drafting": "Entwurf", "generation": "Erzeugung", "translation": "Übersetzung", "editing": "Überarbeitung", "imageGeneration": "Bilderzeugung", "codeGeneration": "Codeerzeugung", "transcription": "Transkription", "classification": "Klassifikation"},
map[string]string{"selfDeclared": "Selbsterklärung", "technicallyRecorded": "Technisch protokolliert", "signed": "Signiert", "verified": "Verifiziert"}),
"en": locale("en", "English", map[string]string{
"meta_description": "Open, machine-readable and self-hostable AI usage disclosure.", "nav_generator": "Generator", "nav_api": "API", "nav_background": "Background",
"standard_eyebrow": "Open disclosure standard", "hero_title": "Disclose how AI contributed to content.", "hero_lead": "A visible SVG badge, a human-readable declaration page and machine-readable JSON-LD – without cookies, tracking or a database requirement.",
"generator_eyebrow": "Generator", "generator_title": "Create an embed", "generator_intro": "Choose a template or record AI use systematically by content component. The preview, embed code and machine-readable declaration are generated immediately.",
"field_preset": "Preset", "option_custom": "Custom structure", "field_component": "Component", "field_extent": "AI contribution", "field_review": "Human review", "field_activities": "Activities",
"activities_help": "Comma-separated standard values such as research, summarisation or translation.", "field_subject": "URL of the labelled content", "field_language": "Output language", "field_theme": "Appearance", "theme_mono": "Monochrome", "theme_color": "Colour",
"preview": "Preview", "copy_html": "Copy HTML", "copied": "Copied", "pro_eyebrow": "Pro customisation", "pro_title": "Custom copy and badge designs",
"pro_enabled": "This instance has a valid Pro licence. Custom copy and colours are available.", "pro_locked": "Custom titles, descriptions, badge labels and colours are available in the Pro edition.",
"custom_title": "Custom declaration title", "custom_description": "Custom description", "custom_badge_label": "Custom left badge label", "custom_badge_message": "Custom right badge label", "custom_left_color": "Left colour", "custom_right_color": "Right colour", "pro_required": "Pro licence required",
"api_badge_title": "Badge endpoint", "api_badge_desc": "Standard badges are generated from presets and structured parameters. Pro adds custom copy and colours.", "api_manifest_title": "Manifest", "api_manifest_desc": "The JSON-LD manifest can be linked, validated or included in build pipelines.",
"api_stateless_title": "Stateless", "api_stateless_desc": "No sessions and deterministic responses. Designed for horizontal scaling, reverse proxies and CDNs.", "footer_no_legal": "Not legal advice.",
"back": "Back", "declaration_eyebrow": "AI usage declaration", "fact_component": "Component", "fact_extent": "AI contribution", "fact_activities": "Activities", "fact_review": "Human review", "fact_note": "Note", "fact_assurance": "Assurance level", "fact_subject": "Labelled content", "fact_responsibility": "Editorial responsibility", "fact_declared_at": "Declared at", "none_value": "none", "transparency_label": "Transparency notice:", "transparency_text": "This declaration describes the stated use of AI. It is not a licence, certification or legal advice.", "manifest": "Machine-readable manifest", "ai_label": "AI use", "capabilities": "Capabilities",
},
map[string]PresetText{"no-ai": {"No AI use", "No generative AI was used to create the labelled content. Responsibility for the content and its review remained with people."}, "research": {"Research assistance", "AI was used to support research and identify relevant sources. Selection, assessment and editorial preparation were carried out by people."}, "summary": {"Content summarisation", "AI was used to summarise source material. Selection, contextual assessment and the final version were the responsibility of human editors."}, "full": {"Full content generation", "The labelled content was created mostly or entirely with generative AI. The published version was subsequently reviewed and editorially approved by people."}},
map[string]string{"none": "No AI use", "assisted": "AI-assisted", "partial": "Partially AI-generated", "mostly": "Mostly AI-generated", "full": "Fully AI-generated"},
map[string]string{"text": "Text", "coverImage": "Cover image", "image": "Image", "audio": "Audio", "video": "Video", "code": "Code", "other": "Other"},
map[string]string{"none": "None", "basic": "Basic", "editorial": "Editorial", "expert": "Expert"},
map[string]string{"research": "Research", "summarisation": "Summarisation", "drafting": "Drafting", "generation": "Generation", "translation": "Translation", "editing": "Editing", "imageGeneration": "Image generation", "codeGeneration": "Code generation", "transcription": "Transcription", "classification": "Classification"},
map[string]string{"selfDeclared": "Self-declared", "technicallyRecorded": "Technically recorded", "signed": "Signed", "verified": "Verified"}),
"fr": europeanLocale("fr", "Français", "Déclarer comment l’IA a contribué à un contenu.", "Utilisation de l’IA", "Aucune utilisation de l’IA", "Assisté par l’IA", "Partiellement généré par l’IA", "Majoritairement généré par l’IA", "Entièrement généré par l’IA",
map[string]PresetText{"no-ai": {"Aucune utilisation de l’IA", "Le contenu identifié a été créé sans IA générative et vérifié par une personne."}, "research": {"Aide à la recherche", "L’IA a été utilisée pour la recherche ou l’identification de sources. Le contenu a été rédigé et vérifié éditorialement."}, "summary": {"Résumé de contenu", "L’IA a été utilisée pour résumer des sources. La sélection, l’interprétation et la version finale ont été vérifiées par une personne."}, "full": {"Génération complète du contenu", "Le contenu a été majoritairement ou entièrement généré par l’IA puis vérifié éditorialement."}}),
"es": europeanLocale("es", "Español", "Indica cómo ha contribuido la IA a un contenido.", "Uso de IA", "Sin uso de IA", "Asistido por IA", "Generado parcialmente por IA", "Generado mayoritariamente por IA", "Generado completamente por IA",
map[string]PresetText{"no-ai": {"Sin uso de IA", "El contenido identificado se creó sin IA generativa y fue revisado por una persona."}, "research": {"Apoyo a la investigación", "La IA se utilizó para investigar o localizar fuentes relevantes. El contenido se redactó y revisó editorialmente."}, "summary": {"Resumen de contenido", "La IA se utilizó para resumir fuentes. La selección, interpretación y versión final fueron revisadas por una persona."}, "full": {"Generación completa del contenido", "El contenido fue generado mayoritaria o completamente por IA y posteriormente revisado editorialmente."}}),
"it": europeanLocale("it", "Italiano", "Dichiara come l’IA ha contribuito a un contenuto.", "Uso dell’IA", "Nessun uso dell’IA", "Assistito dall’IA", "Generato parzialmente dall’IA", "Generato prevalentemente dall’IA", "Generato interamente dall’IA",
map[string]PresetText{"no-ai": {"Nessun uso dell’IA", "Il contenuto indicato è stato creato senza IA generativa e verificato da una persona."}, "research": {"Supporto alla ricerca", "L’IA è stata usata per la ricerca o per individuare fonti rilevanti. Il contenuto è stato creato e verificato editorialmente."}, "summary": {"Sintesi del contenuto", "L’IA è stata usata per riassumere le fonti. Selezione, interpretazione e versione finale sono state verificate da una persona."}, "full": {"Generazione completa del contenuto", "Il contenuto è stato generato prevalentemente o interamente dall’IA e poi verificato editorialmente."}}),
"nl": europeanLocale("nl", "Nederlands", "Maak zichtbaar hoe AI aan inhoud heeft bijgedragen.", "AI-gebruik", "Geen AI gebruikt", "AI-ondersteund", "Gedeeltelijk door AI gegenereerd", "Grotendeels door AI gegenereerd", "Volledig door AI gegenereerd",
map[string]PresetText{"no-ai": {"Geen AI gebruikt", "De gemarkeerde inhoud is zonder generatieve AI gemaakt en door een mens gecontroleerd."}, "research": {"Onderzoeksondersteuning", "AI is gebruikt voor onderzoek of het vinden van relevante bronnen. De inhoud is redactioneel gemaakt en gecontroleerd."}, "summary": {"Samenvatting van inhoud", "AI is gebruikt om bronnen samen te vatten. Selectie, duiding en eindversie zijn door een mens gecontroleerd."}, "full": {"Volledige inhoudsgeneratie", "De inhoud is grotendeels of volledig door AI gegenereerd en daarna redactioneel gecontroleerd."}}),
"pt": europeanLocale("pt", "Português", "Declare como a IA contribuiu para um conteúdo.", "Uso de IA", "Sem uso de IA", "Assistido por IA", "Parcialmente gerado por IA", "Maioritariamente gerado por IA", "Totalmente gerado por IA",
map[string]PresetText{"no-ai": {"Sem uso de IA", "O conteúdo identificado foi criado sem IA generativa e revisto por uma pessoa."}, "research": {"Apoio à pesquisa", "A IA foi usada para pesquisa ou identificação de fontes relevantes. O conteúdo foi criado e revisto editorialmente."}, "summary": {"Resumo de conteúdo", "A IA foi usada para resumir fontes. A seleção, interpretação e versão final foram revistas por uma pessoa."}, "full": {"Geração completa do conteúdo", "O conteúdo foi maioritariamente ou totalmente gerado por IA e depois revisto editorialmente."}}),
"pl": europeanLocale("pl", "Polski", "Pokaż, w jaki sposób AI uczestniczyła w tworzeniu treści.", "Użycie AI", "Bez użycia AI", "Wspomagane przez AI", "Częściowo wygenerowane przez AI", "W większości wygenerowane przez AI", "W pełni wygenerowane przez AI",
map[string]PresetText{"no-ai": {"Bez użycia AI", "Oznaczona treść została utworzona bez generatywnej AI i sprawdzona przez człowieka."}, "research": {"Wsparcie badań", "AI wykorzystano do wyszukiwania informacji lub odpowiednich źródeł. Treść została opracowana i sprawdzona redakcyjnie."}, "summary": {"Streszczenie treści", "AI wykorzystano do streszczania źródeł. Wybór, interpretacja i wersja końcowa zostały sprawdzone przez człowieka."}, "full": {"Pełne generowanie treści", "Treść została w większości lub w całości wygenerowana przez AI, a następnie sprawdzona redakcyjnie."}}),
}
func locale(code, name string, text map[string]string, presets map[string]PresetText, extents, components, reviews, activities, assurances map[string]string) Locale {
return Locale{Code: code, Name: name, Text: text, Presets: presets, Extents: extents, Components: components, Reviews: reviews, Activities: activities, Assurances: assurances}
}
// europeanLocale starts with the locale-specific public wording. init fills missing
// administrative UI labels from English so every supported locale is complete.
func europeanLocale(code, name, hero, aiLabel, none, assisted, partial, mostly, full string, presets map[string]PresetText) Locale {
return Locale{
Code: code, Name: name,
Text: map[string]string{"hero_title": hero, "ai_label": aiLabel},
Presets: presets,
Extents: map[string]string{"none": none, "assisted": assisted, "partial": partial, "mostly": mostly, "full": full},
}
}
func init() {
base := catalogs["en"]
for _, code := range []string{"fr", "es", "it", "nl", "pt", "pl"} {
l := catalogs[code]
for k, v := range base.Text {
if l.Text[k] == "" {
l.Text[k] = v
}
}
l.Components = cloneMap(base.Components)
l.Reviews = cloneMap(base.Reviews)
l.Activities = cloneMap(base.Activities)
l.Assurances = cloneMap(base.Assurances)
catalogs[code] = l
}
for code, overrides := range europeanTextOverrides() {
l := catalogs[code]
for k, v := range overrides {
l.Text[k] = v
}
catalogs[code] = l
}
applyEuropeanTaxonomyTranslations()
applyArticleTranslations()
applyAssuranceTranslations()
}
func applyArticleTranslations() {
texts := map[string]map[string]string{
"de": {"field_mode": "Art der Erklärung", "mode_single": "Einzelne Nutzung", "mode_article": "Artikel oder Webseite zusammenfassen", "article_fields": "Bestandteile des Artikels", "article_help": "Lege für jeden typischen Bestandteil fest, ob und wie KI eingesetzt wurde.", "article_title": "Dokumentation der KI-Nutzung", "article_summary_heading": "Zusammenfassende Einordnung", "article_table_heading": "Strukturierte Angaben nach Inhaltsbestandteil", "table_component": "Bereich", "table_extent": "KI-Nutzung", "table_activities": "Einsatzgebiet", "table_review": "Menschliche Prüfung", "badge_article": "Artikeltransparenz"},
"en": {"field_mode": "Declaration type", "mode_single": "Single use", "mode_article": "Summarise an article or website", "article_fields": "Article components", "article_help": "Specify whether and how AI was used for each typical component.", "article_title": "Documentation of AI use", "article_summary_heading": "Summary assessment", "article_table_heading": "Structured details by content component", "table_component": "Area", "table_extent": "AI use", "table_activities": "Purpose", "table_review": "Human review", "badge_article": "Article transparency"},
"fr": {"field_mode": "Type de déclaration", "mode_single": "Utilisation individuelle", "mode_article": "Résumer un article ou un site", "article_fields": "Composants de l’article", "article_help": "Indiquez si et comment l’IA a été utilisée pour chaque composant.", "article_title": "Utilisation de l’IA en un coup d’œil", "article_summary_heading": "Résumé", "article_table_heading": "Détails par composant", "table_component": "Élément", "table_extent": "Utilisation de l’IA", "table_activities": "Usage", "table_review": "Vérification humaine", "badge_article": "Transparence de l’article"},
"es": {"field_mode": "Tipo de declaración", "mode_single": "Uso individual", "mode_article": "Resumir un artículo o sitio", "article_fields": "Componentes del artículo", "article_help": "Indica si se utilizó IA y de qué manera en cada componente.", "article_title": "Uso de IA de un vistazo", "article_summary_heading": "Resumen", "article_table_heading": "Detalles por componente", "table_component": "Área", "table_extent": "Uso de IA", "table_activities": "Finalidad", "table_review": "Revisión humana", "badge_article": "Transparencia del artículo"},
"it": {"field_mode": "Tipo di dichiarazione", "mode_single": "Uso singolo", "mode_article": "Riassumi un articolo o sito", "article_fields": "Componenti dell’articolo", "article_help": "Indica se e come l’IA è stata usata per ogni componente.", "article_title": "Uso dell’IA in sintesi", "article_summary_heading": "Riepilogo", "article_table_heading": "Dettagli per componente", "table_component": "Area", "table_extent": "Uso dell’IA", "table_activities": "Finalità", "table_review": "Revisione umana", "badge_article": "Trasparenza dell’articolo"},
"nl": {"field_mode": "Type verklaring", "mode_single": "Afzonderlijk gebruik", "mode_article": "Artikel of website samenvatten", "article_fields": "Onderdelen van het artikel", "article_help": "Geef per onderdeel aan of en hoe AI is gebruikt.", "article_title": "AI-gebruik in één oogopslag", "article_summary_heading": "Samenvatting", "article_table_heading": "Details per onderdeel", "table_component": "Onderdeel", "table_extent": "AI-gebruik", "table_activities": "Doel", "table_review": "Menselijke controle", "badge_article": "Artikeltransparantie"},
"pt": {"field_mode": "Tipo de declaração", "mode_single": "Uso individual", "mode_article": "Resumir um artigo ou site", "article_fields": "Componentes do artigo", "article_help": "Indique se e como a IA foi usada em cada componente.", "article_title": "Utilização de IA em resumo", "article_summary_heading": "Resumo", "article_table_heading": "Detalhes por componente", "table_component": "Área", "table_extent": "Utilização de IA", "table_activities": "Finalidade", "table_review": "Revisão humana", "badge_article": "Transparência do artigo"},
"pl": {"field_mode": "Typ deklaracji", "mode_single": "Pojedyncze użycie", "mode_article": "Podsumuj artykuł lub stronę", "article_fields": "Elementy artykułu", "article_help": "Określ, czy i jak użyto AI w każdym elemencie.", "article_title": "Użycie AI w skrócie", "article_summary_heading": "Podsumowanie", "article_table_heading": "Szczegóły według elementu", "table_component": "Obszar", "table_extent": "Użycie AI", "table_activities": "Cel", "table_review": "Weryfikacja człowieka", "badge_article": "Przejrzystość artykułu"},
}
componentNames := map[string]map[string]string{
"de": {"research": "Recherche", "translation": "Übersetzung"}, "en": {"research": "Research", "translation": "Translation"},
"fr": {"research": "Recherche", "translation": "Traduction"}, "es": {"research": "Investigación", "translation": "Traducción"},
"it": {"research": "Ricerca", "translation": "Traduzione"}, "nl": {"research": "Onderzoek", "translation": "Vertaling"},
"pt": {"research": "Pesquisa", "translation": "Tradução"}, "pl": {"research": "Badania", "translation": "Tłumaczenie"},
}
for code, values := range texts {
l := catalogs[code]
for k, v := range values {
l.Text[k] = v
}
for k, v := range componentNames[code] {
l.Components[k] = v
}
catalogs[code] = l
}
}
func europeanTextOverrides() map[string]map[string]string {
return map[string]map[string]string{
"fr": {
"meta_description": "Déclaration ouverte, lisible par machine et auto-hébergeable de l’utilisation de l’IA.", "nav_generator": "Générateur", "nav_background": "Contexte",
"standard_eyebrow": "Norme ouverte de transparence", "hero_lead": "Badge SVG visible, page explicative et JSON-LD lisible par machine – sans cookies, suivi ni base de données obligatoire.",
"generator_eyebrow": "Générateur", "generator_title": "Créer un code d’intégration", "generator_intro": "Choisissez un modèle ou composez une déclaration détaillée. L’aperçu et le code sont générés directement dans le navigateur.",
"field_preset": "Modèle", "option_custom": "Structure personnalisée", "field_component": "Composant", "field_extent": "Contribution de l’IA", "field_review": "Vérification humaine", "field_activities": "Activités", "activities_help": "Valeurs standard séparées par des virgules, par exemple research, summarisation ou translation.",
"field_subject": "URL du contenu identifié", "field_language": "Langue de sortie", "field_theme": "Apparence", "theme_mono": "Monochrome", "theme_color": "Couleur", "preview": "Aperçu", "copy_html": "Copier le HTML", "copied": "Copié",
"pro_eyebrow": "Personnalisation Pro", "pro_title": "Textes et badges personnalisés", "pro_enabled": "Cette instance dispose d’une licence Pro valide. Les textes et couleurs personnalisés sont disponibles.", "pro_locked": "Les titres, descriptions, libellés et couleurs personnalisés sont disponibles dans l’édition Pro.",
"custom_title": "Titre personnalisé", "custom_description": "Description personnalisée", "custom_badge_label": "Libellé gauche du badge", "custom_badge_message": "Libellé droit du badge", "custom_left_color": "Couleur gauche", "custom_right_color": "Couleur droite", "pro_required": "Licence Pro requise",
"api_badge_title": "Point d’accès badge", "api_badge_desc": "Les badges standard utilisent les modèles et paramètres structurés. Pro ajoute des textes et couleurs personnalisés.", "api_manifest_title": "Manifeste", "api_manifest_desc": "Le manifeste JSON-LD peut être lié, validé ou intégré à un processus de build.", "api_stateless_title": "Sans état", "api_stateless_desc": "Aucune session et des réponses déterministes, adaptées à la mise à l’échelle horizontale, aux proxys inverses et aux CDN.",
"footer_no_legal": "Ne constitue pas un conseil juridique.", "back": "Retour", "declaration_eyebrow": "Déclaration d’utilisation de l’IA", "fact_component": "Composant", "fact_extent": "Contribution de l’IA", "fact_activities": "Activités", "fact_review": "Vérification humaine", "fact_note": "Note", "fact_assurance": "Niveau d’assurance", "fact_subject": "Contenu identifié", "fact_responsibility": "Responsabilité éditoriale", "fact_declared_at": "Déclaré le", "none_value": "aucune", "transparency_label": "Avis de transparence :", "transparency_text": "Cette déclaration décrit l’utilisation déclarée de l’IA. Elle ne constitue ni une licence, ni une certification, ni un conseil juridique.", "manifest": "Manifeste lisible par machine",
},
"es": {
"meta_description": "Declaración abierta, legible por máquina y autoalojable del uso de IA.", "nav_generator": "Generador", "nav_background": "Contexto", "standard_eyebrow": "Estándar abierto de transparencia", "hero_lead": "Insignia SVG visible, página explicativa y JSON-LD legible por máquina, sin cookies, seguimiento ni obligación de base de datos.",
"generator_eyebrow": "Generador", "generator_title": "Crear código de inserción", "generator_intro": "Elige un preajuste o crea una declaración detallada. La vista previa y el código se generan directamente en el navegador.", "field_preset": "Preajuste", "option_custom": "Estructura personalizada", "field_component": "Componente", "field_extent": "Contribución de la IA", "field_review": "Revisión humana", "field_activities": "Actividades", "activities_help": "Valores estándar separados por comas, por ejemplo research, summarisation o translation.", "field_subject": "URL del contenido identificado", "field_language": "Idioma de salida", "field_theme": "Apariencia", "theme_mono": "Monocromo", "theme_color": "Color", "preview": "Vista previa", "copy_html": "Copiar HTML", "copied": "Copiado",
"pro_eyebrow": "Personalización Pro", "pro_title": "Textos y diseños de insignia propios", "pro_enabled": "Esta instancia tiene una licencia Pro válida. Se pueden usar textos y colores personalizados.", "pro_locked": "Los títulos, descripciones, etiquetas y colores personalizados están disponibles en la edición Pro.", "custom_title": "Título personalizado", "custom_description": "Descripción personalizada", "custom_badge_label": "Etiqueta izquierda de la insignia", "custom_badge_message": "Etiqueta derecha de la insignia", "custom_left_color": "Color izquierdo", "custom_right_color": "Color derecho", "pro_required": "Se requiere licencia Pro",
"api_badge_title": "Endpoint de insignias", "api_badge_desc": "Las insignias estándar se generan con preajustes y parámetros estructurados. Pro añade textos y colores propios.", "api_manifest_title": "Manifiesto", "api_manifest_desc": "El manifiesto JSON-LD puede enlazarse, validarse o integrarse en procesos de compilación.", "api_stateless_title": "Sin estado", "api_stateless_desc": "Sin sesiones y con respuestas deterministas. Preparado para escalado horizontal, proxies inversos y CDN.", "footer_no_legal": "No constituye asesoramiento jurídico.", "back": "Volver", "declaration_eyebrow": "Declaración de uso de IA", "fact_component": "Componente", "fact_extent": "Contribución de la IA", "fact_activities": "Actividades", "fact_review": "Revisión humana", "fact_note": "Nota", "fact_assurance": "Nivel de garantía", "fact_subject": "Contenido identificado", "fact_responsibility": "Responsabilidad editorial", "fact_declared_at": "Declarado el", "none_value": "ninguna", "transparency_label": "Aviso de transparencia:", "transparency_text": "Esta declaración describe el uso indicado de IA. No es una licencia, certificación ni asesoramiento jurídico.", "manifest": "Manifiesto legible por máquina",
},
"it": {
"meta_description": "Dichiarazione aperta, leggibile dalle macchine e auto-ospitabile dell’uso dell’IA.", "nav_generator": "Generatore", "nav_background": "Contesto", "standard_eyebrow": "Standard aperto di trasparenza", "hero_lead": "Badge SVG visibile, pagina esplicativa e JSON-LD leggibile dalle macchine, senza cookie, tracciamento o obbligo di database.", "generator_eyebrow": "Generatore", "generator_title": "Crea un codice di incorporamento", "generator_intro": "Scegli un preset o componi una dichiarazione dettagliata. Anteprima e codice vengono generati direttamente nel browser.", "field_preset": "Preset", "option_custom": "Struttura personalizzata", "field_component": "Componente", "field_extent": "Contributo dell’IA", "field_review": "Revisione umana", "field_activities": "Attività", "activities_help": "Valori standard separati da virgole, ad esempio research, summarisation o translation.", "field_subject": "URL del contenuto identificato", "field_language": "Lingua di output", "field_theme": "Aspetto", "theme_mono": "Monocromatico", "theme_color": "Colore", "preview": "Anteprima", "copy_html": "Copia HTML", "copied": "Copiato",
"pro_eyebrow": "Personalizzazione Pro", "pro_title": "Testi e badge personalizzati", "pro_enabled": "Questa istanza dispone di una licenza Pro valida. Sono disponibili testi e colori personalizzati.", "pro_locked": "Titoli, descrizioni, etichette e colori personalizzati sono disponibili nell’edizione Pro.", "custom_title": "Titolo personalizzato", "custom_description": "Descrizione personalizzata", "custom_badge_label": "Etichetta sinistra del badge", "custom_badge_message": "Etichetta destra del badge", "custom_left_color": "Colore sinistro", "custom_right_color": "Colore destro", "pro_required": "Licenza Pro richiesta", "api_badge_title": "Endpoint badge", "api_badge_desc": "I badge standard usano preset e parametri strutturati. Pro aggiunge testi e colori personalizzati.", "api_manifest_title": "Manifesto", "api_manifest_desc": "Il manifesto JSON-LD può essere collegato, validato o inserito nei processi di build.", "api_stateless_title": "Senza stato", "api_stateless_desc": "Nessuna sessione e risposte deterministiche, adatte a scalabilità orizzontale, reverse proxy e CDN.", "footer_no_legal": "Non costituisce consulenza legale.", "back": "Indietro", "declaration_eyebrow": "Dichiarazione d’uso dell’IA", "fact_component": "Componente", "fact_extent": "Contributo dell’IA", "fact_activities": "Attività", "fact_review": "Revisione umana", "fact_note": "Nota", "fact_assurance": "Livello di garanzia", "fact_subject": "Contenuto identificato", "fact_responsibility": "Responsabilità editoriale", "fact_declared_at": "Dichiarato il", "none_value": "nessuna", "transparency_label": "Avviso di trasparenza:", "transparency_text": "Questa dichiarazione descrive l’uso dichiarato dell’IA. Non è una licenza, una certificazione o una consulenza legale.", "manifest": "Manifesto leggibile dalle macchine",
},
"nl": {
"meta_description": "Open, machineleesbare en zelf te hosten verklaring van AI-gebruik.", "nav_generator": "Generator", "nav_background": "Achtergrond", "standard_eyebrow": "Open transparantiestandaard", "hero_lead": "Zichtbare SVG-badge, begrijpelijke uitlegpagina en machineleesbare JSON-LD, zonder cookies, tracking of verplichte database.", "generator_eyebrow": "Generator", "generator_title": "Insluitcode maken", "generator_intro": "Kies een preset of stel een gedetailleerde verklaring samen. Voorbeeld en code worden direct in de browser gemaakt.", "field_preset": "Preset", "option_custom": "Aangepaste structuur", "field_component": "Onderdeel", "field_extent": "AI-bijdrage", "field_review": "Menselijke controle", "field_activities": "Activiteiten", "activities_help": "Door komma’s gescheiden standaardwaarden, zoals research, summarisation of translation.", "field_subject": "URL van de gemarkeerde inhoud", "field_language": "Uitvoertaal", "field_theme": "Weergave", "theme_mono": "Monochroom", "theme_color": "Kleur", "preview": "Voorbeeld", "copy_html": "HTML kopiëren", "copied": "Gekopieerd",
"pro_eyebrow": "Pro-aanpassing", "pro_title": "Eigen teksten en badge-ontwerpen", "pro_enabled": "Deze instantie heeft een geldige Pro-licentie. Eigen teksten en kleuren zijn beschikbaar.", "pro_locked": "Eigen titels, beschrijvingen, labels en kleuren zijn beschikbaar in de Pro-editie.", "custom_title": "Eigen titel", "custom_description": "Eigen beschrijving", "custom_badge_label": "Linker badgelabel", "custom_badge_message": "Rechter badgelabel", "custom_left_color": "Linkerkleur", "custom_right_color": "Rechterkleur", "pro_required": "Pro-licentie vereist", "api_badge_title": "Badge-endpoint", "api_badge_desc": "Standaardbadges gebruiken presets en gestructureerde parameters. Pro voegt eigen teksten en kleuren toe.", "api_manifest_title": "Manifest", "api_manifest_desc": "Het JSON-LD-manifest kan worden gekoppeld, gevalideerd of in buildprocessen worden opgenomen.", "api_stateless_title": "Stateless", "api_stateless_desc": "Geen sessies en deterministische antwoorden, geschikt voor horizontale schaal, reverse proxies en CDN’s.", "footer_no_legal": "Geen juridisch advies.", "back": "Terug", "declaration_eyebrow": "Verklaring van AI-gebruik", "fact_component": "Onderdeel", "fact_extent": "AI-bijdrage", "fact_activities": "Activiteiten", "fact_review": "Menselijke controle", "fact_note": "Opmerking", "fact_assurance": "Zekerheidsniveau", "fact_subject": "Gemarkeerde inhoud", "fact_responsibility": "Redactionele verantwoordelijkheid", "fact_declared_at": "Verklaard op", "none_value": "geen", "transparency_label": "Transparantiemelding:", "transparency_text": "Deze verklaring beschrijft het opgegeven AI-gebruik. Het is geen licentie, certificering of juridisch advies.", "manifest": "Machineleesbaar manifest",
},
"pt": {
"meta_description": "Declaração aberta, legível por máquina e autoalojável do uso de IA.", "nav_generator": "Gerador", "nav_background": "Contexto", "standard_eyebrow": "Padrão aberto de transparência", "hero_lead": "Badge SVG visível, página explicativa e JSON-LD legível por máquina, sem cookies, rastreamento ou obrigação de base de dados.", "generator_eyebrow": "Gerador", "generator_title": "Criar código de incorporação", "generator_intro": "Escolha uma predefinição ou crie uma declaração detalhada. A pré-visualização e o código são gerados diretamente no navegador.", "field_preset": "Predefinição", "option_custom": "Estrutura personalizada", "field_component": "Componente", "field_extent": "Contributo da IA", "field_review": "Revisão humana", "field_activities": "Atividades", "activities_help": "Valores padrão separados por vírgulas, por exemplo research, summarisation ou translation.", "field_subject": "URL do conteúdo identificado", "field_language": "Idioma de saída", "field_theme": "Aspeto", "theme_mono": "Monocromático", "theme_color": "Cor", "preview": "Pré-visualização", "copy_html": "Copiar HTML", "copied": "Copiado",
"pro_eyebrow": "Personalização Pro", "pro_title": "Textos e badges personalizados", "pro_enabled": "Esta instância tem uma licença Pro válida. Estão disponíveis textos e cores personalizados.", "pro_locked": "Títulos, descrições, etiquetas e cores personalizados estão disponíveis na edição Pro.", "custom_title": "Título personalizado", "custom_description": "Descrição personalizada", "custom_badge_label": "Etiqueta esquerda do badge", "custom_badge_message": "Etiqueta direita do badge", "custom_left_color": "Cor esquerda", "custom_right_color": "Cor direita", "pro_required": "Licença Pro necessária", "api_badge_title": "Endpoint de badge", "api_badge_desc": "Os badges padrão usam predefinições e parâmetros estruturados. Pro adiciona textos e cores personalizados.", "api_manifest_title": "Manifesto", "api_manifest_desc": "O manifesto JSON-LD pode ser ligado, validado ou integrado em processos de build.", "api_stateless_title": "Sem estado", "api_stateless_desc": "Sem sessões e com respostas determinísticas, adequado a escalabilidade horizontal, proxies inversos e CDN.", "footer_no_legal": "Não constitui aconselhamento jurídico.", "back": "Voltar", "declaration_eyebrow": "Declaração de uso de IA", "fact_component": "Componente", "fact_extent": "Contributo da IA", "fact_activities": "Atividades", "fact_review": "Revisão humana", "fact_note": "Nota", "fact_assurance": "Nível de garantia", "fact_subject": "Conteúdo identificado", "fact_responsibility": "Responsabilidade editorial", "fact_declared_at": "Declarado em", "none_value": "nenhuma", "transparency_label": "Aviso de transparência:", "transparency_text": "Esta declaração descreve o uso indicado de IA. Não é uma licença, certificação ou aconselhamento jurídico.", "manifest": "Manifesto legível por máquina",
},
"pl": {
"meta_description": "Otwarta, maszynowo czytelna i samodzielnie hostowana deklaracja użycia AI.", "nav_generator": "Generator", "nav_background": "Informacje", "standard_eyebrow": "Otwarty standard przejrzystości", "hero_lead": "Widoczna plakietka SVG, zrozumiała strona objaśniająca i maszynowo czytelny JSON-LD, bez plików cookie, śledzenia i obowiązkowej bazy danych.", "generator_eyebrow": "Generator", "generator_title": "Utwórz kod osadzania", "generator_intro": "Wybierz ustawienie lub zbuduj szczegółową deklarację. Podgląd i kod powstają bezpośrednio w przeglądarce.", "field_preset": "Ustawienie", "option_custom": "Niestandardowa struktura", "field_component": "Element", "field_extent": "Udział AI", "field_review": "Weryfikacja człowieka", "field_activities": "Działania", "activities_help": "Standardowe wartości rozdzielone przecinkami, na przykład research, summarisation lub translation.", "field_subject": "URL oznaczonej treści", "field_language": "Język wyjściowy", "field_theme": "Wygląd", "theme_mono": "Monochromatyczny", "theme_color": "Kolorowy", "preview": "Podgląd", "copy_html": "Kopiuj HTML", "copied": "Skopiowano",
"pro_eyebrow": "Personalizacja Pro", "pro_title": "Własne teksty i wygląd plakietek", "pro_enabled": "Ta instancja ma ważną licencję Pro. Dostępne są własne teksty i kolory.", "pro_locked": "Własne tytuły, opisy, etykiety i kolory są dostępne w edycji Pro.", "custom_title": "Własny tytuł", "custom_description": "Własny opis", "custom_badge_label": "Lewa etykieta plakietki", "custom_badge_message": "Prawa etykieta plakietki", "custom_left_color": "Lewy kolor", "custom_right_color": "Prawy kolor", "pro_required": "Wymagana licencja Pro", "api_badge_title": "Endpoint plakietki", "api_badge_desc": "Standardowe plakietki korzystają z ustawień i parametrów strukturalnych. Pro dodaje własne teksty i kolory.", "api_manifest_title": "Manifest", "api_manifest_desc": "Manifest JSON-LD można linkować, walidować lub wykorzystywać w procesach budowania.", "api_stateless_title": "Bezstanowy", "api_stateless_desc": "Brak sesji i deterministyczne odpowiedzi, odpowiednie do skalowania poziomego, reverse proxy i CDN.", "footer_no_legal": "To nie jest porada prawna.", "back": "Wstecz", "declaration_eyebrow": "Deklaracja użycia AI", "fact_component": "Element", "fact_extent": "Udział AI", "fact_activities": "Działania", "fact_review": "Weryfikacja człowieka", "fact_note": "Uwaga", "fact_assurance": "Poziom wiarygodności", "fact_subject": "Oznaczona treść", "fact_responsibility": "Odpowiedzialność redakcyjna", "fact_declared_at": "Zadeklarowano", "none_value": "brak", "transparency_label": "Informacja o przejrzystości:", "transparency_text": "Ta deklaracja opisuje wskazane użycie AI. Nie jest licencją, certyfikatem ani poradą prawną.", "manifest": "Manifest maszynowo czytelny",
},
}
}
func applyEuropeanTaxonomyTranslations() {
translations := map[string]struct {
components, reviews, activities, assurances map[string]string
}{
"fr": {
components: map[string]string{"text": "Texte", "coverImage": "Image de couverture", "image": "Image", "audio": "Audio", "video": "Vidéo", "code": "Code", "other": "Autre"},
reviews: map[string]string{"none": "Aucune", "basic": "Basique", "editorial": "Éditoriale", "expert": "Experte"},
activities: map[string]string{"research": "Recherche", "summarisation": "Résumé", "drafting": "Rédaction initiale", "generation": "Génération", "translation": "Traduction", "editing": "Révision", "imageGeneration": "Génération d’image", "codeGeneration": "Génération de code", "transcription": "Transcription", "classification": "Classification"},
assurances: map[string]string{"selfDeclared": "Auto-déclaré", "technicallyRecorded": "Enregistré techniquement", "signed": "Signé", "verified": "Vérifié"},
},
"es": {components: map[string]string{"text": "Texto", "coverImage": "Imagen de portada", "image": "Imagen", "audio": "Audio", "video": "Vídeo", "code": "Código", "other": "Otro"}, reviews: map[string]string{"none": "Ninguna", "basic": "Básica", "editorial": "Editorial", "expert": "Experta"}, activities: map[string]string{"research": "Investigación", "summarisation": "Resumen", "drafting": "Borrador", "generation": "Generación", "translation": "Traducción", "editing": "Edición", "imageGeneration": "Generación de imágenes", "codeGeneration": "Generación de código", "transcription": "Transcripción", "classification": "Clasificación"}, assurances: map[string]string{"selfDeclared": "Autodeclarado", "technicallyRecorded": "Registrado técnicamente", "signed": "Firmado", "verified": "Verificado"}},
"it": {components: map[string]string{"text": "Testo", "coverImage": "Immagine di copertina", "image": "Immagine", "audio": "Audio", "video": "Video", "code": "Codice", "other": "Altro"}, reviews: map[string]string{"none": "Nessuna", "basic": "Di base", "editorial": "Editoriale", "expert": "Esperta"}, activities: map[string]string{"research": "Ricerca", "summarisation": "Sintesi", "drafting": "Bozza", "generation": "Generazione", "translation": "Traduzione", "editing": "Revisione", "imageGeneration": "Generazione di immagini", "codeGeneration": "Generazione di codice", "transcription": "Trascrizione", "classification": "Classificazione"}, assurances: map[string]string{"selfDeclared": "Autodichiarato", "technicallyRecorded": "Registrato tecnicamente", "signed": "Firmato", "verified": "Verificato"}},
"nl": {components: map[string]string{"text": "Tekst", "coverImage": "Omslagafbeelding", "image": "Afbeelding", "audio": "Audio", "video": "Video", "code": "Code", "other": "Overig"}, reviews: map[string]string{"none": "Geen", "basic": "Basis", "editorial": "Redactioneel", "expert": "Deskundig"}, activities: map[string]string{"research": "Onderzoek", "summarisation": "Samenvatting", "drafting": "Concept", "generation": "Generatie", "translation": "Vertaling", "editing": "Bewerking", "imageGeneration": "Afbeeldingsgeneratie", "codeGeneration": "Codegeneratie", "transcription": "Transcriptie", "classification": "Classificatie"}, assurances: map[string]string{"selfDeclared": "Zelf verklaard", "technicallyRecorded": "Technisch vastgelegd", "signed": "Ondertekend", "verified": "Geverifieerd"}},
"pt": {components: map[string]string{"text": "Texto", "coverImage": "Imagem de capa", "image": "Imagem", "audio": "Áudio", "video": "Vídeo", "code": "Código", "other": "Outro"}, reviews: map[string]string{"none": "Nenhuma", "basic": "Básica", "editorial": "Editorial", "expert": "Especializada"}, activities: map[string]string{"research": "Pesquisa", "summarisation": "Resumo", "drafting": "Rascunho", "generation": "Geração", "translation": "Tradução", "editing": "Edição", "imageGeneration": "Geração de imagens", "codeGeneration": "Geração de código", "transcription": "Transcrição", "classification": "Classificação"}, assurances: map[string]string{"selfDeclared": "Autodeclarado", "technicallyRecorded": "Registado tecnicamente", "signed": "Assinado", "verified": "Verificado"}},
"pl": {components: map[string]string{"text": "Tekst", "coverImage": "Obraz okładkowy", "image": "Obraz", "audio": "Audio", "video": "Wideo", "code": "Kod", "other": "Inne"}, reviews: map[string]string{"none": "Brak", "basic": "Podstawowa", "editorial": "Redakcyjna", "expert": "Ekspercka"}, activities: map[string]string{"research": "Badania", "summarisation": "Streszczenie", "drafting": "Szkic", "generation": "Generowanie", "translation": "Tłumaczenie", "editing": "Edycja", "imageGeneration": "Generowanie obrazów", "codeGeneration": "Generowanie kodu", "transcription": "Transkrypcja", "classification": "Klasyfikacja"}, assurances: map[string]string{"selfDeclared": "Samodeklaracja", "technicallyRecorded": "Zapisane technicznie", "signed": "Podpisane", "verified": "Zweryfikowane"}},
}
for code, tr := range translations {
l := catalogs[code]
l.Components, l.Reviews, l.Activities, l.Assurances = tr.components, tr.reviews, tr.activities, tr.assurances
catalogs[code] = l
}
}
func applyAssuranceTranslations() {
texts := map[string]map[string]string{
"de": {
"field_assurance": "Nachweisgrundlage",
"fact_assurance": "Nachweisgrundlage",
"transparency_text": "Diese Erklärung gibt die von der veröffentlichenden Person oder Organisation bereitgestellten Angaben zur KI-Nutzung wieder. Sie ersetzt weder eine rechtliche Bewertung noch eine Zertifizierung.",
"not_applicable": "Nicht anwendbar",
"not_specified": "Nicht angegeben",
"assurance_selfDeclared_description": "Die Angaben beruhen auf einer Selbsterklärung der veröffentlichenden Person oder Organisation.",
"assurance_technicallyRecorded_description": "Nur auswählen, wenn die Angaben im Erstellungs- oder Veröffentlichungsprozess technisch protokolliert werden.",
"assurance_signed_description": "Nur auswählen, wenn die Erklärung tatsächlich digital signiert wird und Herkunft sowie Unverändertheit prüfbar sind.",
"assurance_verified_description": "Nur auswählen, wenn die Angaben nach einem dokumentierten Prüfverfahren zusätzlich verifiziert wurden.",
"assurance_selfDeclared_statement": "Die Angaben zur KI-Nutzung beruhen auf einer Selbsterklärung der veröffentlichenden Person oder Organisation.",
"assurance_technicallyRecorded_statement": "Als Nachweisgrundlage ist eine technische Protokollierung im Erstellungs- oder Veröffentlichungsprozess angegeben.",
"assurance_signed_statement": "Als Nachweisgrundlage ist eine digitale Signatur der Erklärung angegeben; damit können Herkunft und Unverändertheit geprüft werden.",
"assurance_verified_statement": "Als Nachweisgrundlage ist eine zusätzliche Verifikation nach einem dokumentierten Prüfverfahren angegeben.",
},
"en": {
"field_assurance": "Evidence basis",
"fact_assurance": "Evidence basis",
"transparency_text": "This declaration presents the information on AI use supplied by the publishing person or organisation. It does not replace a legal assessment or certification.",
"not_applicable": "Not applicable",
"not_specified": "Not specified",
"assurance_selfDeclared_description": "The information is based on a declaration made by the publishing person or organisation.",
"assurance_technicallyRecorded_description": "Select only when the information is technically recorded during the creation or publication workflow.",
"assurance_signed_description": "Select only when the declaration is actually digitally signed and its origin and integrity can be checked.",
"assurance_verified_description": "Select only when the information has been additionally verified under a documented review procedure.",
"assurance_selfDeclared_statement": "The information on AI use is based on a declaration made by the publishing person or organisation.",
"assurance_technicallyRecorded_statement": "Technical recording during the creation or publication workflow is stated as the evidence basis.",
"assurance_signed_statement": "A digital signature of the declaration is stated as the evidence basis, allowing its origin and integrity to be checked.",
"assurance_verified_statement": "Additional verification under a documented review procedure is stated as the evidence basis.",
},
"fr": {
"field_assurance": "Base de preuve",
"not_applicable": "Non applicable",
"not_specified": "Non indiqué",
"fact_assurance": "Base de preuve",
"assurance_selfDeclared_description": "Les informations sont fournies par la personne ou l’organisation éditrice elle-même.",
"assurance_technicallyRecorded_description": "Les informations ont été enregistrées techniquement pendant le processus de création ou de publication.",
"assurance_signed_description": "La déclaration a été signée numériquement afin de permettre le contrôle de son origine et de son intégrité.",
"assurance_verified_description": "Les informations ont en outre été vérifiées selon une procédure documentée.",
"assurance_selfDeclared_statement": "Les informations sur l’utilisation de l’IA reposent sur une déclaration de la personne ou de l’organisation éditrice.",
"assurance_technicallyRecorded_statement": "Un enregistrement technique pendant le processus de création ou de publication est indiqué comme base de preuve.",
"assurance_signed_statement": "Une signature numérique de la déclaration est indiquée comme base de preuve, ce qui permet d’en contrôler l’origine et l’intégrité.",
"assurance_verified_statement": "Une vérification supplémentaire selon une procédure documentée est indiquée comme base de preuve.",
},
"es": {
"field_assurance": "Base de evidencia",
"not_applicable": "No aplicable",
"not_specified": "No especificado",
"fact_assurance": "Base de evidencia",
"assurance_selfDeclared_description": "La información es proporcionada por la propia persona u organización que publica el contenido.",
"assurance_technicallyRecorded_description": "La información se registró técnicamente durante el proceso de creación o publicación.",
"assurance_signed_description": "La declaración se firmó digitalmente para permitir la comprobación de su origen e integridad.",
"assurance_verified_description": "La información fue verificada adicionalmente mediante un procedimiento documentado.",
"assurance_selfDeclared_statement": "La información sobre el uso de IA se basa en una declaración de la persona u organización editora.",
"assurance_technicallyRecorded_statement": "Se indica como base de evidencia un registro técnico durante el proceso de creación o publicación.",
"assurance_signed_statement": "Se indica como base de evidencia una firma digital de la declaración, que permite comprobar su origen e integridad.",
"assurance_verified_statement": "Se indica como base de evidencia una verificación adicional conforme a un procedimiento documentado.",
},
"it": {
"field_assurance": "Base probatoria",
"not_applicable": "Non applicabile",
"not_specified": "Non specificato",
"fact_assurance": "Base probatoria",
"assurance_selfDeclared_description": "Le informazioni sono fornite dalla persona o dall’organizzazione che pubblica il contenuto.",
"assurance_technicallyRecorded_description": "Le informazioni sono state registrate tecnicamente durante il processo di creazione o pubblicazione.",
"assurance_signed_description": "La dichiarazione è stata firmata digitalmente per consentire la verifica dell’origine e dell’integrità.",
"assurance_verified_description": "Le informazioni sono state inoltre verificate secondo una procedura documentata.",
"assurance_selfDeclared_statement": "Le informazioni sull’uso dell’IA si basano su una dichiarazione della persona o dell’organizzazione che pubblica il contenuto.",
"assurance_technicallyRecorded_statement": "Come base probatoria è indicata una registrazione tecnica durante il processo di creazione o pubblicazione.",
"assurance_signed_statement": "Come base probatoria è indicata una firma digitale della dichiarazione, che consente di verificarne origine e integrità.",
"assurance_verified_statement": "Come base probatoria è indicata una verifica aggiuntiva secondo una procedura documentata.",
},
"nl": {
"field_assurance": "Bewijsgrondslag",
"not_applicable": "Niet van toepassing",
"not_specified": "Niet vermeld",
"fact_assurance": "Bewijsgrondslag",
"assurance_selfDeclared_description": "De informatie is verstrekt door de publicerende persoon of organisatie zelf.",
"assurance_technicallyRecorded_description": "De informatie is technisch vastgelegd tijdens het creatie- of publicatieproces.",
"assurance_signed_description": "De verklaring is digitaal ondertekend, zodat herkomst en integriteit kunnen worden gecontroleerd.",
"assurance_verified_description": "De informatie is aanvullend geverifieerd volgens een gedocumenteerde procedure.",
"assurance_selfDeclared_statement": "De informatie over AI-gebruik is gebaseerd op een verklaring van de publicerende persoon of organisatie.",
"assurance_technicallyRecorded_statement": "Technische vastlegging tijdens het creatie- of publicatieproces is als bewijsgrondslag aangegeven.",
"assurance_signed_statement": "Een digitale ondertekening van de verklaring is als bewijsgrondslag aangegeven, zodat herkomst en integriteit kunnen worden gecontroleerd.",
"assurance_verified_statement": "Aanvullende verificatie volgens een gedocumenteerde procedure is als bewijsgrondslag aangegeven.",
},
"pt": {
"field_assurance": "Base de evidência",
"not_applicable": "Não aplicável",
"not_specified": "Não indicado",
"fact_assurance": "Base de evidência",
"assurance_selfDeclared_description": "As informações são fornecidas pela própria pessoa ou organização responsável pela publicação.",
"assurance_technicallyRecorded_description": "As informações foram registadas tecnicamente durante o processo de criação ou publicação.",
"assurance_signed_description": "A declaração foi assinada digitalmente para permitir a verificação da origem e integridade.",
"assurance_verified_description": "As informações foram adicionalmente verificadas segundo um procedimento documentado.",
"assurance_selfDeclared_statement": "As informações sobre a utilização de IA baseiam-se numa declaração da pessoa ou organização responsável pela publicação.",
"assurance_technicallyRecorded_statement": "É indicado como base de evidência um registo técnico durante o processo de criação ou publicação.",
"assurance_signed_statement": "É indicada como base de evidência uma assinatura digital da declaração, permitindo verificar a origem e a integridade.",
"assurance_verified_statement": "É indicada como base de evidência uma verificação adicional segundo um procedimento documentado.",
},
"pl": {
"field_assurance": "Podstawa dowodowa",
"not_applicable": "Nie dotyczy",
"not_specified": "Nie wskazano",
"fact_assurance": "Podstawa dowodowa",
"assurance_selfDeclared_description": "Informacje zostały podane przez osobę lub organizację publikującą treść.",
"assurance_technicallyRecorded_description": "Informacje zostały technicznie zarejestrowane w procesie tworzenia lub publikacji.",
"assurance_signed_description": "Deklaracja została podpisana cyfrowo, co umożliwia sprawdzenie jej pochodzenia i integralności.",
"assurance_verified_description": "Informacje zostały dodatkowo zweryfikowane zgodnie z udokumentowaną procedurą.",
"assurance_selfDeclared_statement": "Informacje o użyciu AI opierają się na deklaracji osoby lub organizacji publikującej treść.",
"assurance_technicallyRecorded_statement": "Jako podstawę dowodową wskazano techniczną rejestrację w procesie tworzenia lub publikacji.",
"assurance_signed_statement": "Jako podstawę dowodową wskazano cyfrowy podpis deklaracji, umożliwiający sprawdzenie jej pochodzenia i integralności.",
"assurance_verified_statement": "Jako podstawę dowodową wskazano dodatkową weryfikację zgodnie z udokumentowaną procedurą.",
},
}
for code, values := range texts {
l := catalogs[code]
for key, value := range values {
l.Text[key] = value
}
catalogs[code] = l
}
}
func cloneLocale(in Locale) Locale {
out := in
out.Text = cloneMap(in.Text)
out.Presets = make(map[string]PresetText, len(in.Presets))
for k, v := range in.Presets {
out.Presets[k] = v
}
out.Extents = cloneMap(in.Extents)
out.Components = cloneMap(in.Components)
out.Reviews = cloneMap(in.Reviews)
out.Activities = cloneMap(in.Activities)
out.Assurances = cloneMap(in.Assurances)
return out
}
func cloneMap(in map[string]string) map[string]string {
out := make(map[string]string, len(in))
for k, v := range in {
out[k] = v
}
return out
}
func Supported(code string) bool {
_, ok := catalogs[Normalize(code)]
return ok
}
func Normalize(code string) string {
code = strings.ToLower(strings.TrimSpace(code))
if i := strings.IndexAny(code, "-_"); i >= 0 {
code = code[:i]
}
return code
}
func Resolve(explicit, acceptLanguage, fallback string) string {
if code := Normalize(explicit); Supported(code) {
return code
}
for _, part := range strings.Split(acceptLanguage, ",") {
code := Normalize(strings.SplitN(part, ";", 2)[0])
if Supported(code) {
return code
}
}
if code := Normalize(fallback); Supported(code) {
return code
}
return "en"
}
func Get(code string) Locale {
if l, ok := catalogs[Normalize(code)]; ok {
return cloneLocale(l)
}
return cloneLocale(catalogs["en"])
}
func Languages() []LanguageOption {
out := make([]LanguageOption, 0, len(catalogs))
for code, l := range catalogs {
out = append(out, LanguageOption{Code: code, Name: l.Name})
}
sort.Slice(out, func(i, j int) bool { return out[i].Name < out[j].Name })
return out
}
func ClientCatalogs() map[string]Locale {
out := make(map[string]Locale, len(catalogs))
for code, l := range catalogs {
out[code] = cloneLocale(l)
}
return out
}