822 lines
128 KiB
Go
822 lines
128 KiB
Go
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": "Lizenzierte Anpassung", "pro_title": "Eigene Texte und Badge-Designs", "pro_enabled": "Diese Instanz verfügt über die erforderlichen lizenzierten Funktionen. Individuelle Texte und Farben können verwendet werden.",
|
||
"pro_locked": "Individuelle Titel, Beschreibungstexte, Badge-Beschriftungen und Farben benötigen die entsprechende lizenzierte Capability.",
|
||
"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": "Lizenzierte Funktion 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", "bundle": "Export-Bundle",
|
||
"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": "Licensed customisation", "pro_title": "Custom copy and badge designs",
|
||
"pro_enabled": "This instance has the required licensed capabilities. Custom copy and colours are available.", "pro_locked": "Custom titles, descriptions, badge labels and colours require the corresponding licensed capability.",
|
||
"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": "Licensed capability required",
|
||
"api_badge_title": "Badge endpoint", "api_badge_desc": "Standard badges are generated from presets and structured parameters. Licensed capabilities can additionally enable 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", "bundle": "Export bundle", "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()
|
||
applyArticle50Translations()
|
||
applyBulkTranslations()
|
||
applyUCNGBrandCopy()
|
||
}
|
||
|
||
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 sous licence", "pro_title": "Textes et badges personnalisés", "pro_enabled": "Cette instance dispose des fonctions sous licence requises. Les textes et couleurs personnalisés sont disponibles.", "pro_locked": "Les titres, descriptions, libellés et couleurs personnalisés nécessitent la fonctionnalité sous licence correspondante.",
|
||
"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": "Fonction sous licence requise",
|
||
"api_badge_title": "Point d’accès badge", "api_badge_desc": "Les badges standard utilisent les modèles et paramètres structurés. Des fonctionnalités sous licence peuvent activer 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", "bundle": "Bundle d’export",
|
||
},
|
||
"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 con licencia", "pro_title": "Textos y diseños de insignia propios", "pro_enabled": "Esta instancia dispone de las funciones con licencia necesarias. Se pueden usar textos y colores personalizados.", "pro_locked": "Los títulos, descripciones, etiquetas y colores personalizados requieren la función con licencia correspondiente.", "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 una función con licencia",
|
||
"api_badge_title": "Endpoint de insignias", "api_badge_desc": "Las insignias estándar se generan con preajustes y parámetros estructurados. Las funciones con licencia pueden habilitar textos y colores personalizados.", "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", "bundle": "Paquete de exportación",
|
||
},
|
||
"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 con licenza", "pro_title": "Testi e badge personalizzati", "pro_enabled": "Questa istanza dispone delle funzionalità con licenza richieste. Sono disponibili testi e colori personalizzati.", "pro_locked": "Titoli, descrizioni, etichette e colori personalizzati richiedono la relativa funzionalità con licenza.", "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": "Funzionalità con licenza richiesta", "api_badge_title": "Endpoint badge", "api_badge_desc": "I badge standard usano preset e parametri strutturati. Le funzionalità con licenza possono abilitare 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", "bundle": "Pacchetto di esportazione",
|
||
},
|
||
"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": "Gelicentieerde aanpassing", "pro_title": "Eigen teksten en badge-ontwerpen", "pro_enabled": "Deze instantie beschikt over de vereiste gelicentieerde functies. Eigen teksten en kleuren zijn beschikbaar.", "pro_locked": "Eigen titels, beschrijvingen, labels en kleuren vereisen de bijbehorende gelicentieerde functie.", "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": "Gelicentieerde functie vereist", "api_badge_title": "Badge-endpoint", "api_badge_desc": "Standaardbadges gebruiken presets en gestructureerde parameters. Gelicentieerde functies kunnen eigen teksten en kleuren inschakelen.", "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", "bundle": "Exportbundel",
|
||
},
|
||
"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 licenciada", "pro_title": "Textos e badges personalizados", "pro_enabled": "Esta instância dispõe das funcionalidades licenciadas necessárias. Estão disponíveis textos e cores personalizados.", "pro_locked": "Títulos, descrições, etiquetas e cores personalizados exigem a funcionalidade licenciada correspondente.", "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": "Funcionalidade licenciada necessária", "api_badge_title": "Endpoint de badge", "api_badge_desc": "Os badges padrão usam predefinições e parâmetros estruturados. Funcionalidades licenciadas podem ativar 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", "bundle": "Pacote de exportação",
|
||
},
|
||
"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 licencjonowana", "pro_title": "Własne teksty i wygląd plakietek", "pro_enabled": "Ta instancja ma wymagane licencjonowane funkcje. Dostępne są własne teksty i kolory.", "pro_locked": "Własne tytuły, opisy, etykiety i kolory wymagają odpowiedniej licencjonowanej funkcji.", "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 licencjonowana funkcja", "api_badge_title": "Endpoint plakietki", "api_badge_desc": "Standardowe plakietki korzystają z ustawień i parametrów strukturalnych. Licencjonowane funkcje mogą włączyć 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", "bundle": "Pakiet eksportowy",
|
||
},
|
||
}
|
||
}
|
||
|
||
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 applyArticle50Translations() {
|
||
texts := map[string]map[string]string{
|
||
"de": {
|
||
"article50_section_title": "Regulatorischer Kontext (EU AI Act, Artikel 50)",
|
||
"article50_section_intro": "Diese Angaben erfassen Tatsachen, die für Transparenzpflichten nach Artikel 50 relevant sein können. Die daraus abgeleitete Einordnung ist eine technische Entscheidungshilfe und keine Rechtsberatung.",
|
||
"field_public_interest_text": "Text zu einer Angelegenheit von öffentlichem Interesse",
|
||
"help_public_interest_text": "Aktivieren, wenn der Text mit dem Zweck veröffentlicht wird, die Öffentlichkeit über eine Angelegenheit von öffentlichem Interesse zu informieren.",
|
||
"field_deepfake": "Deepfake / realitätsähnliche KI-Manipulation",
|
||
"help_deepfake": "Aktivieren, wenn Bild, Audio oder Video bestehende Personen, Orte, Objekte oder Ereignisse täuschend echt darstellt oder manipuliert.",
|
||
"field_artistic_context": "Künstlerischer, kreativer, satirischer oder fiktionaler Kontext",
|
||
"help_artistic_context": "Dokumentiert einen Kontext, in dem die Offenlegung in geeigneter Weise erfolgen kann, ohne Darstellung oder Genuss unangemessen zu beeinträchtigen.",
|
||
"field_substantial_review": "Substanzielle menschliche Prüfung oder redaktionelle Kontrolle durchgeführt",
|
||
"help_substantial_review": "Nur aktivieren, wenn die Kontrolle über bloße Rechtschreib-, Stil- oder Formatkorrekturen hinausgeht.",
|
||
"field_editorial_responsibility_confirmed": "Redaktionelle Verantwortung wird übernommen",
|
||
"help_editorial_responsibility_confirmed": "Bestätigt, dass eine natürliche oder juristische Person die redaktionelle Verantwortung für die Veröffentlichung trägt.",
|
||
"field_responsible_name": "Verantwortliche Person oder Organisation",
|
||
"field_responsible_url": "URL der verantwortlichen Stelle",
|
||
"field_first_exposure": "Hinweis ist spätestens bei der ersten Exposition sichtbar",
|
||
"field_accessibility": "Barrierefreiheit der Kennzeichnung wurde berücksichtigt",
|
||
"assessment_heading": "Technische Artikel-50-Einordnung",
|
||
"assessment_disclaimer": "Nicht bindende Entscheidungshilfe. Die tatsächliche rechtliche Bewertung hängt vom konkreten Einsatz und weiteren Rechtsvorschriften ab.",
|
||
"assessment_not_assessed_title": "Keine regulatorische Einordnung angefordert",
|
||
"assessment_not_assessed_text": "Die Erklärung dokumentiert die KI-Nutzung, enthält aber keine zusätzlichen Angaben zum regulatorischen Kontext nach Artikel 50.",
|
||
"assessment_voluntary_title": "Freiwillige Transparenz im Vordergrund",
|
||
"assessment_voluntary_text": "Auf Grundlage der angegebenen Tatsachen wurde kein typischer Artikel-50-Fall für Deepfakes oder Texte zu Angelegenheiten von öffentlichem Interesse markiert.",
|
||
"assessment_deepfake_title": "Offenlegung bei Deepfake-Inhalten besonders relevant",
|
||
"assessment_deepfake_text": "Die Angaben markieren einen Deepfake- oder realitätsähnlich manipulierten Inhalt. Eine klare und unterscheidbare Offenlegung sollte unmittelbar am Inhalt vorgesehen werden.",
|
||
"assessment_public_text_title": "Offenlegung für Text zu öffentlichem Interesse relevant",
|
||
"assessment_public_text_text": "Der Text wurde als Information zu einer Angelegenheit von öffentlichem Interesse markiert. Die dokumentierten Voraussetzungen für die Ausnahme aufgrund menschlicher Prüfung und redaktioneller Verantwortung sind nicht vollständig bestätigt.",
|
||
"assessment_possible_exemption_title": "Mögliche Ausnahme für redaktionell kontrollierten Text",
|
||
"assessment_possible_exemption_text": "Für den Text zu einer Angelegenheit von öffentlichem Interesse sind substanzielle menschliche Prüfung beziehungsweise redaktionelle Kontrolle und redaktionelle Verantwortung bestätigt. Dies kann für die Ausnahme in Artikel 50 Absatz 4 relevant sein.",
|
||
"assessment_multiple_title": "Mehrere Artikel-50-Kontexte erkannt",
|
||
"assessment_multiple_text": "Die Angaben enthalten mehrere regulatorisch relevante Kontexte. Die einzelnen Hinweise sollten gemeinsam betrachtet und für die jeweiligen Inhaltsbestandteile umgesetzt werden.",
|
||
"warning_first_exposure": "Die Sichtbarkeit spätestens bei der ersten Exposition wurde nicht bestätigt.",
|
||
"warning_accessibility": "Die Berücksichtigung anwendbarer Barrierefreiheitsanforderungen wurde nicht bestätigt.",
|
||
"warning_editorial_responsibility": "Eine substanzielle Prüfung ist angegeben, die redaktionelle Verantwortung wurde jedoch nicht bestätigt.",
|
||
"warning_artistic_context": "Der Inhalt ist als künstlerisch, kreativ, satirisch oder fiktional markiert. Die Offenlegung sollte in einer geeigneten Form erfolgen, die den Werkgenuss nicht unnötig beeinträchtigt.",
|
||
"badge_article50_deepfake": "KI-manipulierter Inhalt",
|
||
"badge_article50_text": "KI-generierter Text",
|
||
"regulatory_context": "Regulatorischer Kontext",
|
||
"yes_value": "Ja",
|
||
"no_value": "Nein",
|
||
},
|
||
"en": {
|
||
"article50_section_title": "Regulatory context (EU AI Act, Article 50)",
|
||
"article50_section_intro": "These fields record facts that may be relevant to Article 50 transparency obligations. The resulting assessment is technical decision support, not legal advice.",
|
||
"field_public_interest_text": "Text on a matter of public interest",
|
||
"help_public_interest_text": "Select when the text is published for the purpose of informing the public on a matter of public interest.",
|
||
"field_deepfake": "Deepfake / realistic AI manipulation",
|
||
"help_deepfake": "Select when image, audio or video realistically depicts or manipulates existing persons, places, objects or events in a way that may appear authentic.",
|
||
"field_artistic_context": "Artistic, creative, satirical or fictional context",
|
||
"help_artistic_context": "Records a context in which disclosure may be provided in an appropriate manner without unduly hampering display or enjoyment.",
|
||
"field_substantial_review": "Substantial human review or editorial control performed",
|
||
"help_substantial_review": "Select only where the review goes beyond spelling, style or formatting corrections.",
|
||
"field_editorial_responsibility_confirmed": "Editorial responsibility is assumed",
|
||
"help_editorial_responsibility_confirmed": "Confirms that a natural or legal person holds editorial responsibility for publication.",
|
||
"field_responsible_name": "Responsible person or organisation",
|
||
"field_responsible_url": "Responsible party URL",
|
||
"field_first_exposure": "Disclosure is visible no later than first exposure",
|
||
"field_accessibility": "Accessibility of the disclosure has been considered",
|
||
"assessment_heading": "Technical Article 50 assessment",
|
||
"assessment_disclaimer": "Non-binding decision support. The actual legal assessment depends on the concrete use and other applicable law.",
|
||
"assessment_not_assessed_title": "No regulatory assessment requested",
|
||
"assessment_not_assessed_text": "The declaration records AI use but does not include additional Article 50 regulatory context.",
|
||
"assessment_voluntary_title": "Voluntary transparency is the primary use case",
|
||
"assessment_voluntary_text": "Based on the supplied facts, no typical Article 50 case for deepfakes or public-interest text has been marked.",
|
||
"assessment_deepfake_title": "Disclosure is particularly relevant for deepfake content",
|
||
"assessment_deepfake_text": "The content is marked as a deepfake or realistic AI manipulation. A clear and distinguishable disclosure should be provided directly with the content.",
|
||
"assessment_public_text_title": "Disclosure is relevant for public-interest text",
|
||
"assessment_public_text_text": "The text is marked as informing the public on a matter of public interest. The documented conditions relating to human review and editorial responsibility are not both confirmed.",
|
||
"assessment_possible_exemption_title": "Possible exception for editorially controlled text",
|
||
"assessment_possible_exemption_text": "Substantial human review or editorial control and editorial responsibility are confirmed for the public-interest text. This may be relevant to the exception in Article 50(4).",
|
||
"assessment_multiple_title": "Multiple Article 50 contexts detected",
|
||
"assessment_multiple_text": "The supplied facts contain multiple regulatory contexts. Each finding should be considered together and applied to the relevant content components.",
|
||
"warning_first_exposure": "Visibility no later than first exposure has not been confirmed.",
|
||
"warning_accessibility": "Consideration of applicable accessibility requirements has not been confirmed.",
|
||
"warning_editorial_responsibility": "Substantial review is stated, but editorial responsibility has not been confirmed.",
|
||
"warning_artistic_context": "The content is marked as artistic, creative, satirical or fictional. Disclosure should use an appropriate manner that does not unnecessarily hamper enjoyment of the work.",
|
||
"badge_article50_deepfake": "AI-manipulated content",
|
||
"badge_article50_text": "AI-generated text",
|
||
"regulatory_context": "Regulatory context",
|
||
"yes_value": "Yes",
|
||
"no_value": "No",
|
||
},
|
||
"fr": {
|
||
"article50_section_title": "Contexte réglementaire (règlement IA de l’UE, article 50)", "article50_section_intro": "Ces informations consignent des faits pouvant être pertinents au regard des obligations de transparence de l’article 50. L’évaluation est une aide technique et non un conseil juridique.",
|
||
"field_public_interest_text": "Texte concernant une question d’intérêt public", "help_public_interest_text": "À sélectionner lorsque le texte vise à informer le public sur une question d’intérêt public.",
|
||
"field_deepfake": "Deepfake / manipulation réaliste par IA", "help_deepfake": "À sélectionner pour une image, un son ou une vidéo réaliste susceptible de paraître authentique.",
|
||
"field_artistic_context": "Contexte artistique, créatif, satirique ou fictionnel", "help_artistic_context": "Documente un contexte dans lequel l’information peut être adaptée sans nuire indûment à l’œuvre.",
|
||
"field_substantial_review": "Révision humaine substantielle ou contrôle éditorial effectué", "help_substantial_review": "Uniquement si le contrôle dépasse les corrections de forme, de style ou d’orthographe.",
|
||
"field_editorial_responsibility_confirmed": "Responsabilité éditoriale assumée", "help_editorial_responsibility_confirmed": "Confirme qu’une personne physique ou morale assume la responsabilité éditoriale.",
|
||
"field_responsible_name": "Personne ou organisation responsable", "field_responsible_url": "URL du responsable", "field_first_exposure": "Information visible au plus tard lors de la première exposition", "field_accessibility": "Accessibilité de l’information prise en compte",
|
||
"assessment_heading": "Évaluation technique de l’article 50", "assessment_disclaimer": "Aide à la décision non contraignante; l’analyse juridique dépend du cas concret.",
|
||
"assessment_not_assessed_title": "Aucune évaluation réglementaire demandée", "assessment_not_assessed_text": "La déclaration documente l’usage de l’IA sans contexte réglementaire supplémentaire.", "assessment_voluntary_title": "Transparence volontaire au premier plan", "assessment_voluntary_text": "Aucun cas typique de deepfake ou de texte d’intérêt public n’a été indiqué.",
|
||
"assessment_deepfake_title": "Information particulièrement pertinente pour les deepfakes", "assessment_deepfake_text": "Le contenu est indiqué comme deepfake ou manipulation réaliste. Une information claire et distincte devrait accompagner directement le contenu.",
|
||
"assessment_public_text_title": "Information pertinente pour un texte d’intérêt public", "assessment_public_text_text": "Les conditions documentées relatives au contrôle humain et à la responsabilité éditoriale ne sont pas toutes confirmées.",
|
||
"assessment_possible_exemption_title": "Exception possible pour un texte sous contrôle éditorial", "assessment_possible_exemption_text": "Un contrôle humain substantiel et une responsabilité éditoriale sont confirmés; cela peut être pertinent pour l’exception de l’article 50, paragraphe 4.", "assessment_multiple_title": "Plusieurs contextes de l’article 50 détectés", "assessment_multiple_text": "Les informations fournies contiennent plusieurs contextes réglementaires. Chaque constat doit être examiné avec les autres et appliqué aux éléments de contenu concernés.",
|
||
"warning_first_exposure": "La visibilité lors de la première exposition n’est pas confirmée.", "warning_accessibility": "La prise en compte des exigences d’accessibilité n’est pas confirmée.", "warning_editorial_responsibility": "Le contrôle substantiel est indiqué, mais la responsabilité éditoriale n’est pas confirmée.", "warning_artistic_context": "Le contenu est indiqué comme artistique, créatif, satirique ou fictionnel. L’information devrait être présentée d’une manière appropriée qui ne gêne pas inutilement l’appréciation de l’œuvre.",
|
||
"badge_article50_deepfake": "Contenu manipulé par IA", "badge_article50_text": "Texte généré par IA", "regulatory_context": "Contexte réglementaire", "yes_value": "Oui", "no_value": "Non",
|
||
},
|
||
"es": {
|
||
"article50_section_title": "Contexto normativo (Reglamento de IA de la UE, artículo 50)", "article50_section_intro": "Estos datos recogen hechos que pueden ser relevantes para las obligaciones de transparencia del artículo 50. La evaluación es una ayuda técnica, no asesoramiento jurídico.",
|
||
"field_public_interest_text": "Texto sobre un asunto de interés público", "help_public_interest_text": "Seleccionar cuando el texto se publica para informar al público sobre un asunto de interés público.",
|
||
"field_deepfake": "Deepfake / manipulación realista con IA", "help_deepfake": "Seleccionar para imágenes, audio o vídeo realistas que puedan parecer auténticos.",
|
||
"field_artistic_context": "Contexto artístico, creativo, satírico o ficticio", "help_artistic_context": "Documenta un contexto en el que la divulgación puede adaptarse sin perjudicar indebidamente la obra.",
|
||
"field_substantial_review": "Revisión humana sustancial o control editorial realizado", "help_substantial_review": "Solo cuando el control vaya más allá de correcciones de ortografía, estilo o formato.",
|
||
"field_editorial_responsibility_confirmed": "Se asume la responsabilidad editorial", "help_editorial_responsibility_confirmed": "Confirma que una persona física o jurídica asume la responsabilidad editorial.",
|
||
"field_responsible_name": "Persona u organización responsable", "field_responsible_url": "URL del responsable", "field_first_exposure": "Aviso visible como máximo en la primera exposición", "field_accessibility": "Se ha considerado la accesibilidad del aviso",
|
||
"assessment_heading": "Evaluación técnica del artículo 50", "assessment_disclaimer": "Ayuda no vinculante; la valoración jurídica depende del caso concreto.",
|
||
"assessment_not_assessed_title": "No se solicitó evaluación normativa", "assessment_not_assessed_text": "La declaración documenta el uso de IA sin contexto normativo adicional.", "assessment_voluntary_title": "Predomina la transparencia voluntaria", "assessment_voluntary_text": "No se ha marcado un caso típico de deepfake o texto de interés público.",
|
||
"assessment_deepfake_title": "La divulgación es especialmente relevante para deepfakes", "assessment_deepfake_text": "El contenido está marcado como deepfake o manipulación realista. Debe preverse un aviso claro junto al contenido.",
|
||
"assessment_public_text_title": "La divulgación es relevante para texto de interés público", "assessment_public_text_text": "No se confirman conjuntamente las condiciones documentadas de revisión humana y responsabilidad editorial.",
|
||
"assessment_possible_exemption_title": "Posible excepción para texto bajo control editorial", "assessment_possible_exemption_text": "Se confirman revisión humana sustancial y responsabilidad editorial; puede ser relevante para la excepción del artículo 50.4.", "assessment_multiple_title": "Se detectaron varios contextos del artículo 50", "assessment_multiple_text": "Los datos proporcionados contienen varios contextos normativos. Cada resultado debe considerarse conjuntamente y aplicarse a los componentes de contenido correspondientes.",
|
||
"warning_first_exposure": "No se ha confirmado la visibilidad en la primera exposición.", "warning_accessibility": "No se ha confirmado la consideración de accesibilidad.", "warning_editorial_responsibility": "Se indica revisión sustancial, pero no responsabilidad editorial.", "warning_artistic_context": "El contenido está marcado como artístico, creativo, satírico o ficticio. La divulgación debe presentarse de forma adecuada sin perjudicar innecesariamente el disfrute de la obra.",
|
||
"badge_article50_deepfake": "Contenido manipulado por IA", "badge_article50_text": "Texto generado por IA", "regulatory_context": "Contexto normativo", "yes_value": "Sí", "no_value": "No",
|
||
},
|
||
"it": {
|
||
"article50_section_title": "Contesto normativo (AI Act UE, articolo 50)", "article50_section_intro": "Questi dati registrano fatti potenzialmente rilevanti per gli obblighi di trasparenza dell’articolo 50. La valutazione è un supporto tecnico e non consulenza legale.",
|
||
"field_public_interest_text": "Testo su una questione di interesse pubblico", "help_public_interest_text": "Selezionare quando il testo informa il pubblico su una questione di interesse pubblico.",
|
||
"field_deepfake": "Deepfake / manipolazione realistica con IA", "help_deepfake": "Selezionare per immagini, audio o video realistici che possono apparire autentici.",
|
||
"field_artistic_context": "Contesto artistico, creativo, satirico o fittizio", "help_artistic_context": "Documenta un contesto in cui l’informativa può essere adattata senza compromettere indebitamente l’opera.",
|
||
"field_substantial_review": "Revisione umana sostanziale o controllo editoriale effettuato", "help_substantial_review": "Solo se il controllo supera semplici correzioni di ortografia, stile o formato.",
|
||
"field_editorial_responsibility_confirmed": "Responsabilità editoriale assunta", "help_editorial_responsibility_confirmed": "Conferma che una persona fisica o giuridica assume la responsabilità editoriale.",
|
||
"field_responsible_name": "Persona o organizzazione responsabile", "field_responsible_url": "URL del responsabile", "field_first_exposure": "Informativa visibile entro la prima esposizione", "field_accessibility": "Accessibilità dell’informativa considerata",
|
||
"assessment_heading": "Valutazione tecnica dell’articolo 50", "assessment_disclaimer": "Supporto non vincolante; la valutazione giuridica dipende dal caso concreto.",
|
||
"assessment_not_assessed_title": "Nessuna valutazione normativa richiesta", "assessment_not_assessed_text": "La dichiarazione documenta l’uso dell’IA senza ulteriore contesto normativo.", "assessment_voluntary_title": "Prevale la trasparenza volontaria", "assessment_voluntary_text": "Non è stato indicato un tipico caso di deepfake o testo di interesse pubblico.",
|
||
"assessment_deepfake_title": "Informativa particolarmente rilevante per i deepfake", "assessment_deepfake_text": "Il contenuto è indicato come deepfake o manipolazione realistica; è opportuno un avviso chiaro direttamente con il contenuto.",
|
||
"assessment_public_text_title": "Informativa rilevante per testo di interesse pubblico", "assessment_public_text_text": "Non risultano entrambe confermate revisione umana e responsabilità editoriale.",
|
||
"assessment_possible_exemption_title": "Possibile eccezione per testo con controllo editoriale", "assessment_possible_exemption_text": "Sono confermati controllo umano sostanziale e responsabilità editoriale; ciò può rilevare per l’eccezione dell’articolo 50(4).", "assessment_multiple_title": "Rilevati più contesti dell’articolo 50", "assessment_multiple_text": "Le informazioni fornite contengono più contesti normativi. Ogni risultato dovrebbe essere considerato insieme agli altri e applicato ai relativi componenti di contenuto.",
|
||
"warning_first_exposure": "La visibilità alla prima esposizione non è confermata.", "warning_accessibility": "La considerazione dell’accessibilità non è confermata.", "warning_editorial_responsibility": "È indicata una revisione sostanziale, ma non la responsabilità editoriale.", "warning_artistic_context": "Il contenuto è indicato come artistico, creativo, satirico o fittizio. L’informativa dovrebbe essere fornita in modo appropriato senza compromettere inutilmente la fruizione dell’opera.",
|
||
"badge_article50_deepfake": "Contenuto manipolato da IA", "badge_article50_text": "Testo generato da IA", "regulatory_context": "Contesto normativo", "yes_value": "Sì", "no_value": "No",
|
||
},
|
||
"nl": {
|
||
"article50_section_title": "Regelgevingscontext (EU AI Act, artikel 50)", "article50_section_intro": "Deze gegevens leggen feiten vast die relevant kunnen zijn voor de transparantieverplichtingen van artikel 50. De beoordeling is technische beslissingsondersteuning en geen juridisch advies.",
|
||
"field_public_interest_text": "Tekst over een onderwerp van openbaar belang", "help_public_interest_text": "Selecteer wanneer de tekst het publiek informeert over een onderwerp van openbaar belang.",
|
||
"field_deepfake": "Deepfake / realistische AI-manipulatie", "help_deepfake": "Selecteer voor realistische beeld-, audio- of video-inhoud die authentiek kan lijken.",
|
||
"field_artistic_context": "Artistieke, creatieve, satirische of fictieve context", "help_artistic_context": "Legt een context vast waarin de melding passend kan worden vormgegeven zonder het werk onnodig te verstoren.",
|
||
"field_substantial_review": "Inhoudelijke menselijke beoordeling of redactionele controle uitgevoerd", "help_substantial_review": "Alleen wanneer de controle verder gaat dan spelling, stijl of opmaak.",
|
||
"field_editorial_responsibility_confirmed": "Redactionele verantwoordelijkheid wordt aanvaard", "help_editorial_responsibility_confirmed": "Bevestigt dat een natuurlijke of rechtspersoon redactionele verantwoordelijkheid draagt.",
|
||
"field_responsible_name": "Verantwoordelijke persoon of organisatie", "field_responsible_url": "URL verantwoordelijke", "field_first_exposure": "Melding uiterlijk bij eerste blootstelling zichtbaar", "field_accessibility": "Toegankelijkheid van de melding is meegenomen",
|
||
"assessment_heading": "Technische beoordeling artikel 50", "assessment_disclaimer": "Niet-bindende ondersteuning; de juridische beoordeling hangt af van het concrete geval.",
|
||
"assessment_not_assessed_title": "Geen regelgevingsbeoordeling gevraagd", "assessment_not_assessed_text": "De verklaring documenteert AI-gebruik zonder aanvullende regelgevingscontext.", "assessment_voluntary_title": "Vrijwillige transparantie staat centraal", "assessment_voluntary_text": "Er is geen typisch deepfake- of openbaar-belangtekstgeval gemarkeerd.",
|
||
"assessment_deepfake_title": "Melding is bijzonder relevant bij deepfakes", "assessment_deepfake_text": "De inhoud is gemarkeerd als deepfake of realistische manipulatie. Een duidelijke melding hoort direct bij de inhoud.",
|
||
"assessment_public_text_title": "Melding is relevant voor tekst van openbaar belang", "assessment_public_text_text": "Menselijke beoordeling en redactionele verantwoordelijkheid zijn niet beide bevestigd.",
|
||
"assessment_possible_exemption_title": "Mogelijke uitzondering voor redactioneel gecontroleerde tekst", "assessment_possible_exemption_text": "Inhoudelijke menselijke beoordeling en redactionele verantwoordelijkheid zijn bevestigd; dit kan relevant zijn voor de uitzondering in artikel 50(4).", "assessment_multiple_title": "Meerdere contexten van artikel 50 gedetecteerd", "assessment_multiple_text": "De opgegeven feiten bevatten meerdere regelgevingscontexten. Elk resultaat moet gezamenlijk worden beoordeeld en op de relevante inhoudsonderdelen worden toegepast.",
|
||
"warning_first_exposure": "Zichtbaarheid bij de eerste blootstelling is niet bevestigd.", "warning_accessibility": "Aandacht voor toegankelijkheid is niet bevestigd.", "warning_editorial_responsibility": "Inhoudelijke beoordeling is vermeld, maar redactionele verantwoordelijkheid niet.", "warning_artistic_context": "De inhoud is gemarkeerd als artistiek, creatief, satirisch of fictief. De melding hoort op een passende manier te gebeuren zonder het genieten van het werk onnodig te belemmeren.",
|
||
"badge_article50_deepfake": "AI-gemanipuleerde inhoud", "badge_article50_text": "AI-gegenereerde tekst", "regulatory_context": "Regelgevingscontext", "yes_value": "Ja", "no_value": "Nee",
|
||
},
|
||
"pt": {
|
||
"article50_section_title": "Contexto regulamentar (Regulamento de IA da UE, artigo 50)", "article50_section_intro": "Estes dados registam factos potencialmente relevantes para as obrigações de transparência do artigo 50. A avaliação é apoio técnico e não aconselhamento jurídico.",
|
||
"field_public_interest_text": "Texto sobre matéria de interesse público", "help_public_interest_text": "Selecionar quando o texto é publicado para informar o público sobre matéria de interesse público.",
|
||
"field_deepfake": "Deepfake / manipulação realista por IA", "help_deepfake": "Selecionar para imagem, áudio ou vídeo realista que possa parecer autêntico.",
|
||
"field_artistic_context": "Contexto artístico, criativo, satírico ou ficcional", "help_artistic_context": "Regista um contexto em que a divulgação pode ser adaptada sem prejudicar indevidamente a obra.",
|
||
"field_substantial_review": "Revisão humana substancial ou controlo editorial realizado", "help_substantial_review": "Apenas quando o controlo vai além de correções de ortografia, estilo ou formatação.",
|
||
"field_editorial_responsibility_confirmed": "Responsabilidade editorial assumida", "help_editorial_responsibility_confirmed": "Confirma que uma pessoa singular ou coletiva assume responsabilidade editorial.",
|
||
"field_responsible_name": "Pessoa ou organização responsável", "field_responsible_url": "URL do responsável", "field_first_exposure": "Aviso visível o mais tardar na primeira exposição", "field_accessibility": "A acessibilidade do aviso foi considerada",
|
||
"assessment_heading": "Avaliação técnica do artigo 50", "assessment_disclaimer": "Apoio não vinculativo; a avaliação jurídica depende do caso concreto.",
|
||
"assessment_not_assessed_title": "Nenhuma avaliação regulamentar solicitada", "assessment_not_assessed_text": "A declaração documenta o uso de IA sem contexto regulamentar adicional.", "assessment_voluntary_title": "A transparência voluntária é o foco", "assessment_voluntary_text": "Não foi assinalado um caso típico de deepfake ou texto de interesse público.",
|
||
"assessment_deepfake_title": "A divulgação é particularmente relevante para deepfakes", "assessment_deepfake_text": "O conteúdo está marcado como deepfake ou manipulação realista; deve existir um aviso claro junto do conteúdo.",
|
||
"assessment_public_text_title": "A divulgação é relevante para texto de interesse público", "assessment_public_text_text": "Revisão humana e responsabilidade editorial não estão ambas confirmadas.",
|
||
"assessment_possible_exemption_title": "Possível exceção para texto sob controlo editorial", "assessment_possible_exemption_text": "Revisão humana substancial e responsabilidade editorial estão confirmadas; isto pode ser relevante para a exceção do artigo 50(4).", "assessment_multiple_title": "Foram detetados vários contextos do artigo 50", "assessment_multiple_text": "Os dados fornecidos contêm vários contextos regulamentares. Cada conclusão deve ser considerada em conjunto e aplicada aos componentes de conteúdo relevantes.",
|
||
"warning_first_exposure": "A visibilidade na primeira exposição não foi confirmada.", "warning_accessibility": "A consideração da acessibilidade não foi confirmada.", "warning_editorial_responsibility": "É indicada revisão substancial, mas não responsabilidade editorial.", "warning_artistic_context": "O conteúdo está assinalado como artístico, criativo, satírico ou ficcional. A divulgação deve ser feita de forma adequada sem prejudicar desnecessariamente a fruição da obra.",
|
||
"badge_article50_deepfake": "Conteúdo manipulado por IA", "badge_article50_text": "Texto gerado por IA", "regulatory_context": "Contexto regulamentar", "yes_value": "Sim", "no_value": "Não",
|
||
},
|
||
"pl": {
|
||
"article50_section_title": "Kontekst regulacyjny (unijny AI Act, art. 50)", "article50_section_intro": "Dane te zapisują fakty, które mogą mieć znaczenie dla obowiązków przejrzystości z art. 50. Ocena stanowi techniczne wsparcie decyzji, a nie poradę prawną.",
|
||
"field_public_interest_text": "Tekst dotyczący sprawy interesu publicznego", "help_public_interest_text": "Zaznacz, gdy tekst służy informowaniu opinii publicznej o sprawie interesu publicznego.",
|
||
"field_deepfake": "Deepfake / realistyczna manipulacja AI", "help_deepfake": "Zaznacz dla realistycznego obrazu, dźwięku lub wideo, które może wyglądać na autentyczne.",
|
||
"field_artistic_context": "Kontekst artystyczny, twórczy, satyryczny lub fikcyjny", "help_artistic_context": "Dokumentuje kontekst, w którym informację można podać odpowiednio bez nadmiernego zakłócania utworu.",
|
||
"field_substantial_review": "Przeprowadzono istotną kontrolę człowieka lub redakcji", "help_substantial_review": "Tylko gdy kontrola wykracza poza korektę pisowni, stylu lub formatowania.",
|
||
"field_editorial_responsibility_confirmed": "Przyjęto odpowiedzialność redakcyjną", "help_editorial_responsibility_confirmed": "Potwierdza, że osoba fizyczna lub prawna ponosi odpowiedzialność redakcyjną.",
|
||
"field_responsible_name": "Odpowiedzialna osoba lub organizacja", "field_responsible_url": "URL podmiotu odpowiedzialnego", "field_first_exposure": "Informacja widoczna najpóźniej przy pierwszym kontakcie", "field_accessibility": "Uwzględniono dostępność informacji",
|
||
"assessment_heading": "Techniczna ocena art. 50", "assessment_disclaimer": "Niewiążące wsparcie decyzji; ocena prawna zależy od konkretnego przypadku.",
|
||
"assessment_not_assessed_title": "Nie zażądano oceny regulacyjnej", "assessment_not_assessed_text": "Deklaracja dokumentuje użycie AI bez dodatkowego kontekstu regulacyjnego.", "assessment_voluntary_title": "Głównym celem jest dobrowolna przejrzystość", "assessment_voluntary_text": "Nie oznaczono typowego przypadku deepfake ani tekstu interesu publicznego.",
|
||
"assessment_deepfake_title": "Ujawnienie jest szczególnie istotne dla deepfake", "assessment_deepfake_text": "Treść oznaczono jako deepfake lub realistyczną manipulację. Jasna informacja powinna towarzyszyć bezpośrednio treści.",
|
||
"assessment_public_text_title": "Ujawnienie jest istotne dla tekstu interesu publicznego", "assessment_public_text_text": "Nie potwierdzono łącznie kontroli człowieka i odpowiedzialności redakcyjnej.",
|
||
"assessment_possible_exemption_title": "Możliwy wyjątek dla tekstu pod kontrolą redakcyjną", "assessment_possible_exemption_text": "Potwierdzono istotną kontrolę człowieka i odpowiedzialność redakcyjną; może to mieć znaczenie dla wyjątku z art. 50 ust. 4.", "assessment_multiple_title": "Wykryto wiele kontekstów art. 50", "assessment_multiple_text": "Podane informacje obejmują kilka kontekstów regulacyjnych. Każde ustalenie należy rozpatrywać łącznie i odnosić do właściwych elementów treści.",
|
||
"warning_first_exposure": "Nie potwierdzono widoczności przy pierwszym kontakcie.", "warning_accessibility": "Nie potwierdzono uwzględnienia dostępności.", "warning_editorial_responsibility": "Wskazano istotną kontrolę, ale nie potwierdzono odpowiedzialności redakcyjnej.", "warning_artistic_context": "Treść oznaczono jako artystyczną, kreatywną, satyryczną lub fikcyjną. Informację należy przekazać w odpowiedni sposób, bez niepotrzebnego utrudniania odbioru utworu.",
|
||
"badge_article50_deepfake": "Treść zmanipulowana przez AI", "badge_article50_text": "Tekst wygenerowany przez AI", "regulatory_context": "Kontekst regulacyjny", "yes_value": "Tak", "no_value": "Nie",
|
||
},
|
||
}
|
||
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"
|
||
}
|
||
|
||
// applyUCNGBrandCopy aligns the public wording with the UCNG Brand & Identity
|
||
// Guidelines without changing the declaration schema or API semantics.
|
||
func applyUCNGBrandCopy() {
|
||
type brandCopy struct {
|
||
text map[string]string
|
||
presets map[string]PresetText
|
||
extents map[string]string
|
||
assurances map[string]string
|
||
}
|
||
copies := map[string]brandCopy{
|
||
"de": {
|
||
text: map[string]string{
|
||
"meta_description": "UCNG ist ein offenes Notationssystem für transparente, menschen- und maschinenlesbare Content-Deklarationen.",
|
||
"standard_eyebrow": "UCNG · Universal Content Notation Guidelines",
|
||
"hero_title": "Declare how content was made.",
|
||
"hero_lead": "UCNG ist ein offenes Notationssystem für transparente Content-Deklarationen – verständlich für Menschen und maschinenlesbar für Plattformen und Systeme. Diese Anwendung erzeugt Declaration, Badge und JSON-LD aus denselben Angaben.",
|
||
"generator_eyebrow": "UCNG Declaration",
|
||
"generator_title": "Content-Deklaration erstellen",
|
||
"generator_intro": "Wähle eine Vorlage oder beschreibe den Entstehungskontext eines Inhalts strukturiert nach Bestandteilen. Die Declaration dokumentiert Rollen und Prozesse – einschließlich KI-Beteiligung – ohne Qualität oder Wahrheit des Inhalts zu bewerten.",
|
||
"field_mode": "Art der Declaration", "mode_single": "Einzelner Inhalt", "mode_article": "Mehrteiligen Inhalt deklarieren",
|
||
"field_preset": "Declaration-Vorlage", "option_custom": "Eigene Struktur", "field_component": "Content-Bestandteil", "field_extent": "UCNG Einordnung", "field_review": "Human Review",
|
||
"field_activities": "Rolle / Tätigkeit", "activities_help": "Optionale Prozessangaben, zum Beispiel research, summarisation, translation oder generation.",
|
||
"field_subject": "URL des deklarierten Inhalts", "field_language": "Sprache der Declaration",
|
||
"declaration_eyebrow": "UCNG Declaration", "fact_component": "Content", "fact_extent": "UCNG Einordnung", "fact_activities": "Rolle / Tätigkeit", "fact_review": "Human Review", "fact_subject": "Deklarierter Inhalt",
|
||
"fact_assurance": "Declaration Status", "field_assurance": "Declaration Status",
|
||
"transparency_label": "Zur Einordnung:",
|
||
"transparency_text": "Diese UCNG Declaration beschreibt den deklarierten Entstehungs- und Transformationsprozess des Inhalts. Sie bewertet weder Wahrheit noch Qualität und begründet für sich allein keine Rechtskonformität, Authentizität, Genauigkeit oder Verifikation.",
|
||
"manifest": "Maschinenlesbare Declaration", "ai_label": "UCNG",
|
||
"api_badge_title": "UCNG Badge", "api_badge_desc": "Das Badge ist die kompakte Darstellung einer UCNG Declaration. Es zeigt, dass eine Declaration verfügbar ist; es bedeutet nicht automatisch verified, zertifiziert oder rechtskonform.",
|
||
"api_manifest_title": "Machine Layer", "api_manifest_desc": "Die strukturierte JSON-LD-Darstellung transportiert dieselben Deklarationsdaten maschinenlesbar für Plattformen, Systeme und Build-Prozesse.",
|
||
"article_fields": "Content-Bestandteile", "article_help": "Deklariere für jeden Bestandteil, wie er entstanden oder verändert worden ist und welche Rolle KI dabei hatte.",
|
||
"article_title": "UCNG Content Declaration", "article_summary_heading": "Human-readable Declaration", "article_table_heading": "Declaration Details", "table_component": "Content", "table_extent": "UCNG Einordnung", "table_activities": "Rolle / Tätigkeit", "table_review": "Human Review", "badge_article": "DECLARATION",
|
||
"component_text": "Text", "component_research": "Recherche", "component_cover_image": "Titelbild", "component_images": "Bilder", "component_translation": "Übersetzung", "component_audio": "Audio", "component_video": "Video", "component_code": "Code",
|
||
"regulatory_api_label": "Regulatorischer Kontext API",
|
||
"article50_section_title": "Optionaler regulatorischer Kontext (EU AI Act, Artikel 50)",
|
||
"article50_section_intro": "Diese optionalen Angaben dokumentieren Tatsachen, die für Transparenzpflichten nach Artikel 50 relevant sein können. Sie sind eine technische Entscheidungshilfe und nicht Teil der UCNG-Kernaussage oder eine Rechtsberatung.",
|
||
"assessment_heading": "Regulatorische Einordnung", "assessment_disclaimer": "Nicht bindende technische Entscheidungshilfe. Eine UCNG Declaration ist keine Feststellung rechtlicher Compliance.",
|
||
"assessment_not_assessed_text": "Die UCNG Declaration enthält keinen zusätzlichen regulatorischen Kontext nach Artikel 50.",
|
||
"badge_article50_deepfake": "AI TRANSFORMED", "badge_article50_text": "AI GENERATED",
|
||
"bulk_meta_description": "Stapelverarbeitung für strukturierte UCNG Content Declarations.",
|
||
"bulk_title": "Viele Inhalte. Eine gemeinsame Deklarationssprache.",
|
||
"bulk_intro": "Erzeuge strukturierte UCNG Declarations für ganze Content-Bestände. Ein gemeinsames Profil kann auf viele URLs angewendet oder als individuelles JSON verarbeitet werden.",
|
||
"bulk_workspace_intro": "Füge Inhalte zeilenweise ein und definiere ihren gemeinsamen Entstehungskontext einmal. Abweichende Datensätze können im erweiterten JSON-Modus verarbeitet werden.",
|
||
"bulk_profile_title": "Gemeinsames Declaration-Profil", "bulk_article50_title": "Optionaler regulatorischer Kontext / Artikel 50", "bulk_link_declaration": "UCNG Declaration",
|
||
},
|
||
presets: map[string]PresetText{
|
||
"no-ai": {"HUMAN", "Der wesentliche Inhalt wurde von Menschen erstellt. Normale technische Hilfsmittel und nicht-generative Standardbearbeitung ändern diese Einordnung nicht automatisch."},
|
||
"research": {"AI ASSISTED", "KI wurde unterstützend für Recherche oder Quellenfindung eingesetzt. Der wesentliche kreative beziehungsweise redaktionelle Inhalt stammt von Menschen und wurde menschlich verantwortet."},
|
||
"summary": {"AI ASSISTED", "KI wurde unterstützend zur Zusammenfassung von Ausgangsmaterial eingesetzt. Auswahl, Einordnung und Endfassung wurden von Menschen verantwortet."},
|
||
"full": {"AI GENERATED", "Der wesentliche Inhalt wurde mit einem generativen KI-System erzeugt. Eine dokumentierte menschliche Prüfung wird separat ausgewiesen."},
|
||
},
|
||
extents: map[string]string{"none": "HUMAN", "assisted": "AI ASSISTED", "partial": "MIXED · teilweise generiert", "mostly": "AI GENERATED · überwiegend", "full": "AI GENERATED"},
|
||
assurances: map[string]string{"selfDeclared": "Declared", "technicallyRecorded": "Declared · technisch protokolliert", "signed": "Declared · signiert", "verified": "Verified"},
|
||
},
|
||
"en": {
|
||
text: map[string]string{
|
||
"meta_description": "UCNG is an open notation framework for transparent, human-readable and machine-readable content declarations.",
|
||
"standard_eyebrow": "UCNG · Universal Content Notation Guidelines", "hero_title": "Declare how content was made.",
|
||
"hero_lead": "UCNG is an open notation framework for transparent content declarations – readable by humans and machine-readable for platforms and systems. This application generates the declaration, badge and JSON-LD from the same information.",
|
||
"generator_eyebrow": "UCNG Declaration", "generator_title": "Create a content declaration", "generator_intro": "Choose a preset or describe the creation context of content by component. The declaration records roles and processes, including AI involvement, without judging the quality or truth of the content.",
|
||
"field_mode": "Declaration type", "mode_single": "Single content item", "mode_article": "Declare multi-part content", "field_preset": "Declaration preset", "option_custom": "Custom structure", "field_component": "Content component", "field_extent": "UCNG classification", "field_review": "Human review", "field_activities": "Role / activity", "field_subject": "URL of declared content", "field_language": "Declaration language",
|
||
"declaration_eyebrow": "UCNG Declaration", "fact_component": "Content", "fact_extent": "UCNG classification", "fact_activities": "Role / activity", "fact_review": "Human review", "fact_subject": "Declared content", "fact_assurance": "Declaration status", "field_assurance": "Declaration status",
|
||
"transparency_label": "About this declaration:", "transparency_text": "This UCNG Declaration describes the declared creation and transformation process of the content. It does not judge truth or quality and does not by itself establish legal compliance, authenticity, accuracy or verification.",
|
||
"manifest": "Machine-readable declaration", "ai_label": "UCNG",
|
||
"api_badge_title": "UCNG badge", "api_badge_desc": "The badge is the compact representation of a UCNG Declaration. It indicates that a declaration exists; it does not automatically mean verified, certified or legally compliant.",
|
||
"api_manifest_title": "Machine layer", "api_manifest_desc": "The structured JSON-LD representation carries the same declaration data in a machine-readable form for platforms, systems and build workflows.",
|
||
"article_fields": "Content components", "article_help": "For each component, declare how it was created or transformed and what role AI played.", "article_title": "UCNG Content Declaration", "article_summary_heading": "Human-readable declaration", "article_table_heading": "Declaration details", "table_component": "Content", "table_extent": "UCNG classification", "table_activities": "Role / activity", "table_review": "Human review", "badge_article": "DECLARATION",
|
||
"component_text": "Text", "component_research": "Research", "component_cover_image": "Cover image", "component_images": "Images", "component_translation": "Translation", "component_audio": "Audio", "component_video": "Video", "component_code": "Code", "regulatory_api_label": "Regulatory context API",
|
||
"article50_section_title": "Optional regulatory context (EU AI Act, Article 50)", "article50_section_intro": "These optional fields record facts that may be relevant to Article 50 transparency obligations. They are technical decision support, not the core UCNG claim and not legal advice.",
|
||
"assessment_heading": "Regulatory context", "assessment_disclaimer": "Non-binding technical decision support. A UCNG Declaration is not a finding of legal compliance.", "assessment_not_assessed_text": "The UCNG Declaration contains no additional Article 50 regulatory context.", "badge_article50_deepfake": "AI TRANSFORMED", "badge_article50_text": "AI GENERATED",
|
||
"bulk_meta_description": "Batch processing for structured UCNG content declarations.", "bulk_title": "Many items. One common declaration language.", "bulk_intro": "Generate structured UCNG Declarations for complete content inventories. Apply one shared profile to many URLs or process individual records as JSON.", "bulk_workspace_intro": "Paste content line by line and define its shared creation context once. Records that differ can be processed through advanced JSON mode.", "bulk_profile_title": "Shared declaration profile", "bulk_article50_title": "Optional regulatory context / Article 50", "bulk_link_declaration": "UCNG Declaration",
|
||
},
|
||
presets: map[string]PresetText{
|
||
"no-ai": {"HUMAN", "The substantial content was created by a human. Ordinary technical tools and non-generative standard editing do not automatically change this classification."},
|
||
"research": {"AI ASSISTED", "AI was used to assist research or source discovery. The substantial creative or editorial content remained human-created and human-responsible."},
|
||
"summary": {"AI ASSISTED", "AI was used to assist with summarising source material. Selection, contextual assessment and the final version remained under human responsibility."},
|
||
"full": {"AI GENERATED", "The substantial content was generated by a generative AI system. Any documented human review is stated separately."},
|
||
},
|
||
extents: map[string]string{"none": "HUMAN", "assisted": "AI ASSISTED", "partial": "MIXED · partly generated", "mostly": "AI GENERATED · mostly", "full": "AI GENERATED"},
|
||
assurances: map[string]string{"selfDeclared": "Declared", "technicallyRecorded": "Declared · technically recorded", "signed": "Declared · signed", "verified": "Verified"},
|
||
},
|
||
}
|
||
|
||
// Localised UI copy. The UCNG class names remain English by design so the
|
||
// compact labels travel consistently across languages.
|
||
local := map[string]brandCopy{
|
||
"fr": {text: map[string]string{"meta_description": "UCNG est un cadre de notation ouvert pour des déclarations de contenu transparentes, lisibles par l’humain et la machine.", "standard_eyebrow": "UCNG · Universal Content Notation Guidelines", "hero_title": "Declare how content was made.", "hero_lead": "UCNG fournit un langage commun pour déclarer comment un contenu numérique a été créé ou transformé, lisible par les personnes et par les machines.", "generator_eyebrow": "UCNG Declaration", "generator_title": "Créer une déclaration de contenu", "generator_intro": "Décrivez le contexte de création par composant, y compris le rôle de l’IA, sans juger la qualité ni la véracité du contenu.", "field_extent": "Classification UCNG", "fact_extent": "Classification UCNG", "table_extent": "Classification UCNG", "field_subject": "URL du contenu déclaré", "fact_subject": "Contenu déclaré", "declaration_eyebrow": "UCNG Declaration", "transparency_label": "À propos de cette déclaration :", "transparency_text": "Cette UCNG Declaration décrit le processus déclaré de création et de transformation du contenu. Elle ne constitue pas à elle seule une vérification, une certification, une preuve d’authenticité, d’exactitude, de vérité ou de conformité juridique.", "ai_label": "UCNG", "article_title": "UCNG Content Declaration", "article_summary_heading": "Déclaration lisible par l’humain", "article_table_heading": "Détails de la déclaration", "badge_article": "DECLARATION", "assessment_heading": "Contexte réglementaire", "component_text": "Texte", "component_research": "Recherche", "component_cover_image": "Image de couverture", "component_images": "Images", "component_translation": "Traduction", "component_audio": "Audio", "component_video": "Vidéo", "component_code": "Code", "regulatory_api_label": "API de contexte réglementaire"}, presets: map[string]PresetText{"no-ai": {"HUMAN", "Le contenu substantiel a été créé par une personne."}, "research": {"AI ASSISTED", "L’IA a été utilisée comme assistance à la recherche; le contenu substantiel reste d’origine humaine."}, "summary": {"AI ASSISTED", "L’IA a assisté la synthèse; la sélection et la version finale restent sous responsabilité humaine."}, "full": {"AI GENERATED", "Le contenu substantiel a été produit par un système d’IA générative; le contrôle humain est indiqué séparément."}}, extents: map[string]string{"none": "HUMAN", "assisted": "AI ASSISTED", "partial": "MIXED · partiellement généré", "mostly": "AI GENERATED · majoritairement", "full": "AI GENERATED"}, assurances: map[string]string{"selfDeclared": "Declared", "technicallyRecorded": "Declared · enregistré techniquement", "signed": "Declared · signé", "verified": "Verified"}},
|
||
"es": {text: map[string]string{"meta_description": "UCNG es un marco abierto de notación para declaraciones de contenido transparentes, legibles por personas y máquinas.", "standard_eyebrow": "UCNG · Universal Content Notation Guidelines", "hero_title": "Declare how content was made.", "hero_lead": "UCNG ofrece un lenguaje común para declarar cómo se creó o transformó contenido digital, comprensible para personas y legible por máquinas.", "generator_eyebrow": "UCNG Declaration", "generator_title": "Crear una declaración de contenido", "generator_intro": "Describe el contexto de creación por componente, incluido el papel de la IA, sin juzgar la calidad ni la veracidad del contenido.", "field_extent": "Clasificación UCNG", "fact_extent": "Clasificación UCNG", "table_extent": "Clasificación UCNG", "field_subject": "URL del contenido declarado", "fact_subject": "Contenido declarado", "declaration_eyebrow": "UCNG Declaration", "transparency_label": "Sobre esta declaración:", "transparency_text": "Esta UCNG Declaration describe el proceso declarado de creación y transformación del contenido. Por sí sola no establece verificación, certificación, autenticidad, exactitud, veracidad ni cumplimiento legal.", "ai_label": "UCNG", "article_title": "UCNG Content Declaration", "article_summary_heading": "Declaración legible por personas", "article_table_heading": "Detalles de la declaración", "badge_article": "DECLARATION", "assessment_heading": "Contexto regulatorio", "component_text": "Texto", "component_research": "Investigación", "component_cover_image": "Imagen de portada", "component_images": "Imágenes", "component_translation": "Traducción", "component_audio": "Audio", "component_video": "Vídeo", "component_code": "Código", "regulatory_api_label": "API de contexto regulatorio"}, presets: map[string]PresetText{"no-ai": {"HUMAN", "El contenido sustancial fue creado por una persona."}, "research": {"AI ASSISTED", "La IA se utilizó como apoyo a la investigación; el contenido sustancial sigue siendo de origen humano."}, "summary": {"AI ASSISTED", "La IA ayudó a resumir material; la selección y la versión final permanecen bajo responsabilidad humana."}, "full": {"AI GENERATED", "El contenido sustancial fue generado por un sistema de IA generativa; la revisión humana se indica por separado."}}, extents: map[string]string{"none": "HUMAN", "assisted": "AI ASSISTED", "partial": "MIXED · parcialmente generado", "mostly": "AI GENERATED · mayoritariamente", "full": "AI GENERATED"}, assurances: map[string]string{"selfDeclared": "Declared", "technicallyRecorded": "Declared · registrado técnicamente", "signed": "Declared · firmado", "verified": "Verified"}},
|
||
"it": {text: map[string]string{"meta_description": "UCNG è un framework di notazione aperto per dichiarazioni trasparenti, leggibili da persone e macchine.", "standard_eyebrow": "UCNG · Universal Content Notation Guidelines", "hero_title": "Declare how content was made.", "hero_lead": "UCNG offre un linguaggio comune per dichiarare come i contenuti digitali sono stati creati o trasformati, comprensibile alle persone e leggibile dalle macchine.", "generator_eyebrow": "UCNG Declaration", "generator_title": "Crea una dichiarazione del contenuto", "generator_intro": "Descrivi il contesto di creazione per componente, incluso il ruolo dell’IA, senza giudicare qualità o veridicità del contenuto.", "field_extent": "Classificazione UCNG", "fact_extent": "Classificazione UCNG", "table_extent": "Classificazione UCNG", "field_subject": "URL del contenuto dichiarato", "fact_subject": "Contenuto dichiarato", "declaration_eyebrow": "UCNG Declaration", "transparency_label": "Informazioni sulla dichiarazione:", "transparency_text": "Questa UCNG Declaration descrive il processo dichiarato di creazione e trasformazione del contenuto. Da sola non stabilisce verifica, certificazione, autenticità, accuratezza, veridicità o conformità legale.", "ai_label": "UCNG", "article_title": "UCNG Content Declaration", "article_summary_heading": "Dichiarazione leggibile", "article_table_heading": "Dettagli della dichiarazione", "badge_article": "DECLARATION", "assessment_heading": "Contesto normativo", "component_text": "Testo", "component_research": "Ricerca", "component_cover_image": "Immagine di copertina", "component_images": "Immagini", "component_translation": "Traduzione", "component_audio": "Audio", "component_video": "Video", "component_code": "Codice", "regulatory_api_label": "API del contesto normativo"}, presets: map[string]PresetText{"no-ai": {"HUMAN", "Il contenuto sostanziale è stato creato da una persona."}, "research": {"AI ASSISTED", "L’IA è stata usata come supporto alla ricerca; il contenuto sostanziale resta di origine umana."}, "summary": {"AI ASSISTED", "L’IA ha assistito la sintesi; selezione e versione finale restano sotto responsabilità umana."}, "full": {"AI GENERATED", "Il contenuto sostanziale è stato generato da un sistema di IA generativa; la revisione umana è indicata separatamente."}}, extents: map[string]string{"none": "HUMAN", "assisted": "AI ASSISTED", "partial": "MIXED · parzialmente generato", "mostly": "AI GENERATED · prevalentemente", "full": "AI GENERATED"}, assurances: map[string]string{"selfDeclared": "Declared", "technicallyRecorded": "Declared · registrato tecnicamente", "signed": "Declared · firmato", "verified": "Verified"}},
|
||
"nl": {text: map[string]string{"meta_description": "UCNG is een open notatiekader voor transparante contentdeclaraties die leesbaar zijn voor mensen en machines.", "standard_eyebrow": "UCNG · Universal Content Notation Guidelines", "hero_title": "Declare how content was made.", "hero_lead": "UCNG biedt een gemeenschappelijke taal om te verklaren hoe digitale inhoud is gemaakt of getransformeerd, leesbaar voor mensen en machines.", "generator_eyebrow": "UCNG Declaration", "generator_title": "Maak een contentdeclaratie", "generator_intro": "Beschrijf de creatiecontext per onderdeel, inclusief de rol van AI, zonder kwaliteit of waarheid van de inhoud te beoordelen.", "field_extent": "UCNG-classificatie", "fact_extent": "UCNG-classificatie", "table_extent": "UCNG-classificatie", "field_subject": "URL van gedeclareerde inhoud", "fact_subject": "Gedeclareerde inhoud", "declaration_eyebrow": "UCNG Declaration", "transparency_label": "Over deze declaratie:", "transparency_text": "Deze UCNG Declaration beschrijft het gedeclareerde creatie- en transformatieproces. Zij stelt op zichzelf geen verificatie, certificering, authenticiteit, nauwkeurigheid, waarheid of juridische naleving vast.", "ai_label": "UCNG", "article_title": "UCNG Content Declaration", "article_summary_heading": "Menselijk leesbare declaratie", "article_table_heading": "Declaratiedetails", "badge_article": "DECLARATION", "assessment_heading": "Regelgevingscontext", "component_text": "Tekst", "component_research": "Onderzoek", "component_cover_image": "Omslagafbeelding", "component_images": "Afbeeldingen", "component_translation": "Vertaling", "component_audio": "Audio", "component_video": "Video", "component_code": "Code", "regulatory_api_label": "API voor regelgevingscontext"}, presets: map[string]PresetText{"no-ai": {"HUMAN", "De wezenlijke inhoud is door een mens gemaakt."}, "research": {"AI ASSISTED", "AI is gebruikt als onderzoeksondersteuning; de wezenlijke inhoud blijft van menselijke oorsprong."}, "summary": {"AI ASSISTED", "AI hielp bij samenvatten; selectie en eindversie blijven onder menselijke verantwoordelijkheid."}, "full": {"AI GENERATED", "De wezenlijke inhoud is gegenereerd door een generatief AI-systeem; menselijke beoordeling wordt afzonderlijk vermeld."}}, extents: map[string]string{"none": "HUMAN", "assisted": "AI ASSISTED", "partial": "MIXED · gedeeltelijk gegenereerd", "mostly": "AI GENERATED · grotendeels", "full": "AI GENERATED"}, assurances: map[string]string{"selfDeclared": "Declared", "technicallyRecorded": "Declared · technisch vastgelegd", "signed": "Declared · ondertekend", "verified": "Verified"}},
|
||
"pt": {text: map[string]string{"meta_description": "UCNG é um quadro aberto de notação para declarações transparentes, legíveis por pessoas e máquinas.", "standard_eyebrow": "UCNG · Universal Content Notation Guidelines", "hero_title": "Declare how content was made.", "hero_lead": "UCNG oferece uma linguagem comum para declarar como conteúdos digitais foram criados ou transformados, compreensível para pessoas e legível por máquinas.", "generator_eyebrow": "UCNG Declaration", "generator_title": "Criar uma declaração de conteúdo", "generator_intro": "Descreva o contexto de criação por componente, incluindo o papel da IA, sem avaliar a qualidade ou a veracidade do conteúdo.", "field_extent": "Classificação UCNG", "fact_extent": "Classificação UCNG", "table_extent": "Classificação UCNG", "field_subject": "URL do conteúdo declarado", "fact_subject": "Conteúdo declarado", "declaration_eyebrow": "UCNG Declaration", "transparency_label": "Sobre esta declaração:", "transparency_text": "Esta UCNG Declaration descreve o processo declarado de criação e transformação do conteúdo. Por si só, não estabelece verificação, certificação, autenticidade, exatidão, veracidade ou conformidade legal.", "ai_label": "UCNG", "article_title": "UCNG Content Declaration", "article_summary_heading": "Declaração legível por pessoas", "article_table_heading": "Detalhes da declaração", "badge_article": "DECLARATION", "assessment_heading": "Contexto regulamentar", "component_text": "Texto", "component_research": "Pesquisa", "component_cover_image": "Imagem de capa", "component_images": "Imagens", "component_translation": "Tradução", "component_audio": "Áudio", "component_video": "Vídeo", "component_code": "Código", "regulatory_api_label": "API de contexto regulamentar"}, presets: map[string]PresetText{"no-ai": {"HUMAN", "O conteúdo substancial foi criado por uma pessoa."}, "research": {"AI ASSISTED", "A IA foi usada para apoiar a pesquisa; o conteúdo substancial continua a ser de origem humana."}, "summary": {"AI ASSISTED", "A IA ajudou a resumir material; a seleção e a versão final permanecem sob responsabilidade humana."}, "full": {"AI GENERATED", "O conteúdo substancial foi gerado por um sistema de IA generativa; a revisão humana é indicada separadamente."}}, extents: map[string]string{"none": "HUMAN", "assisted": "AI ASSISTED", "partial": "MIXED · parcialmente gerado", "mostly": "AI GENERATED · maioritariamente", "full": "AI GENERATED"}, assurances: map[string]string{"selfDeclared": "Declared", "technicallyRecorded": "Declared · registado tecnicamente", "signed": "Declared · assinado", "verified": "Verified"}},
|
||
"pl": {text: map[string]string{"meta_description": "UCNG to otwarte ramy notacji dla przejrzystych deklaracji treści czytelnych dla ludzi i maszyn.", "standard_eyebrow": "UCNG · Universal Content Notation Guidelines", "hero_title": "Declare how content was made.", "hero_lead": "UCNG zapewnia wspólny język do deklarowania, jak treści cyfrowe zostały utworzone lub przekształcone, czytelny dla ludzi i maszyn.", "generator_eyebrow": "UCNG Declaration", "generator_title": "Utwórz deklarację treści", "generator_intro": "Opisz kontekst tworzenia według elementów, w tym rolę AI, bez oceniania jakości ani prawdziwości treści.", "field_extent": "Klasyfikacja UCNG", "fact_extent": "Klasyfikacja UCNG", "table_extent": "Klasyfikacja UCNG", "field_subject": "URL zadeklarowanej treści", "fact_subject": "Zadeklarowana treść", "declaration_eyebrow": "UCNG Declaration", "transparency_label": "O tej deklaracji:", "transparency_text": "Ta UCNG Declaration opisuje zadeklarowany proces tworzenia i przekształcania treści. Sama w sobie nie stanowi weryfikacji, certyfikacji, potwierdzenia autentyczności, dokładności, prawdziwości ani zgodności prawnej.", "ai_label": "UCNG", "article_title": "UCNG Content Declaration", "article_summary_heading": "Deklaracja czytelna dla człowieka", "article_table_heading": "Szczegóły deklaracji", "badge_article": "DECLARATION", "assessment_heading": "Kontekst regulacyjny", "component_text": "Tekst", "component_research": "Badania", "component_cover_image": "Obraz okładkowy", "component_images": "Obrazy", "component_translation": "Tłumaczenie", "component_audio": "Audio", "component_video": "Wideo", "component_code": "Kod", "regulatory_api_label": "API kontekstu regulacyjnego"}, presets: map[string]PresetText{"no-ai": {"HUMAN", "Zasadnicza treść została utworzona przez człowieka."}, "research": {"AI ASSISTED", "AI wykorzystano do wsparcia badań; zasadnicza treść pozostaje pochodzenia ludzkiego."}, "summary": {"AI ASSISTED", "AI wspomagała streszczanie; wybór i wersja końcowa pozostają pod odpowiedzialnością człowieka."}, "full": {"AI GENERATED", "Zasadnicza treść została wygenerowana przez generatywny system AI; przegląd człowieka jest wskazywany oddzielnie."}}, extents: map[string]string{"none": "HUMAN", "assisted": "AI ASSISTED", "partial": "MIXED · częściowo wygenerowane", "mostly": "AI GENERATED · w większości", "full": "AI GENERATED"}, assurances: map[string]string{"selfDeclared": "Declared", "technicallyRecorded": "Declared · zapisane technicznie", "signed": "Declared · podpisane", "verified": "Verified"}},
|
||
}
|
||
for code, v := range local {
|
||
copies[code] = v
|
||
}
|
||
|
||
for code, copy := range copies {
|
||
l := catalogs[code]
|
||
for key, value := range copy.text {
|
||
l.Text[key] = value
|
||
}
|
||
for key, value := range copy.presets {
|
||
l.Presets[key] = value
|
||
}
|
||
for key, value := range copy.extents {
|
||
l.Extents[key] = value
|
||
}
|
||
for key, value := range copy.assurances {
|
||
l.Assurances[key] = value
|
||
}
|
||
catalogs[code] = l
|
||
}
|
||
|
||
// Additional status copy used by the human-readable declaration.
|
||
statusText := map[string]map[string]string{
|
||
"de": {
|
||
"assurance_selfDeclared_description": "Declared: Die Angaben wurden von der veröffentlichenden Person oder Organisation deklariert; eine unabhängige Prüfung ist damit nicht verbunden.",
|
||
"assurance_technicallyRecorded_description": "Declared: Die Angaben werden zusätzlich im Erstellungs- oder Veröffentlichungsprozess technisch protokolliert. Das ist noch keine Verifikation.",
|
||
"assurance_signed_description": "Declared: Die Declaration ist digital signiert. Eine Signatur kann Herkunft und Unverändertheit der Declaration absichern, nicht automatisch die Richtigkeit des Inhalts.",
|
||
"assurance_verified_description": "Verified: Bestimmte Angaben der Declaration wurden nach einem dokumentierten technischen oder organisatorischen Prüfverfahren zusätzlich überprüft.",
|
||
"assurance_selfDeclared_statement": "Status: Declared. Die Angaben wurden von der veröffentlichenden Person oder Organisation bereitgestellt.",
|
||
"assurance_technicallyRecorded_statement": "Status: Declared; die Angaben sind zusätzlich technisch protokolliert. Daraus folgt keine automatische Verifikation.",
|
||
"assurance_signed_statement": "Status: Declared; die Declaration ist digital signiert, sodass Herkunft und Unverändertheit der Declaration geprüft werden können.",
|
||
"assurance_verified_statement": "Status: Verified. Bestimmte Angaben wurden nach einem dokumentierten Prüfverfahren zusätzlich überprüft.",
|
||
},
|
||
"en": {
|
||
"assurance_selfDeclared_description": "Declared: the information was declared by the publishing person or organisation; this does not include independent verification.",
|
||
"assurance_technicallyRecorded_description": "Declared: the information is also technically recorded during the creation or publication workflow. This is not verification by itself.",
|
||
"assurance_signed_description": "Declared: the declaration is digitally signed. A signature can protect the declaration's origin and integrity, not automatically the accuracy of the content.",
|
||
"assurance_verified_description": "Verified: specified declaration data has been additionally checked under a documented technical or organisational procedure.",
|
||
"assurance_selfDeclared_statement": "Status: Declared. The information was supplied by the publishing person or organisation.",
|
||
"assurance_technicallyRecorded_statement": "Status: Declared; the information is also technically recorded. This does not automatically constitute verification.",
|
||
"assurance_signed_statement": "Status: Declared; the declaration is digitally signed so that its origin and integrity can be checked.",
|
||
"assurance_verified_statement": "Status: Verified. Specified information was additionally checked under a documented procedure.",
|
||
},
|
||
}
|
||
for code, values := range statusText {
|
||
l := catalogs[code]
|
||
for key, value := range values {
|
||
l.Text[key] = value
|
||
}
|
||
catalogs[code] = l
|
||
}
|
||
|
||
localizedExtras := map[string]map[string]string{
|
||
"fr": {
|
||
"field_assurance": "Statut de la déclaration", "fact_assurance": "Statut de la déclaration",
|
||
"bulk_title": "Plusieurs contenus. Un langage de déclaration commun.",
|
||
"bulk_intro": "Générez des UCNG Declarations structurées pour des ensembles complets de contenus.",
|
||
"bulk_workspace_intro": "Ajoutez les contenus ligne par ligne et définissez une seule fois leur contexte de création commun.",
|
||
"bulk_profile_title": "Profil de déclaration commun", "bulk_link_declaration": "UCNG Declaration",
|
||
},
|
||
"es": {
|
||
"field_assurance": "Estado de la declaración", "fact_assurance": "Estado de la declaración",
|
||
"bulk_title": "Muchos contenidos. Un lenguaje común de declaración.",
|
||
"bulk_intro": "Genera UCNG Declarations estructuradas para conjuntos completos de contenidos.",
|
||
"bulk_workspace_intro": "Añade contenidos línea por línea y define una sola vez su contexto común de creación.",
|
||
"bulk_profile_title": "Perfil común de declaración", "bulk_link_declaration": "UCNG Declaration",
|
||
},
|
||
"it": {
|
||
"field_assurance": "Stato della dichiarazione", "fact_assurance": "Stato della dichiarazione",
|
||
"bulk_title": "Molti contenuti. Un linguaggio comune di dichiarazione.",
|
||
"bulk_intro": "Genera UCNG Declarations strutturate per interi insiemi di contenuti.",
|
||
"bulk_workspace_intro": "Aggiungi i contenuti riga per riga e definisci una sola volta il loro contesto di creazione comune.",
|
||
"bulk_profile_title": "Profilo di dichiarazione comune", "bulk_link_declaration": "UCNG Declaration",
|
||
},
|
||
"nl": {
|
||
"field_assurance": "Declaratiestatus", "fact_assurance": "Declaratiestatus",
|
||
"bulk_title": "Veel content. Eén gemeenschappelijke declaratietaal.",
|
||
"bulk_intro": "Maak gestructureerde UCNG Declarations voor complete contentverzamelingen.",
|
||
"bulk_workspace_intro": "Voeg content regel voor regel toe en leg de gemeenschappelijke creatiecontext één keer vast.",
|
||
"bulk_profile_title": "Gemeenschappelijk declaratieprofiel", "bulk_link_declaration": "UCNG Declaration",
|
||
},
|
||
"pt": {
|
||
"field_assurance": "Estado da declaração", "fact_assurance": "Estado da declaração",
|
||
"bulk_title": "Muitos conteúdos. Uma linguagem comum de declaração.",
|
||
"bulk_intro": "Gere UCNG Declarations estruturadas para conjuntos completos de conteúdos.",
|
||
"bulk_workspace_intro": "Adicione conteúdos linha a linha e defina uma vez o contexto de criação comum.",
|
||
"bulk_profile_title": "Perfil comum de declaração", "bulk_link_declaration": "UCNG Declaration",
|
||
},
|
||
"pl": {
|
||
"field_assurance": "Status deklaracji", "fact_assurance": "Status deklaracji",
|
||
"bulk_title": "Wiele treści. Jeden wspólny język deklaracji.",
|
||
"bulk_intro": "Twórz ustrukturyzowane UCNG Declarations dla całych zbiorów treści.",
|
||
"bulk_workspace_intro": "Dodawaj treści wiersz po wierszu i raz określ ich wspólny kontekst tworzenia.",
|
||
"bulk_profile_title": "Wspólny profil deklaracji", "bulk_link_declaration": "UCNG Declaration",
|
||
},
|
||
}
|
||
for code, values := range localizedExtras {
|
||
l := catalogs[code]
|
||
for key, value := range values {
|
||
l.Text[key] = value
|
||
}
|
||
catalogs[code] = l
|
||
}
|
||
}
|
||
|
||
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
|
||
}
|