All checks were successful
release-tag / release-image (push) Successful in 1m52s
617 lines
70 KiB
Go
617 lines
70 KiB
Go
package marketing
|
||
|
||
import "strings"
|
||
|
||
type Feature struct {
|
||
Kicker string
|
||
Title string
|
||
Description string
|
||
}
|
||
|
||
type ComparisonRow struct {
|
||
Feature string
|
||
Community string
|
||
Pro string
|
||
}
|
||
|
||
type Plan struct {
|
||
Name string
|
||
Price string
|
||
Period string
|
||
Description string
|
||
Features []string
|
||
CTA string
|
||
URL string
|
||
Featured bool
|
||
}
|
||
|
||
type InstallMethod struct {
|
||
ID string
|
||
Title string
|
||
Summary string
|
||
Code string
|
||
}
|
||
|
||
type ConfigRow struct {
|
||
Name string
|
||
Default string
|
||
Description string
|
||
}
|
||
|
||
type FAQ struct {
|
||
Question string
|
||
Answer string
|
||
}
|
||
|
||
type Page struct {
|
||
MetaDescription string
|
||
GeneratorURL string
|
||
NavFeatures string
|
||
NavPricing string
|
||
NavInstall string
|
||
NavGenerator string
|
||
NavBackground string
|
||
LanguageLabel string
|
||
HeroEyebrow string
|
||
HeroTitle string
|
||
HeroLead string
|
||
PrimaryCTA string
|
||
SecondaryCTA string
|
||
Proof []string
|
||
FeaturesEyebrow string
|
||
FeaturesTitle string
|
||
FeaturesLead string
|
||
Features []Feature
|
||
InstallEyebrow string
|
||
InstallTitle string
|
||
InstallLead string
|
||
InstallMethods []InstallMethod
|
||
CopyLabel string
|
||
CopiedLabel string
|
||
ConfigTitle string
|
||
ConfigVariable string
|
||
ConfigDefault string
|
||
ConfigMeaning string
|
||
Config []ConfigRow
|
||
FAQEyebrow string
|
||
FAQTitle string
|
||
FAQs []FAQ
|
||
FinalTitle string
|
||
FinalLead string
|
||
FinalPrimary string
|
||
FinalSecondary string
|
||
Footer string
|
||
}
|
||
|
||
type copySet struct {
|
||
MetaDescription string
|
||
NavFeatures, NavPricing, NavInstall, NavGenerator, NavBackground, LanguageLabel string
|
||
HeroEyebrow, HeroTitle, HeroLead, PrimaryCTA, SecondaryCTA string
|
||
Proof []string
|
||
FeaturesEyebrow, FeaturesTitle, FeaturesLead string
|
||
Features []Feature
|
||
CompareEyebrow, CompareTitle, CompareLead, CompareFeature, CompareCommunity, ComparePro string
|
||
Comparison []ComparisonRow
|
||
PricingEyebrow, PricingTitle, PricingLead, PricePeriod, PriceNote string
|
||
PlanDescriptions [5]string
|
||
PlanFeatures [5][]string
|
||
PlanCTA [5]string
|
||
InstallEyebrow, InstallTitle, InstallLead, CopyLabel, CopiedLabel string
|
||
InstallTitles [5]string
|
||
InstallSummaries [5]string
|
||
ConfigTitle, ConfigVariable, ConfigDefault, ConfigMeaning string
|
||
ConfigDescriptions [8]string
|
||
FAQEyebrow, FAQTitle string
|
||
FAQs []FAQ
|
||
FinalTitle, FinalLead, FinalPrimary, FinalSecondary, Footer string
|
||
EnterprisePrice string
|
||
}
|
||
|
||
func Build(lang, productName, baseURL, contactURL string) Page {
|
||
lang = normalize(lang)
|
||
copy := copies()[lang]
|
||
if copy.HeroTitle == "" {
|
||
lang = "en"
|
||
copy = copies()[lang]
|
||
}
|
||
copy = neutralize(copy, lang)
|
||
baseURL = strings.TrimRight(baseURL, "/")
|
||
if contactURL == "" {
|
||
contactURL = baseURL + "/?lang=" + lang
|
||
}
|
||
|
||
generatorURL := baseURL + "/?lang=" + lang + "#generator"
|
||
install := []InstallMethod{
|
||
{ID: "compose", Title: copy.InstallTitles[0], Summary: copy.InstallSummaries[0], Code: `cp .env.example .env
|
||
# Adjust BASE_URL and PUBLIC_NAME in .env
|
||
docker compose up -d --build
|
||
curl -fsS http://localhost:8080/readyz`},
|
||
{ID: "docker", Title: copy.InstallTitles[1], Summary: copy.InstallSummaries[1], Code: `docker build -t ai-disclosure-standard:2.0.2 .
|
||
docker run -d --name ai-disclosure \
|
||
-p 8080:8080 \
|
||
-e BASE_URL=https://ai.example.org \
|
||
-e PUBLIC_NAME="UCNG" \
|
||
--read-only --tmpfs /tmp \
|
||
ai-disclosure-standard:2.0.2`},
|
||
{ID: "kubernetes", Title: copy.InstallTitles[2], Summary: copy.InstallSummaries[2], Code: `# Image, domain and TLS secret in deploy/kubernetes.yaml ersetzen
|
||
kubectl apply -f deploy/kubernetes.yaml
|
||
kubectl rollout status deployment/ai-disclosure
|
||
|
||
# Licensed bulk service (optional)
|
||
kubectl apply -f deploy/kubernetes-bulk.yaml`},
|
||
{ID: "swarm", Title: copy.InstallTitles[3], Summary: copy.InstallSummaries[3], Code: `docker swarm init
|
||
docker stack deploy -c deploy/swarm-stack.yaml ai-disclosure
|
||
# Optional licensed bulk deployment: deploy/swarm-bulk-stack.yaml`},
|
||
{ID: "go", Title: copy.InstallTitles[4], Summary: copy.InstallSummaries[4], Code: `go test ./...
|
||
go build -trimpath -o bin/server ./cmd/server
|
||
BASE_URL=http://localhost:8080 \
|
||
PUBLIC_NAME="UCNG" \
|
||
./bin/server`},
|
||
}
|
||
|
||
configNames := []string{"LISTEN_ADDRESS", "BASE_URL", "PUBLIC_NAME", "CONTACT_URL", "DEFAULT_LANGUAGE", "SERVICE_MODE", "LICENSE_TOKEN", "LICENSE_MODE", "LICENSE_SERVER_URL", "API_ALLOWED_ORIGIN"}
|
||
configDefaults := []string{":8080", "http://localhost:8080", productName, contactURL, "de", "full", "–", "offline", "–", "*"}
|
||
configDescriptions := configurationDescriptions(lang)
|
||
configRows := make([]ConfigRow, 0, len(configNames))
|
||
for i := range configNames {
|
||
description := ""
|
||
if i < len(configDescriptions) {
|
||
description = configDescriptions[i]
|
||
}
|
||
configRows = append(configRows, ConfigRow{Name: configNames[i], Default: configDefaults[i], Description: description})
|
||
}
|
||
|
||
return Page{
|
||
MetaDescription: copy.MetaDescription, GeneratorURL: generatorURL,
|
||
NavFeatures: copy.NavFeatures, NavInstall: copy.NavInstall, NavGenerator: copy.NavGenerator, NavBackground: copy.NavBackground, LanguageLabel: copy.LanguageLabel,
|
||
HeroEyebrow: copy.HeroEyebrow, HeroTitle: copy.HeroTitle, HeroLead: copy.HeroLead, PrimaryCTA: copy.PrimaryCTA, SecondaryCTA: copy.SecondaryCTA, Proof: copy.Proof,
|
||
FeaturesEyebrow: copy.FeaturesEyebrow, FeaturesTitle: copy.FeaturesTitle, FeaturesLead: copy.FeaturesLead, Features: copy.Features,
|
||
InstallEyebrow: copy.InstallEyebrow, InstallTitle: copy.InstallTitle, InstallLead: copy.InstallLead, InstallMethods: install, CopyLabel: copy.CopyLabel, CopiedLabel: copy.CopiedLabel,
|
||
ConfigTitle: copy.ConfigTitle, ConfigVariable: copy.ConfigVariable, ConfigDefault: copy.ConfigDefault, ConfigMeaning: copy.ConfigMeaning, Config: configRows,
|
||
FAQEyebrow: copy.FAQEyebrow, FAQTitle: copy.FAQTitle, FAQs: copy.FAQs,
|
||
FinalTitle: copy.FinalTitle, FinalLead: copy.FinalLead, FinalPrimary: copy.FinalPrimary, FinalSecondary: copy.FinalSecondary, Footer: copy.Footer,
|
||
}
|
||
}
|
||
|
||
func configurationDescriptions(lang string) []string {
|
||
values := map[string][]string{
|
||
"de": {"Bind-Adresse des HTTP-Servers.", "Öffentliche Basis-URL ohne abschließenden Slash.", "Produkt- oder Seitentitel.", "Optionale externe Kontakt- oder Projektseite.", "Rückfallsprache der Ausgabe.", "Betriebsmodus: full, api oder bulk.", "Vom Anbieter signierter Lizenz-Token.", "Mindestmodus: offline, hybrid oder online.", "Optionaler zentraler Prüfserver für Hybrid- und Online-Modus.", "Erlaubter CORS-Origin für API-Endpunkte; leer deaktiviert CORS."},
|
||
"en": {"HTTP server bind address.", "Public base URL without a trailing slash.", "Product or site title.", "Optional external contact or project page.", "Fallback output language.", "Runtime mode: full, api or bulk.", "Vendor-signed licence token.", "Minimum mode: offline, hybrid or online.", "Optional central verification server for hybrid and online mode.", "Allowed CORS origin for API endpoints; empty disables CORS."},
|
||
"fr": {"Adresse d’écoute du serveur HTTP.", "URL publique sans barre oblique finale.", "Nom du produit ou du site.", "Page externe facultative de contact ou de projet.", "Langue de secours.", "Mode d’exécution : full, api ou bulk.", "Jeton de licence signé par l’éditeur.", "Mode minimal : offline, hybrid ou online.", "Serveur central facultatif pour les modes hybride et en ligne.", "Origine CORS autorisée pour l’API ; vide désactive CORS."},
|
||
"es": {"Dirección de escucha del servidor HTTP.", "URL pública sin barra final.", "Nombre del producto o sitio.", "Página externa opcional de contacto o del proyecto.", "Idioma de reserva.", "Modo de ejecución: full, api o bulk.", "Token de licencia firmado por el proveedor.", "Modo mínimo: offline, hybrid u online.", "Servidor central opcional para los modos híbrido y en línea.", "Origen CORS permitido para la API; vacío desactiva CORS."},
|
||
"it": {"Indirizzo di ascolto del server HTTP.", "URL pubblica senza slash finale.", "Nome del prodotto o sito.", "Pagina esterna facoltativa di contatto o del progetto.", "Lingua di fallback.", "Modalità di esecuzione: full, api o bulk.", "Token di licenza firmato dal fornitore.", "Modalità minima: offline, hybrid o online.", "Server centrale opzionale per modalità ibrida e online.", "Origine CORS consentita per l’API; vuoto disabilita CORS."},
|
||
"nl": {"Luisteradres van de HTTP-server.", "Publieke basis-URL zonder afsluitende slash.", "Product- of sitenaam.", "Optionele externe contact- of projectpagina.", "Terugvaltaal.", "Uitvoermodus: full, api of bulk.", "Door de leverancier ondertekend licentietoken.", "Minimale modus: offline, hybrid of online.", "Optionele centrale controleserver voor hybride en online modus.", "Toegestane CORS-origin voor API-endpoints; leeg schakelt CORS uit."},
|
||
"pt": {"Endereço de escuta do servidor HTTP.", "URL pública sem barra final.", "Nome do produto ou site.", "Página externa opcional de contacto ou do projeto.", "Idioma de fallback.", "Modo de execução: full, api ou bulk.", "Token de licença assinado pelo fornecedor.", "Modo mínimo: offline, hybrid ou online.", "Servidor central opcional para os modos híbrido e online.", "Origem CORS permitida para a API; vazio desativa CORS."},
|
||
"pl": {"Adres nasłuchiwania serwera HTTP.", "Publiczny bazowy URL bez końcowego ukośnika.", "Nazwa produktu lub witryny.", "Opcjonalna zewnętrzna strona kontaktowa lub projektu.", "Język zapasowy.", "Tryb pracy: full, api lub bulk.", "Token licencji podpisany przez dostawcę.", "Minimalny tryb: offline, hybrid lub online.", "Opcjonalny centralny serwer weryfikacji dla trybu hybrydowego i online.", "Dozwolony origin CORS dla API; pusty wyłącza CORS."},
|
||
}
|
||
if descriptions, ok := values[normalize(lang)]; ok {
|
||
return descriptions
|
||
}
|
||
return values["en"]
|
||
}
|
||
|
||
func neutralize(c copySet, lang string) copySet {
|
||
// The public product page documents the open software only. Commercial
|
||
// pricing, edition comparisons and sales messaging intentionally stay out
|
||
// of the application UI.
|
||
if len(c.Features) > 4 {
|
||
c.Features = append(append([]Feature{}, c.Features[:4]...), c.Features[5:]...)
|
||
}
|
||
if len(c.FAQs) > 2 {
|
||
c.FAQs = c.FAQs[2:]
|
||
}
|
||
c.SecondaryCTA, c.FinalSecondary = "", ""
|
||
switch lang {
|
||
case "de":
|
||
c.MetaDescription = "Funktionen und Installation des offenen Standards für KI-Nutzungserklärungen."
|
||
c.HeroEyebrow = "Open Source · Selbst hostbar"
|
||
c.HeroLead = "Ein zustandsloser Go-Dienst für SVG-Badges, verständliche Erklärungseiten, JSON-LD und nicht bindende Artikel-50-Entscheidungsunterstützung – internationalisiert und für hochverfügbare Deployments ausgelegt."
|
||
c.FeaturesLead = "Sichtbare Hinweise, verständliche Zusammenfassungen und maschinenlesbare Deklarationen in einer schlanken Anwendung."
|
||
c.InstallLead = "Die offene Anwendung kann vollständig selbst gehostet werden; für lizenzierte Betriebsfunktionen stehen API-, Bulk- und Hybrid-Verifikationsmodi bereit."
|
||
c.FinalTitle = "Direkt mit einer eigenen Erklärung starten."
|
||
c.FinalLead = "Der Generator funktioniert ohne Registrierung, Cookies oder externe Ressourcen."
|
||
case "fr":
|
||
c.HeroEyebrow = "Open source · Auto-hébergeable"
|
||
c.FeaturesLead = "Badges visibles, résumés compréhensibles et déclarations lisibles par machine dans une application légère."
|
||
c.InstallLead = "Toutes les variantes utilisent le même binaire Go et fonctionnent sans service externe."
|
||
case "es":
|
||
c.HeroEyebrow = "Código abierto · Autoalojable"
|
||
c.FeaturesLead = "Avisos visibles, resúmenes comprensibles y declaraciones legibles por máquina en una aplicación ligera."
|
||
c.InstallLead = "Todas las variantes usan el mismo binario Go y funcionan sin servicios externos."
|
||
case "it":
|
||
c.HeroEyebrow = "Open source · Self-hosted"
|
||
c.FeaturesLead = "Avvisi visibili, riepiloghi comprensibili e dichiarazioni leggibili dalle macchine in un'applicazione leggera."
|
||
c.InstallLead = "Tutte le varianti usano lo stesso binario Go e funzionano senza servizi esterni."
|
||
case "nl":
|
||
c.HeroEyebrow = "Open source · Zelf te hosten"
|
||
c.FeaturesLead = "Zichtbare meldingen, begrijpelijke samenvattingen en machineleesbare verklaringen in één lichte toepassing."
|
||
c.InstallLead = "Alle varianten gebruiken dezelfde Go-binary en werken zonder externe diensten."
|
||
case "pt":
|
||
c.HeroEyebrow = "Código aberto · Autoalojado"
|
||
c.FeaturesLead = "Avisos visíveis, resumos compreensíveis e declarações legíveis por máquina numa aplicação leve."
|
||
c.InstallLead = "Todas as variantes usam o mesmo binário Go e funcionam sem serviços externos."
|
||
case "pl":
|
||
c.HeroEyebrow = "Open source · Samodzielny hosting"
|
||
c.FeaturesLead = "Widoczne oznaczenia, zrozumiałe podsumowania i deklaracje maszynowe w lekkiej aplikacji."
|
||
c.InstallLead = "Wszystkie warianty korzystają z tego samego pliku binarnego Go i działają bez usług zewnętrznych."
|
||
default:
|
||
c.HeroEyebrow = "Open source · Self-hostable"
|
||
c.FeaturesLead = "Visible notices, readable summaries, machine-readable declarations and non-binding Article 50 decision support in one lightweight application."
|
||
c.InstallLead = "Every deployment uses the same Go binary and can run without external services."
|
||
c.FinalTitle = "Start with your own declaration."
|
||
c.FinalLead = "The generator works without registration, cookies or external resources."
|
||
}
|
||
return applyUCNGPositioning(c, lang)
|
||
}
|
||
|
||
func applyUCNGPositioning(c copySet, lang string) copySet {
|
||
type localCopy struct {
|
||
meta, eyebrow, title, lead, primary, featuresEyebrow, featuresTitle, featuresLead, finalTitle, finalLead, finalPrimary, footer string
|
||
proof []string
|
||
features []Feature
|
||
faqs []FAQ
|
||
}
|
||
copies := map[string]localCopy{
|
||
"de": {
|
||
meta: "UCNG – offenes Notationssystem für transparente, menschen- und maschinenlesbare Content-Deklarationen.",
|
||
eyebrow: "UCNG · Open by design", title: "Declare how content was made.",
|
||
lead: "UCNG schafft eine gemeinsame Sprache dafür, wie digitale Inhalte entstanden oder verändert worden sind. Die Referenzimplementierung verbindet eine verständliche Declaration mit maschinenlesbaren Daten – plattform-, anbieter- und medienunabhängig.",
|
||
primary: "Declaration erstellen", proof: []string{"Human-readable", "Machine-readable", "Vendor-neutral", "Self-hostable"},
|
||
featuresEyebrow: "Content transparency", featuresTitle: "Eine Declaration. Zwei Zielgruppen.", featuresLead: "UCNG beschreibt Herkunft und Transformation. Es bewertet weder Wahrheit noch Qualität eines Inhalts.",
|
||
features: []Feature{
|
||
{"01", "Content needs context.", "Digitale Inhalte entstehen nicht mehr auf nur eine Weise. UCNG macht den deklarierten Entstehungskontext transportierbar."},
|
||
{"02", "Human-readable", "Kompakte Labels und verständliche Declaration-Seiten erklären den angegebenen Erstellungs- und Transformationsprozess."},
|
||
{"03", "Machine-readable", "Dieselben Angaben stehen strukturiert als JSON-LD zur Verfügung und können von Plattformen, Systemen und Build-Prozessen verarbeitet werden."},
|
||
{"04", "Simple labels. Detailed metadata.", "HUMAN, AI ASSISTED, MIXED und AI GENERATED geben eine kompakte Einordnung; Detailangaben dokumentieren Tätigkeit, Human Review und Declaration Status."},
|
||
{"Open", "Platform-independent", "Die Anwendung ist selbst hostbar und bindet die Declaration nicht an einen bestimmten Publisher, KI-Anbieter oder eine Plattform."},
|
||
{"Neutral", "Declaration ≠ Verification", "Ein UCNG Badge zeigt, dass eine Declaration vorhanden ist. Es bedeutet nicht automatisch verified, zertifiziert, wahr oder rechtskonform."},
|
||
{"Interoperabel", "Ein Format, mehrere Medien", "Text, Bild, Audio, Video, Code und mehr können in derselben Deklarationslogik beschrieben werden."},
|
||
},
|
||
faqs: []FAQ{
|
||
{"Bewertet UCNG, ob ein Inhalt wahr oder falsch ist?", "Nein. UCNG beschreibt den deklarierten Entstehungs- und Transformationsprozess. Ein UCNG Badge bedeutet nicht automatisch verified, zertifiziert, wahr oder rechtskonform."},
|
||
{"Ist UCNG ein offizielles System der Europäischen Union?", "Nein. UCNG ist als unabhängiges offenes Framework positioniert. Regulatorischer Kontext kann dokumentiert werden, ist aber nicht mit einer UCNG Declaration gleichzusetzen."},
|
||
},
|
||
finalTitle: "Content deserves context.", finalLead: "Erstelle eine UCNG Declaration und mache den angegebenen Entstehungskontext für Menschen und Maschinen lesbar.", finalPrimary: "Declaration erstellen", footer: "UCNG · Universal Content Notation Guidelines · An open notation framework for transparent content declarations.",
|
||
},
|
||
"en": {
|
||
meta: "UCNG – an open notation framework for transparent, human-readable and machine-readable content declarations.",
|
||
eyebrow: "UCNG · Open by design", title: "Declare how content was made.",
|
||
lead: "UCNG provides a common language for describing how digital content was created or transformed. The reference implementation combines a human-readable declaration with machine-readable data – independent of platform, vendor and medium.",
|
||
primary: "Create a declaration", proof: []string{"Human-readable", "Machine-readable", "Vendor-neutral", "Self-hostable"},
|
||
featuresEyebrow: "Content transparency", featuresTitle: "One declaration. Two audiences.", featuresLead: "UCNG describes origin and transformation. It does not judge the truth or quality of content.",
|
||
features: []Feature{
|
||
{"01", "Content needs context.", "Digital content is no longer created in one way. UCNG makes the declared creation context portable."},
|
||
{"02", "Human-readable", "Compact labels and readable declaration pages explain the stated creation and transformation process."},
|
||
{"03", "Machine-readable", "The same information is available as structured JSON-LD for platforms, systems and build workflows."},
|
||
{"04", "Simple labels. Detailed metadata.", "HUMAN, AI ASSISTED, MIXED and AI GENERATED provide a compact classification; details record activity, human review and declaration status."},
|
||
{"Open", "Platform-independent", "The application is self-hostable and does not bind a declaration to a particular publisher, AI vendor or platform."},
|
||
{"Neutral", "Declaration ≠ Verification", "A UCNG badge indicates that a declaration exists. It does not automatically mean verified, certified, true or legally compliant."},
|
||
{"Interoperable", "One model, multiple media", "Text, image, audio, video, code and more can be described using the same declaration logic."},
|
||
},
|
||
faqs: []FAQ{
|
||
{"Does UCNG decide whether content is true or false?", "No. UCNG describes the declared creation and transformation process. A UCNG badge does not automatically mean verified, certified, true or legally compliant."},
|
||
{"Is UCNG an official European Union system?", "No. UCNG is positioned as an independent open framework. Regulatory context can be documented, but it is not the same as a UCNG Declaration."},
|
||
},
|
||
finalTitle: "Content deserves context.", finalLead: "Create a UCNG Declaration and make the stated creation context readable to people and machines.", finalPrimary: "Create a declaration", footer: "UCNG · Universal Content Notation Guidelines · An open notation framework for transparent content declarations.",
|
||
},
|
||
}
|
||
if v, ok := copies[lang]; ok {
|
||
c.MetaDescription, c.HeroEyebrow, c.HeroTitle, c.HeroLead, c.PrimaryCTA = v.meta, v.eyebrow, v.title, v.lead, v.primary
|
||
c.Proof = v.proof
|
||
c.FeaturesEyebrow, c.FeaturesTitle, c.FeaturesLead, c.Features = v.featuresEyebrow, v.featuresTitle, v.featuresLead, v.features
|
||
c.FAQEyebrow, c.FAQTitle, c.FAQs = "FAQ", map[string]string{"de": "Häufige Fragen", "en": "Common questions"}[lang], v.faqs
|
||
c.FinalTitle, c.FinalLead, c.FinalPrimary, c.Footer = v.finalTitle, v.finalLead, v.finalPrimary, v.footer
|
||
return c
|
||
}
|
||
|
||
// Other supported UI languages retain their translated technical content,
|
||
// while the brand-level claim and terminology stay consistent.
|
||
c.HeroTitle = "Declare how content was made."
|
||
c.HeroEyebrow = "UCNG · Open by design"
|
||
c.PrimaryCTA = map[string]string{"fr": "Créer une déclaration", "es": "Crear una declaración", "it": "Crea una dichiarazione", "nl": "Maak een declaratie", "pt": "Criar uma declaração", "pl": "Utwórz deklarację"}[lang]
|
||
c.FinalPrimary = c.PrimaryCTA
|
||
c.Footer = "UCNG · Universal Content Notation Guidelines · An open notation framework for transparent content declarations."
|
||
return c
|
||
}
|
||
|
||
func normalize(lang string) string {
|
||
lang = strings.ToLower(strings.TrimSpace(lang))
|
||
if i := strings.IndexAny(lang, "-_"); i >= 0 {
|
||
lang = lang[:i]
|
||
}
|
||
return lang
|
||
}
|
||
|
||
func copies() map[string]copySet {
|
||
return map[string]copySet{
|
||
"de": german(), "en": english(), "fr": french(), "es": spanish(),
|
||
"it": italian(), "nl": dutch(), "pt": portuguese(), "pl": polish(),
|
||
}
|
||
}
|
||
|
||
func commonComparison(lang, yes, no, included, proOnly string) []ComparisonRow {
|
||
features := map[string][]string{
|
||
"de": {"SVG-Badges", "HTML-Erklärungseiten", "JSON-LD und Schema-Validierung", "8 Sprachen", "Docker, Kubernetes und Swarm", "Eigene Erklärungstexte", "Eigene Badge-Texte und Farben", "Signierte Offline-Lizenz", "Domaingebundene Aktivierung", "Kommerzieller Support"},
|
||
"en": {"SVG badges", "HTML declaration pages", "JSON-LD & schema validation", "8 languages", "Docker, Kubernetes & Swarm", "Custom declaration copy", "Custom badge labels & colours", "Offline signed licence", "Domain-bound activation", "Commercial support"},
|
||
"fr": {"Badges SVG", "Pages de déclaration HTML", "JSON-LD et validation de schéma", "8 langues", "Docker, Kubernetes et Swarm", "Textes de déclaration personnalisés", "Libellés et couleurs personnalisés", "Licence hors ligne signée", "Activation liée au domaine", "Support commercial"},
|
||
"es": {"Insignias SVG", "Páginas de declaración HTML", "JSON-LD y validación de esquema", "8 idiomas", "Docker, Kubernetes y Swarm", "Textos de declaración propios", "Etiquetas y colores propios", "Licencia offline firmada", "Activación ligada al dominio", "Soporte comercial"},
|
||
"it": {"Badge SVG", "Pagine di dichiarazione HTML", "JSON-LD e validazione schema", "8 lingue", "Docker, Kubernetes e Swarm", "Testi di dichiarazione personalizzati", "Etichette e colori personalizzati", "Licenza offline firmata", "Attivazione legata al dominio", "Supporto commerciale"},
|
||
"nl": {"SVG-badges", "HTML-verklaringspagina’s", "JSON-LD en schemavalidatie", "8 talen", "Docker, Kubernetes en Swarm", "Eigen verklaringsteksten", "Eigen labels en kleuren", "Ondertekende offline licentie", "Domeingebonden activatie", "Commerciële support"},
|
||
"pt": {"Badges SVG", "Páginas de declaração HTML", "JSON-LD e validação de esquema", "8 idiomas", "Docker, Kubernetes e Swarm", "Textos de declaração próprios", "Etiquetas e cores próprias", "Licença offline assinada", "Ativação ligada ao domínio", "Suporte comercial"},
|
||
"pl": {"Plakietki SVG", "Strony deklaracji HTML", "JSON-LD i walidacja schematu", "8 języków", "Docker, Kubernetes i Swarm", "Własne teksty deklaracji", "Własne etykiety i kolory", "Podpisana licencja offline", "Aktywacja związana z domeną", "Wsparcie komercyjne"},
|
||
}
|
||
labels := features[normalize(lang)]
|
||
if len(labels) == 0 {
|
||
labels = features["en"]
|
||
}
|
||
community := []string{included, included, included, included, included, no, no, no, no, no}
|
||
pro := []string{included, included, included, included, included, yes, yes, yes, yes, proOnly}
|
||
rows := make([]ComparisonRow, 0, len(labels))
|
||
for i, feature := range labels {
|
||
rows = append(rows, ComparisonRow{Feature: feature, Community: community[i], Pro: pro[i]})
|
||
}
|
||
return rows
|
||
}
|
||
|
||
func german() copySet {
|
||
return copySet{
|
||
MetaDescription: "Produkt, Preise und Installation für den offenen KI-Nutzungsstandard.",
|
||
NavFeatures: "Features", NavPricing: "Preise", NavInstall: "Installation", NavGenerator: "Generator", NavBackground: "Hintergrund", LanguageLabel: "Sprache",
|
||
HeroEyebrow: "Open Source im Kern · Pro bei Bedarf", HeroTitle: "KI-Nutzung transparent kennzeichnen – ohne Plattformzwang.",
|
||
HeroLead: "Ein zustandsloser Go-Dienst für SVG-Badges, verständliche Erklärungseiten und JSON-LD. Selbst hostbar, internationalisiert und für hochverfügbare Deployments gebaut.",
|
||
PrimaryCTA: "Badge erstellen", SecondaryCTA: "Pro anfragen", Proof: []string{"8 Sprachen", "Keine Cookies", "Keine Datenbank", "Docker & Kubernetes"},
|
||
FeaturesEyebrow: "Funktionsumfang", FeaturesTitle: "Vom sichtbaren Hinweis bis zum maschinenlesbaren Nachweis.", FeaturesLead: "Die Community-Ausgabe deckt die offene Integration ab. Pro ergänzt individuelle Darstellung und kommerzielle Lizenzierung.",
|
||
Features: []Feature{
|
||
{"Sichtbar", "SVG-Badges", "Deterministische, cachefähige Badges aus Presets oder strukturierten Parametern."},
|
||
{"Verständlich", "Erklärungseiten", "Menschenlesbare Seiten erläutern KI-Anteil, Tätigkeit, Prüfung und Verantwortung."},
|
||
{"Maschinenlesbar", "JSON-LD und Schema", "Manifeste lassen sich verlinken, validieren und in Build- oder CMS-Prozesse übernehmen."},
|
||
{"International", "Acht Sprachen", "Deutsch, Englisch, Französisch, Spanisch, Italienisch, Niederländisch, Portugiesisch und Polnisch."},
|
||
{"Pro", "Eigene Texte und Designs", "Eigene Titel, Beschreibungen, Badge-Texte und Farben – serverseitig geschützt."},
|
||
{"Offline", "Signierte Lizenz", "Ed25519-Lizenzen werden lokal geprüft; ein externer Lizenzserver ist nicht erforderlich."},
|
||
{"Skalierbar", "High Availability", "Zustandslose Replikate, Readiness-Checks, HPA, Swarm-Replikation und CDN-freundliches Caching."},
|
||
{"Datensparsam", "Privacy by default", "Keine Cookies, keine Sessions, keine externen Assets und kein verpflichtendes Tracking."},
|
||
},
|
||
CompareEyebrow: "Editionen", CompareTitle: "Offener Standard oder individuelle Markenintegration.", CompareLead: "Alle Kernformate bleiben frei nutzbar. Pro schaltet ausschließlich die kommerzielle Anpassung frei.", CompareFeature: "Funktion", CompareCommunity: "Community", ComparePro: "Pro",
|
||
Comparison: commonComparison("de", "Enthalten", "–", "Enthalten", "Je nach Tarif"),
|
||
PricingEyebrow: "Preise", PricingTitle: "Einfach nach Einsatzbreite skalieren.", PricingLead: "Die Software bleibt selbst hostbar. Bezahlte Tarife lizenzieren Custom-Funktionen, Domains und Support.", PricePeriod: "/ Monat", PriceNote: "Einführungspreise bei jährlicher Abrechnung, zuzüglich gesetzlicher Steuern. Enterprise-Angebote werden individuell vereinbart.",
|
||
PlanDescriptions: [5]string{"Für Open-Source-Nutzung und Standardkennzeichnungen.", "Für einzelne professionelle Websites mit eigener Darstellung.", "Für Publisher mit mehreren Marken oder Portalen.", "Für Agenturen und wiederkehrende Kundendeployments.", "Für individuelle Vertrags-, SLA- und Deployment-Anforderungen."},
|
||
PlanFeatures: [5][]string{
|
||
{"Standard-Presets", "Alle 8 Sprachen", "SVG, HTML und JSON-LD", "Self-Hosting"},
|
||
{"Bis zu 3 Domains", "Eigene Texte", "Eigene Badge-Texte und Farben", "Signierte Offline-Lizenz"},
|
||
{"Bis zu 20 Domains", "Alle Pro-Funktionen", "Priorisierter Support", "Migrationshilfe"},
|
||
{"Bis zu 100 Domains", "Kundendomains", "Kommerzielle Agenturnutzung", "Technisches Onboarding"},
|
||
{"Individuelle Domainzahl", "SLA und Supportfenster", "Private Distribution", "Individuelle Lizenzbedingungen"},
|
||
},
|
||
PlanCTA: [5]string{"Kostenlos starten", "Pro anfragen", "Publisher anfragen", "Agency anfragen", "Kontakt aufnehmen"}, EnterprisePrice: "Individuell",
|
||
InstallEyebrow: "Deployment", InstallTitle: "In wenigen Befehlen produktiv.", InstallLead: "Alle Varianten verwenden dasselbe Go-Binary. Community und Pro unterscheiden sich nur durch optionale Lizenz-Secrets.", CopyLabel: "Kopieren", CopiedLabel: "Kopiert",
|
||
InstallTitles: [5]string{"Docker Compose", "Docker CLI", "Kubernetes", "Docker Swarm", "Direkt mit Go"},
|
||
InstallSummaries: [5]string{"Lokaler oder einzelner Server mit deklarativer Konfiguration.", "Image selbst bauen und als gehärteten Container starten.", "Drei Replikate, Probes, Rolling Updates, HPA und PodDisruptionBudget.", "Mehrere Replikate mit Docker-nativem Orchestrator betreiben.", "Für Entwicklung, Tests oder ein natives Systemd-Deployment."},
|
||
ConfigTitle: "Wichtige Umgebungsvariablen", ConfigVariable: "Variable", ConfigDefault: "Standard", ConfigMeaning: "Bedeutung",
|
||
ConfigDescriptions: [8]string{"Bind-Adresse des HTTP-Servers.", "Öffentliche Basis-URL ohne abschließenden Slash.", "Produkt- oder Seitentitel.", "Optionale externe Kontakt- oder Projektseite.", "Ziel für Pro- und Vertriebsanfragen.", "Rückfallsprache der Ausgabe.", "Öffentlicher Ed25519-Schlüssel für Pro.", "Signierter und optional domaingebundener Pro-Token."},
|
||
FAQEyebrow: "FAQ", FAQTitle: "Häufige Fragen",
|
||
FAQs: []FAQ{
|
||
{"Ist die Community-Ausgabe eingeschränkt?", "Die Standard-Presets, acht Sprachen, SVG, Erklärungseiten, JSON-LD, Validator und alle Deployment-Dateien sind vollständig nutzbar. Nur eigene Texte, Farben und kommerzielle Zusatzleistungen benötigen Pro."},
|
||
{"Benötigt Pro eine Verbindung zu einem Lizenzserver?", "Nein. Die Ed25519-Signatur wird lokal in jeder Replik geprüft. Dadurch bleibt das Deployment hochverfügbar und funktioniert auch in abgeschotteten Netzen."},
|
||
{"Kann ich das System hinter einem CDN betreiben?", "Ja. Badge- und Manifest-Antworten sind deterministisch, senden ETags und geeignete Cache-Control-Header."},
|
||
{"Ist die Kennzeichnung automatisch rechtskonform?", "Nein. Der Dienst stellt technische Deklarationen und Integrationen bereit, ersetzt aber keine rechtliche Prüfung oder redaktionelle Verantwortung."},
|
||
},
|
||
FinalTitle: "Starte offen. Erweitere nur dort, wo deine Marke es braucht.", FinalLead: "Der Generator ist ohne Registrierung nutzbar. Für eigene Texte, Farben und Domains steht die Pro-Lizenz bereit.", FinalPrimary: "Generator öffnen", FinalSecondary: "Pro besprechen", Footer: "Offener KI-Nutzungsstandard · Keine Rechtsberatung.",
|
||
}
|
||
}
|
||
|
||
func english() copySet {
|
||
return copySet{
|
||
MetaDescription: "Product, pricing and installation for the open AI usage disclosure standard.",
|
||
NavFeatures: "Features", NavPricing: "Pricing", NavInstall: "Installation", NavGenerator: "Generator", NavBackground: "Background", LanguageLabel: "Language",
|
||
HeroEyebrow: "Open source core · Pro when needed", HeroTitle: "Disclose AI use without locking into a platform.", HeroLead: "A stateless Go service for SVG badges, human-readable declaration pages and JSON-LD. Self-hostable, internationalised and built for highly available deployments.",
|
||
PrimaryCTA: "Create a badge", SecondaryCTA: "Talk about Pro", Proof: []string{"8 languages", "No cookies", "No database", "Docker & Kubernetes"},
|
||
FeaturesEyebrow: "Feature set", FeaturesTitle: "From a visible notice to machine-readable evidence.", FeaturesLead: "Community covers the open integration. Pro adds branded presentation and commercial licensing.",
|
||
Features: []Feature{
|
||
{"Visible", "SVG badges", "Deterministic, cacheable badges generated from presets or structured parameters."},
|
||
{"Readable", "Declaration pages", "Human-readable pages explain AI contribution, activities, review and responsibility."},
|
||
{"Machine-readable", "JSON-LD and schema", "Link, validate or include manifests in build and CMS workflows."},
|
||
{"International", "Eight languages", "German, English, French, Spanish, Italian, Dutch, Portuguese and Polish."},
|
||
{"Pro", "Custom copy and design", "Custom titles, descriptions, badge labels and colours with server-side enforcement."},
|
||
{"Offline", "Signed licensing", "Ed25519 licences are verified locally without an external licensing service."},
|
||
{"Scalable", "High availability", "Stateless replicas, readiness checks, HPA, Swarm replicas and CDN-friendly caching."},
|
||
{"Privacy-first", "No tracking required", "No cookies, sessions, external assets or mandatory analytics."},
|
||
},
|
||
CompareEyebrow: "Editions", CompareTitle: "Open standard or branded integration.", CompareLead: "All core formats remain free. Pro only unlocks commercial customisation.", CompareFeature: "Feature", CompareCommunity: "Community", ComparePro: "Pro", Comparison: commonComparison("en", "Included", "–", "Included", "By plan"),
|
||
PricingEyebrow: "Pricing", PricingTitle: "Scale with the breadth of your deployment.", PricingLead: "The software remains self-hostable. Paid plans license custom capabilities, domains and support.", PricePeriod: "/ month", PriceNote: "Introductory prices with annual billing, excluding applicable taxes. Enterprise terms are agreed individually.",
|
||
PlanDescriptions: [5]string{"For open-source use and standard declarations.", "For individual professional sites with custom presentation.", "For publishers operating several brands or portals.", "For agencies deploying repeatedly for clients.", "For custom contract, SLA and deployment requirements."},
|
||
PlanFeatures: [5][]string{{"Standard presets", "All 8 languages", "SVG, HTML and JSON-LD", "Self-hosting"}, {"Up to 3 domains", "Custom declaration copy", "Custom badge labels and colours", "Signed offline licence"}, {"Up to 20 domains", "All Pro capabilities", "Priority support", "Migration assistance"}, {"Up to 100 domains", "Client domains", "Commercial agency use", "Technical onboarding"}, {"Custom domain count", "SLA and support windows", "Private distribution", "Custom licensing terms"}},
|
||
PlanCTA: [5]string{"Start free", "Contact Pro", "Contact Publisher", "Contact Agency", "Contact sales"}, EnterprisePrice: "Custom",
|
||
InstallEyebrow: "Deployment", InstallTitle: "Production-ready in a few commands.", InstallLead: "Every option runs the same Go binary. Community and Pro differ only through optional licence secrets.", CopyLabel: "Copy", CopiedLabel: "Copied",
|
||
InstallTitles: [5]string{"Docker Compose", "Docker CLI", "Kubernetes", "Docker Swarm", "Run with Go"}, InstallSummaries: [5]string{"Declarative setup for a local or single-server deployment.", "Build the image and run a hardened container directly.", "Three replicas, probes, rolling updates, HPA and a PodDisruptionBudget.", "Operate several replicas with Docker's native orchestrator.", "For development, tests or a native systemd deployment."},
|
||
ConfigTitle: "Important environment variables", ConfigVariable: "Variable", ConfigDefault: "Default", ConfigMeaning: "Purpose", ConfigDescriptions: [8]string{"HTTP server bind address.", "Public base URL without a trailing slash.", "Product or site title.", "Optional external contact or project page.", "Destination for Pro and sales enquiries.", "Fallback output language.", "Public Ed25519 key for Pro verification.", "Signed and optionally domain-bound Pro token."},
|
||
FAQEyebrow: "FAQ", FAQTitle: "Common questions", FAQs: []FAQ{{"Is Community artificially limited?", "No. Standard presets, eight languages, SVG, declaration pages, JSON-LD, validation and deployment files are fully usable. Only custom presentation and commercial services require Pro."}, {"Does Pro depend on a licensing server?", "No. Every replica verifies the Ed25519 signature locally, preserving availability and supporting isolated networks."}, {"Can I place the service behind a CDN?", "Yes. Badge and manifest responses are deterministic and include ETag and cache-control headers."}, {"Does this automatically make a site legally compliant?", "No. The service provides technical declarations and integrations; it does not replace legal review or editorial responsibility."}},
|
||
FinalTitle: "Start open. Add branding only where you need it.", FinalLead: "The generator works without registration. Pro is available for custom copy, colours and licensed domains.", FinalPrimary: "Open generator", FinalSecondary: "Discuss Pro", Footer: "Open AI usage disclosure standard · Not legal advice.",
|
||
}
|
||
}
|
||
|
||
func french() copySet {
|
||
c := english()
|
||
c.MetaDescription = "Produit, tarifs et installation de la norme ouverte de déclaration d’utilisation de l’IA."
|
||
c.NavFeatures, c.NavPricing, c.NavInstall, c.NavGenerator, c.NavBackground, c.LanguageLabel = "Fonctions", "Tarifs", "Installation", "Générateur", "Contexte", "Langue"
|
||
c.HeroEyebrow, c.HeroTitle = "Cœur open source · Pro si nécessaire", "Déclarez l’usage de l’IA sans dépendre d’une plateforme."
|
||
c.HeroLead = "Un service Go sans état pour badges SVG, pages explicatives et JSON-LD. Auto-hébergeable, internationalisé et conçu pour la haute disponibilité."
|
||
c.PrimaryCTA, c.SecondaryCTA = "Créer un badge", "Contacter Pro"
|
||
c.Proof = []string{"8 langues", "Sans cookies", "Sans base de données", "Docker & Kubernetes"}
|
||
c.FeaturesEyebrow, c.FeaturesTitle, c.FeaturesLead = "Fonctions", "Du signal visible à la déclaration lisible par machine.", "Community couvre l’intégration ouverte. Pro ajoute la personnalisation et la licence commerciale."
|
||
c.Features = []Feature{{"Visible", "Badges SVG", "Badges déterministes et mis en cache à partir de modèles ou de paramètres structurés."}, {"Compréhensible", "Pages de déclaration", "Elles expliquent la contribution de l’IA, les activités, la vérification et la responsabilité."}, {"Lisible par machine", "JSON-LD et schéma", "Manifeste utilisable dans les workflows de build et de CMS."}, {"International", "Huit langues", "Allemand, anglais, français, espagnol, italien, néerlandais, portugais et polonais."}, {"Pro", "Textes et design personnalisés", "Titres, descriptions, libellés et couleurs protégés côté serveur."}, {"Hors ligne", "Licence signée", "Vérification locale Ed25519 sans serveur de licence externe."}, {"Évolutif", "Haute disponibilité", "Répliques sans état, probes, HPA, Swarm et cache CDN."}, {"Respectueux", "Sans suivi obligatoire", "Sans cookies, sessions, ressources externes ni analytics obligatoires."}}
|
||
c.CompareEyebrow, c.CompareTitle, c.CompareLead = "Éditions", "Norme ouverte ou intégration à votre marque.", "Les formats essentiels restent gratuits. Pro déverrouille uniquement la personnalisation commerciale."
|
||
c.CompareFeature, c.CompareCommunity, c.ComparePro = "Fonction", "Community", "Pro"
|
||
c.Comparison = commonComparison("fr", "Inclus", "–", "Inclus", "Selon l’offre")
|
||
c.PricingEyebrow, c.PricingTitle, c.PricingLead = "Tarifs", "Adaptez le prix à l’étendue du déploiement.", "Le logiciel reste auto-hébergeable. Les offres payantes couvrent les personnalisations, domaines et support."
|
||
c.PricePeriod, c.PriceNote = "/ mois", "Tarifs de lancement avec facturation annuelle, hors taxes applicables. Conditions Enterprise sur devis."
|
||
c.PlanDescriptions = [5]string{"Pour l’open source et les déclarations standard.", "Pour quelques sites professionnels personnalisés.", "Pour les éditeurs avec plusieurs marques ou portails.", "Pour les agences et les déploiements clients répétés.", "Pour les exigences contractuelles, SLA et déploiements spécifiques."}
|
||
c.PlanFeatures = [5][]string{{"Modèles standard", "8 langues", "SVG, HTML et JSON-LD", "Auto-hébergement"}, {"Jusqu’à 3 domaines", "Textes personnalisés", "Libellés et couleurs personnalisés", "Licence hors ligne signée"}, {"Jusqu’à 20 domaines", "Toutes les fonctions Pro", "Support prioritaire", "Aide à la migration"}, {"Jusqu’à 100 domaines", "Domaines clients", "Usage commercial agence", "Onboarding technique"}, {"Nombre de domaines sur mesure", "SLA et fenêtres de support", "Distribution privée", "Conditions sur mesure"}}
|
||
c.PlanCTA = [5]string{"Commencer gratuitement", "Contacter Pro", "Contacter Publisher", "Contacter Agency", "Contacter les ventes"}
|
||
c.EnterprisePrice = "Sur devis"
|
||
c.InstallEyebrow, c.InstallTitle, c.InstallLead = "Déploiement", "Prêt pour la production en quelques commandes.", "Toutes les options exécutent le même binaire Go. Community et Pro ne diffèrent que par les secrets de licence facultatifs."
|
||
c.CopyLabel, c.CopiedLabel = "Copier", "Copié"
|
||
c.InstallSummaries = [5]string{"Configuration déclarative locale ou mono-serveur.", "Construire l’image et lancer directement un conteneur renforcé.", "Trois répliques, probes, rolling updates, HPA et PodDisruptionBudget.", "Plusieurs répliques avec l’orchestrateur natif Docker.", "Pour le développement, les tests ou un service systemd natif."}
|
||
c.ConfigTitle, c.ConfigVariable, c.ConfigDefault, c.ConfigMeaning = "Variables d’environnement importantes", "Variable", "Valeur par défaut", "Rôle"
|
||
c.ConfigDescriptions = [8]string{"Adresse d’écoute HTTP.", "URL publique sans barre oblique finale.", "Nom du produit ou du site.", "Page externe facultative de contact ou de projet.", "Destination des demandes Pro et commerciales.", "Langue de repli.", "Clé publique Ed25519 pour Pro.", "Jeton Pro signé et éventuellement lié au domaine."}
|
||
c.FAQEyebrow, c.FAQTitle = "FAQ", "Questions fréquentes"
|
||
c.FAQs = []FAQ{{"Community est-elle limitée artificiellement ?", "Non. Les modèles, huit langues, SVG, pages, JSON-LD, validation et fichiers de déploiement sont complets. Seule la personnalisation commerciale nécessite Pro."}, {"Pro dépend-il d’un serveur de licence ?", "Non. Chaque réplique vérifie localement la signature Ed25519."}, {"Puis-je utiliser un CDN ?", "Oui. Les badges et manifestes sont déterministes et utilisent ETag et Cache-Control."}, {"Cela garantit-il la conformité juridique ?", "Non. Le service fournit une infrastructure technique et ne remplace ni l’analyse juridique ni la responsabilité éditoriale."}}
|
||
c.FinalTitle, c.FinalLead, c.FinalPrimary, c.FinalSecondary = "Commencez ouvert. Ajoutez votre marque uniquement si nécessaire.", "Le générateur fonctionne sans inscription. Pro ajoute les textes, couleurs et domaines personnalisés.", "Ouvrir le générateur", "Discuter de Pro"
|
||
c.Footer = "Norme ouverte de déclaration d’utilisation de l’IA · Pas un conseil juridique."
|
||
return c
|
||
}
|
||
|
||
func spanish() copySet {
|
||
c := english()
|
||
c.MetaDescription = "Producto, precios e instalación del estándar abierto de declaración de uso de IA."
|
||
c.NavFeatures, c.NavPricing, c.NavInstall, c.NavGenerator, c.NavBackground, c.LanguageLabel = "Funciones", "Precios", "Instalación", "Generador", "Contexto", "Idioma"
|
||
c.HeroEyebrow, c.HeroTitle = "Núcleo open source · Pro cuando haga falta", "Declara el uso de IA sin depender de una plataforma."
|
||
c.HeroLead = "Un servicio Go sin estado para insignias SVG, páginas explicativas y JSON-LD. Autoalojable, internacional y preparado para alta disponibilidad."
|
||
c.PrimaryCTA, c.SecondaryCTA = "Crear una insignia", "Consultar Pro"
|
||
c.Proof = []string{"8 idiomas", "Sin cookies", "Sin base de datos", "Docker y Kubernetes"}
|
||
c.FeaturesEyebrow, c.FeaturesTitle, c.FeaturesLead = "Funciones", "Desde el aviso visible hasta la declaración legible por máquina.", "Community cubre la integración abierta. Pro añade personalización y licencia comercial."
|
||
c.Features = []Feature{{"Visible", "Insignias SVG", "Insignias deterministas y cacheables desde preajustes o parámetros estructurados."}, {"Comprensible", "Páginas de declaración", "Explican la contribución de la IA, las actividades, la revisión y la responsabilidad."}, {"Legible por máquina", "JSON-LD y esquema", "Manifiestos para procesos de build y CMS."}, {"Internacional", "Ocho idiomas", "Alemán, inglés, francés, español, italiano, neerlandés, portugués y polaco."}, {"Pro", "Textos y diseño propios", "Títulos, descripciones, etiquetas y colores protegidos en el servidor."}, {"Sin conexión", "Licencia firmada", "Verificación Ed25519 local sin servidor externo."}, {"Escalable", "Alta disponibilidad", "Réplicas sin estado, probes, HPA, Swarm y caché CDN."}, {"Privacidad", "Sin seguimiento obligatorio", "Sin cookies, sesiones, recursos externos ni analítica obligatoria."}}
|
||
c.CompareEyebrow, c.CompareTitle, c.CompareLead = "Ediciones", "Estándar abierto o integración de marca.", "Los formatos básicos siguen siendo gratuitos. Pro solo desbloquea la personalización comercial."
|
||
c.CompareFeature, c.CompareCommunity, c.ComparePro = "Función", "Community", "Pro"
|
||
c.Comparison = commonComparison("es", "Incluido", "–", "Incluido", "Según plan")
|
||
c.PricingEyebrow, c.PricingTitle, c.PricingLead = "Precios", "Escala según el alcance del despliegue.", "El software sigue siendo autoalojable. Los planes de pago licencian personalización, dominios y soporte."
|
||
c.PricePeriod, c.PriceNote = "/ mes", "Precios de lanzamiento con facturación anual, impuestos no incluidos. Enterprise se acuerda individualmente."
|
||
c.PlanDescriptions = [5]string{"Para uso open source y declaraciones estándar.", "Para sitios profesionales con presentación propia.", "Para editores con varias marcas o portales.", "Para agencias con despliegues repetidos para clientes.", "Para requisitos de contrato, SLA y despliegue personalizados."}
|
||
c.PlanFeatures = [5][]string{{"Preajustes estándar", "8 idiomas", "SVG, HTML y JSON-LD", "Autoalojamiento"}, {"Hasta 3 dominios", "Textos propios", "Etiquetas y colores propios", "Licencia offline firmada"}, {"Hasta 20 dominios", "Todas las funciones Pro", "Soporte prioritario", "Ayuda de migración"}, {"Hasta 100 dominios", "Dominios de clientes", "Uso comercial de agencia", "Onboarding técnico"}, {"Dominios a medida", "SLA y ventanas de soporte", "Distribución privada", "Condiciones de licencia propias"}}
|
||
c.PlanCTA = [5]string{"Empezar gratis", "Consultar Pro", "Consultar Publisher", "Consultar Agency", "Contactar ventas"}
|
||
c.EnterprisePrice = "A medida"
|
||
c.InstallEyebrow, c.InstallTitle, c.InstallLead = "Despliegue", "Listo para producción en pocos comandos.", "Todas las opciones ejecutan el mismo binario Go. Community y Pro solo se diferencian por secretos de licencia opcionales."
|
||
c.CopyLabel, c.CopiedLabel = "Copiar", "Copiado"
|
||
c.InstallSummaries = [5]string{"Configuración declarativa local o de un servidor.", "Construye la imagen y ejecuta un contenedor endurecido.", "Tres réplicas, probes, rolling updates, HPA y PodDisruptionBudget.", "Varias réplicas con el orquestador nativo de Docker.", "Para desarrollo, pruebas o un despliegue nativo con systemd."}
|
||
c.ConfigTitle, c.ConfigVariable, c.ConfigDefault, c.ConfigMeaning = "Variables de entorno importantes", "Variable", "Valor por defecto", "Uso"
|
||
c.ConfigDescriptions = [8]string{"Dirección de escucha HTTP.", "URL pública sin barra final.", "Título del producto o sitio.", "Página externa opcional de contacto o del proyecto.", "Destino de consultas Pro y comerciales.", "Idioma de respaldo.", "Clave pública Ed25519 para Pro.", "Token Pro firmado y opcionalmente ligado a dominios."}
|
||
c.FAQEyebrow, c.FAQTitle = "FAQ", "Preguntas frecuentes"
|
||
c.FAQs = []FAQ{{"¿Community está limitada artificialmente?", "No. Los preajustes, ocho idiomas, SVG, páginas, JSON-LD, validación y archivos de despliegue son completos. Solo la personalización comercial requiere Pro."}, {"¿Pro depende de un servidor de licencias?", "No. Cada réplica verifica localmente la firma Ed25519."}, {"¿Puedo usar un CDN?", "Sí. Las respuestas son deterministas e incluyen ETag y Cache-Control."}, {"¿Garantiza cumplimiento legal?", "No. Es infraestructura técnica y no sustituye revisión jurídica ni responsabilidad editorial."}}
|
||
c.FinalTitle, c.FinalLead, c.FinalPrimary, c.FinalSecondary = "Empieza abierto. Añade marca solo cuando la necesites.", "El generador funciona sin registro. Pro añade textos, colores y dominios personalizados.", "Abrir generador", "Hablar de Pro"
|
||
c.Footer = "Estándar abierto de declaración de uso de IA · No es asesoramiento jurídico."
|
||
return c
|
||
}
|
||
|
||
func italian() copySet {
|
||
c := english()
|
||
c.MetaDescription = "Prodotto, prezzi e installazione dello standard aperto per dichiarare l’uso dell’IA."
|
||
c.NavFeatures, c.NavPricing, c.NavInstall, c.NavGenerator, c.NavBackground, c.LanguageLabel = "Funzioni", "Prezzi", "Installazione", "Generatore", "Contesto", "Lingua"
|
||
c.HeroEyebrow, c.HeroTitle = "Core open source · Pro quando serve", "Dichiara l’uso dell’IA senza vincoli di piattaforma."
|
||
c.HeroLead = "Un servizio Go stateless per badge SVG, pagine esplicative e JSON-LD. Self-hosted, internazionale e pronto per l’alta disponibilità."
|
||
c.PrimaryCTA, c.SecondaryCTA = "Crea un badge", "Contatta Pro"
|
||
c.Proof = []string{"8 lingue", "Nessun cookie", "Nessun database", "Docker e Kubernetes"}
|
||
c.FeaturesEyebrow, c.FeaturesTitle, c.FeaturesLead = "Funzioni", "Dall’avviso visibile alla dichiarazione leggibile dalle macchine.", "Community copre l’integrazione aperta. Pro aggiunge personalizzazione e licenza commerciale."
|
||
c.Features = []Feature{{"Visibile", "Badge SVG", "Badge deterministici e cacheabili da preset o parametri strutturati."}, {"Comprensibile", "Pagine di dichiarazione", "Spiegano contributo IA, attività, revisione e responsabilità."}, {"Machine-readable", "JSON-LD e schema", "Manifesti integrabili in build e CMS."}, {"Internazionale", "Otto lingue", "Tedesco, inglese, francese, spagnolo, italiano, olandese, portoghese e polacco."}, {"Pro", "Testi e design personalizzati", "Titoli, descrizioni, etichette e colori protetti lato server."}, {"Offline", "Licenza firmata", "Verifica Ed25519 locale senza server esterno."}, {"Scalabile", "Alta disponibilità", "Repliche stateless, probe, HPA, Swarm e cache CDN."}, {"Privacy", "Nessun tracking obbligatorio", "Nessun cookie, sessione, asset esterno o analytics obbligatorio."}}
|
||
c.CompareEyebrow, c.CompareTitle, c.CompareLead = "Edizioni", "Standard aperto o integrazione del brand.", "I formati essenziali restano gratuiti. Pro abilita solo la personalizzazione commerciale."
|
||
c.CompareFeature, c.CompareCommunity, c.ComparePro = "Funzione", "Community", "Pro"
|
||
c.Comparison = commonComparison("it", "Incluso", "–", "Incluso", "Secondo il piano")
|
||
c.PricingEyebrow, c.PricingTitle, c.PricingLead = "Prezzi", "Scala in base all’ampiezza del deployment.", "Il software resta self-hosted. I piani a pagamento licenziano personalizzazioni, domini e supporto."
|
||
c.PricePeriod, c.PriceNote = "/ mese", "Prezzi introduttivi con fatturazione annuale, imposte escluse. Enterprise su accordo individuale."
|
||
c.PlanDescriptions = [5]string{"Per open source e dichiarazioni standard.", "Per siti professionali con presentazione personalizzata.", "Per publisher con più brand o portali.", "Per agenzie con deployment ripetuti per i clienti.", "Per requisiti contrattuali, SLA e deployment personalizzati."}
|
||
c.PlanFeatures = [5][]string{{"Preset standard", "8 lingue", "SVG, HTML e JSON-LD", "Self-hosting"}, {"Fino a 3 domini", "Testi personalizzati", "Etichette e colori personalizzati", "Licenza offline firmata"}, {"Fino a 20 domini", "Tutte le funzioni Pro", "Supporto prioritario", "Assistenza migrazione"}, {"Fino a 100 domini", "Domini clienti", "Uso commerciale agenzia", "Onboarding tecnico"}, {"Domini personalizzati", "SLA e finestre di supporto", "Distribuzione privata", "Termini personalizzati"}}
|
||
c.PlanCTA = [5]string{"Inizia gratis", "Contatta Pro", "Contatta Publisher", "Contatta Agency", "Contatta vendite"}
|
||
c.EnterprisePrice = "Personalizzato"
|
||
c.InstallEyebrow, c.InstallTitle, c.InstallLead = "Deployment", "In produzione con pochi comandi.", "Ogni opzione esegue lo stesso binario Go. Community e Pro differiscono solo per secret di licenza opzionali."
|
||
c.CopyLabel, c.CopiedLabel = "Copia", "Copiato"
|
||
c.InstallSummaries = [5]string{"Configurazione dichiarativa locale o su server singolo.", "Costruisci l’immagine ed esegui un container hardened.", "Tre repliche, probe, rolling update, HPA e PodDisruptionBudget.", "Più repliche con l’orchestratore nativo Docker.", "Per sviluppo, test o deployment nativo systemd."}
|
||
c.ConfigTitle, c.ConfigVariable, c.ConfigDefault, c.ConfigMeaning = "Variabili d’ambiente importanti", "Variabile", "Default", "Scopo"
|
||
c.ConfigDescriptions = [8]string{"Indirizzo di ascolto HTTP.", "URL pubblico senza slash finale.", "Titolo del prodotto o sito.", "Pagina esterna facoltativa di contatto o del progetto.", "Destinazione delle richieste Pro e commerciali.", "Lingua di fallback.", "Chiave pubblica Ed25519 per Pro.", "Token Pro firmato e opzionalmente legato ai domini."}
|
||
c.FAQEyebrow, c.FAQTitle = "FAQ", "Domande frequenti"
|
||
c.FAQs = []FAQ{{"Community è limitata artificialmente?", "No. Preset, otto lingue, SVG, pagine, JSON-LD, validazione e file di deployment sono completi. Solo la personalizzazione commerciale richiede Pro."}, {"Pro dipende da un server di licenze?", "No. Ogni replica verifica localmente la firma Ed25519."}, {"Posso usare un CDN?", "Sì. Badge e manifesti sono deterministici e includono ETag e Cache-Control."}, {"Garantisce conformità legale?", "No. Fornisce infrastruttura tecnica e non sostituisce la revisione legale o la responsabilità editoriale."}}
|
||
c.FinalTitle, c.FinalLead, c.FinalPrimary, c.FinalSecondary = "Inizia aperto. Aggiungi il brand solo quando serve.", "Il generatore funziona senza registrazione. Pro aggiunge testi, colori e domini personalizzati.", "Apri generatore", "Parla di Pro"
|
||
c.Footer = "Standard aperto per dichiarare l’uso dell’IA · Non è consulenza legale."
|
||
return c
|
||
}
|
||
|
||
func dutch() copySet {
|
||
c := english()
|
||
c.MetaDescription = "Product, prijzen en installatie voor de open standaard voor AI-gebruiksverklaringen."
|
||
c.NavFeatures, c.NavPricing, c.NavInstall, c.NavGenerator, c.NavBackground, c.LanguageLabel = "Functies", "Prijzen", "Installatie", "Generator", "Achtergrond", "Taal"
|
||
c.HeroEyebrow, c.HeroTitle = "Open-source kern · Pro waar nodig", "Maak AI-gebruik transparant zonder platformlock-in."
|
||
c.HeroLead = "Een stateless Go-service voor SVG-badges, begrijpelijke verklaringspagina’s en JSON-LD. Zelf te hosten, internationaal en gebouwd voor hoge beschikbaarheid."
|
||
c.PrimaryCTA, c.SecondaryCTA = "Badge maken", "Pro bespreken"
|
||
c.Proof = []string{"8 talen", "Geen cookies", "Geen database", "Docker & Kubernetes"}
|
||
c.FeaturesEyebrow, c.FeaturesTitle, c.FeaturesLead = "Functies", "Van zichtbare melding tot machineleesbare verklaring.", "Community biedt de open integratie. Pro voegt maatwerk en commerciële licenties toe."
|
||
c.Features = []Feature{{"Zichtbaar", "SVG-badges", "Deterministische, cachebare badges uit presets of gestructureerde parameters."}, {"Begrijpelijk", "Verklaringspagina’s", "Leggen AI-bijdrage, activiteiten, menselijke controle en verantwoordelijkheid uit."}, {"Machineleesbaar", "JSON-LD en schema", "Manifesten voor build- en CMS-workflows."}, {"Internationaal", "Acht talen", "Duits, Engels, Frans, Spaans, Italiaans, Nederlands, Portugees en Pools."}, {"Pro", "Eigen teksten en ontwerp", "Titels, beschrijvingen, labels en kleuren met server-side handhaving."}, {"Offline", "Ondertekende licentie", "Lokale Ed25519-controle zonder externe licentieserver."}, {"Schaalbaar", "Hoge beschikbaarheid", "Stateless replicas, probes, HPA, Swarm en CDN-caching."}, {"Privacy", "Geen verplichte tracking", "Geen cookies, sessies, externe assets of verplichte analytics."}}
|
||
c.CompareEyebrow, c.CompareTitle, c.CompareLead = "Edities", "Open standaard of integratie in eigen huisstijl.", "Alle kernformaten blijven gratis. Pro ontgrendelt alleen commerciële aanpassing."
|
||
c.CompareFeature, c.CompareCommunity, c.ComparePro = "Functie", "Community", "Pro"
|
||
c.Comparison = commonComparison("nl", "Inbegrepen", "–", "Inbegrepen", "Volgens abonnement")
|
||
c.PricingEyebrow, c.PricingTitle, c.PricingLead = "Prijzen", "Schaal mee met de omvang van je deployment.", "De software blijft zelf te hosten. Betaalde plannen licentiëren maatwerk, domeinen en support."
|
||
c.PricePeriod, c.PriceNote = "/ maand", "Introductieprijzen bij jaarlijkse facturatie, exclusief belastingen. Enterprise op maat."
|
||
c.PlanDescriptions = [5]string{"Voor open source en standaardverklaringen.", "Voor professionele sites met eigen presentatie.", "Voor uitgevers met meerdere merken of portals.", "Voor bureaus met herhaalde klantdeployments.", "Voor maatwerkcontracten, SLA’s en deployments."}
|
||
c.PlanFeatures = [5][]string{{"Standaardpresets", "8 talen", "SVG, HTML en JSON-LD", "Self-hosting"}, {"Tot 3 domeinen", "Eigen teksten", "Eigen labels en kleuren", "Ondertekende offline licentie"}, {"Tot 20 domeinen", "Alle Pro-functies", "Prioriteitssupport", "Migratiehulp"}, {"Tot 100 domeinen", "Klantdomeinen", "Commercieel bureaugebruik", "Technische onboarding"}, {"Domeinen op maat", "SLA en supportvensters", "Private distributie", "Aangepaste licentievoorwaarden"}}
|
||
c.PlanCTA = [5]string{"Gratis starten", "Pro aanvragen", "Publisher aanvragen", "Agency aanvragen", "Contact opnemen"}
|
||
c.EnterprisePrice = "Op maat"
|
||
c.InstallEyebrow, c.InstallTitle, c.InstallLead = "Deployment", "Productieklaar in enkele commando’s.", "Elke optie draait hetzelfde Go-binary. Community en Pro verschillen alleen door optionele licentie-secrets."
|
||
c.CopyLabel, c.CopiedLabel = "Kopiëren", "Gekopieerd"
|
||
c.InstallSummaries = [5]string{"Declaratieve setup voor lokaal of één server.", "Bouw het image en start een hardened container.", "Drie replicas, probes, rolling updates, HPA en PodDisruptionBudget.", "Meerdere replicas met Docker Swarm.", "Voor ontwikkeling, tests of een native systemd-deployment."}
|
||
c.ConfigTitle, c.ConfigVariable, c.ConfigDefault, c.ConfigMeaning = "Belangrijke omgevingsvariabelen", "Variabele", "Standaard", "Doel"
|
||
c.ConfigDescriptions = [8]string{"HTTP-luisteradres.", "Publieke basis-URL zonder afsluitende slash.", "Product- of sitetitel.", "Optionele externe contact- of projectpagina.", "Bestemming voor Pro- en verkoopvragen.", "Fallbacktaal.", "Publieke Ed25519-sleutel voor Pro.", "Ondertekende en optioneel domeingebonden Pro-token."}
|
||
c.FAQEyebrow, c.FAQTitle = "FAQ", "Veelgestelde vragen"
|
||
c.FAQs = []FAQ{{"Is Community kunstmatig beperkt?", "Nee. Presets, acht talen, SVG, pagina’s, JSON-LD, validatie en deploymentbestanden zijn volledig. Alleen commercieel maatwerk vereist Pro."}, {"Heeft Pro een licentieserver nodig?", "Nee. Elke replica controleert de Ed25519-handtekening lokaal."}, {"Kan dit achter een CDN?", "Ja. Badges en manifesten zijn deterministisch en gebruiken ETag en Cache-Control."}, {"Garandeert dit juridische naleving?", "Nee. Het is technische infrastructuur en vervangt geen juridische beoordeling of redactionele verantwoordelijkheid."}}
|
||
c.FinalTitle, c.FinalLead, c.FinalPrimary, c.FinalSecondary = "Begin open. Voeg huisstijl toe waar nodig.", "De generator werkt zonder registratie. Pro voegt eigen teksten, kleuren en domeinen toe.", "Open generator", "Pro bespreken"
|
||
c.Footer = "Open standaard voor AI-gebruiksverklaringen · Geen juridisch advies."
|
||
return c
|
||
}
|
||
|
||
func portuguese() copySet {
|
||
c := english()
|
||
c.MetaDescription = "Produto, preços e instalação do padrão aberto de declaração de uso de IA."
|
||
c.NavFeatures, c.NavPricing, c.NavInstall, c.NavGenerator, c.NavBackground, c.LanguageLabel = "Funcionalidades", "Preços", "Instalação", "Gerador", "Contexto", "Idioma"
|
||
c.HeroEyebrow, c.HeroTitle = "Núcleo open source · Pro quando necessário", "Declare o uso de IA sem dependência de plataforma."
|
||
c.HeroLead = "Um serviço Go sem estado para badges SVG, páginas explicativas e JSON-LD. Autoalojável, internacional e preparado para alta disponibilidade."
|
||
c.PrimaryCTA, c.SecondaryCTA = "Criar badge", "Falar sobre Pro"
|
||
c.Proof = []string{"8 idiomas", "Sem cookies", "Sem base de dados", "Docker e Kubernetes"}
|
||
c.FeaturesEyebrow, c.FeaturesTitle, c.FeaturesLead = "Funcionalidades", "Do aviso visível à declaração legível por máquina.", "Community cobre a integração aberta. Pro adiciona personalização e licenciamento comercial."
|
||
c.Features = []Feature{{"Visível", "Badges SVG", "Badges determinísticos e cacheáveis a partir de presets ou parâmetros estruturados."}, {"Compreensível", "Páginas de declaração", "Explicam contribuição da IA, atividades, revisão e responsabilidade."}, {"Legível por máquina", "JSON-LD e esquema", "Manifestos para pipelines de build e CMS."}, {"Internacional", "Oito idiomas", "Alemão, inglês, francês, espanhol, italiano, neerlandês, português e polaco."}, {"Pro", "Textos e design próprios", "Títulos, descrições, etiquetas e cores protegidos no servidor."}, {"Offline", "Licença assinada", "Validação Ed25519 local sem servidor externo."}, {"Escalável", "Alta disponibilidade", "Réplicas stateless, probes, HPA, Swarm e cache CDN."}, {"Privacidade", "Sem tracking obrigatório", "Sem cookies, sessões, recursos externos ou analytics obrigatórios."}}
|
||
c.CompareEyebrow, c.CompareTitle, c.CompareLead = "Edições", "Padrão aberto ou integração de marca.", "Os formatos essenciais continuam gratuitos. Pro desbloqueia apenas personalização comercial."
|
||
c.CompareFeature, c.CompareCommunity, c.ComparePro = "Funcionalidade", "Community", "Pro"
|
||
c.Comparison = commonComparison("pt", "Incluído", "–", "Incluído", "Conforme o plano")
|
||
c.PricingEyebrow, c.PricingTitle, c.PricingLead = "Preços", "Escale com a dimensão do deployment.", "O software continua autoalojável. Os planos pagos licenciam personalização, domínios e suporte."
|
||
c.PricePeriod, c.PriceNote = "/ mês", "Preços de lançamento com faturação anual, impostos não incluídos. Enterprise sob proposta."
|
||
c.PlanDescriptions = [5]string{"Para open source e declarações padrão.", "Para sites profissionais com apresentação própria.", "Para publishers com várias marcas ou portais.", "Para agências com deployments repetidos para clientes.", "Para requisitos contratuais, SLA e deployments personalizados."}
|
||
c.PlanFeatures = [5][]string{{"Presets padrão", "8 idiomas", "SVG, HTML e JSON-LD", "Autoalojamento"}, {"Até 3 domínios", "Textos próprios", "Etiquetas e cores próprias", "Licença offline assinada"}, {"Até 20 domínios", "Todas as funções Pro", "Suporte prioritário", "Ajuda de migração"}, {"Até 100 domínios", "Domínios de clientes", "Uso comercial por agência", "Onboarding técnico"}, {"Domínios personalizados", "SLA e janelas de suporte", "Distribuição privada", "Condições personalizadas"}}
|
||
c.PlanCTA = [5]string{"Começar grátis", "Contactar Pro", "Contactar Publisher", "Contactar Agency", "Contactar vendas"}
|
||
c.EnterprisePrice = "Personalizado"
|
||
c.InstallEyebrow, c.InstallTitle, c.InstallLead = "Deployment", "Pronto para produção em poucos comandos.", "Todas as opções executam o mesmo binário Go. Community e Pro diferem apenas por secrets de licença opcionais."
|
||
c.CopyLabel, c.CopiedLabel = "Copiar", "Copiado"
|
||
c.InstallSummaries = [5]string{"Configuração declarativa local ou num único servidor.", "Construa a imagem e execute um contentor hardened.", "Três réplicas, probes, rolling updates, HPA e PodDisruptionBudget.", "Várias réplicas com Docker Swarm.", "Para desenvolvimento, testes ou deployment nativo com systemd."}
|
||
c.ConfigTitle, c.ConfigVariable, c.ConfigDefault, c.ConfigMeaning = "Variáveis de ambiente importantes", "Variável", "Padrão", "Objetivo"
|
||
c.ConfigDescriptions = [8]string{"Endereço de escuta HTTP.", "URL pública sem barra final.", "Título do produto ou site.", "Página externa opcional de contacto ou do projeto.", "Destino para pedidos Pro e comerciais.", "Idioma de fallback.", "Chave pública Ed25519 para Pro.", "Token Pro assinado e opcionalmente ligado a domínios."}
|
||
c.FAQEyebrow, c.FAQTitle = "FAQ", "Perguntas frequentes"
|
||
c.FAQs = []FAQ{{"Community é limitada artificialmente?", "Não. Presets, oito idiomas, SVG, páginas, JSON-LD, validação e ficheiros de deployment estão completos. Apenas a personalização comercial exige Pro."}, {"Pro depende de um servidor de licenças?", "Não. Cada réplica valida localmente a assinatura Ed25519."}, {"Posso usar um CDN?", "Sim. Badges e manifestos são determinísticos e incluem ETag e Cache-Control."}, {"Isto garante conformidade legal?", "Não. É infraestrutura técnica e não substitui análise jurídica ou responsabilidade editorial."}}
|
||
c.FinalTitle, c.FinalLead, c.FinalPrimary, c.FinalSecondary = "Comece aberto. Adicione a marca apenas quando necessário.", "O gerador funciona sem registo. Pro adiciona textos, cores e domínios personalizados.", "Abrir gerador", "Falar sobre Pro"
|
||
c.Footer = "Padrão aberto de declaração de uso de IA · Não é aconselhamento jurídico."
|
||
return c
|
||
}
|
||
|
||
func polish() copySet {
|
||
c := english()
|
||
c.MetaDescription = "Produkt, ceny i instalacja otwartego standardu deklarowania użycia AI."
|
||
c.NavFeatures, c.NavPricing, c.NavInstall, c.NavGenerator, c.NavBackground, c.LanguageLabel = "Funkcje", "Cennik", "Instalacja", "Generator", "Informacje", "Język"
|
||
c.HeroEyebrow, c.HeroTitle = "Rdzeń open source · Pro w razie potrzeby", "Deklaruj użycie AI bez uzależnienia od platformy."
|
||
c.HeroLead = "Bezstanowa usługa Go dla plakietek SVG, zrozumiałych stron deklaracji i JSON-LD. Samodzielny hosting, wiele języków i wysoka dostępność."
|
||
c.PrimaryCTA, c.SecondaryCTA = "Utwórz plakietkę", "Zapytaj o Pro"
|
||
c.Proof = []string{"8 języków", "Bez cookies", "Bez bazy danych", "Docker i Kubernetes"}
|
||
c.FeaturesEyebrow, c.FeaturesTitle, c.FeaturesLead = "Funkcje", "Od widocznej informacji do deklaracji czytelnej maszynowo.", "Community zapewnia otwartą integrację. Pro dodaje personalizację i licencję komercyjną."
|
||
c.Features = []Feature{{"Widoczne", "Plakietki SVG", "Deterministyczne, buforowalne plakietki z presetów lub parametrów."}, {"Zrozumiałe", "Strony deklaracji", "Opisują udział AI, działania, kontrolę człowieka i odpowiedzialność."}, {"Maszynowe", "JSON-LD i schemat", "Manifesty do procesów build i CMS."}, {"Międzynarodowe", "Osiem języków", "Niemiecki, angielski, francuski, hiszpański, włoski, niderlandzki, portugalski i polski."}, {"Pro", "Własne teksty i wygląd", "Tytuły, opisy, etykiety i kolory chronione po stronie serwera."}, {"Offline", "Podpisana licencja", "Lokalna weryfikacja Ed25519 bez zewnętrznego serwera."}, {"Skalowalne", "Wysoka dostępność", "Bezstanowe repliki, probes, HPA, Swarm i cache CDN."}, {"Prywatność", "Bez obowiązkowego śledzenia", "Bez cookies, sesji, zewnętrznych zasobów i obowiązkowej analityki."}}
|
||
c.CompareEyebrow, c.CompareTitle, c.CompareLead = "Edycje", "Otwarty standard albo integracja z marką.", "Wszystkie podstawowe formaty pozostają bezpłatne. Pro odblokowuje wyłącznie personalizację komercyjną."
|
||
c.CompareFeature, c.CompareCommunity, c.ComparePro = "Funkcja", "Community", "Pro"
|
||
c.Comparison = commonComparison("pl", "W cenie", "–", "W cenie", "Zależnie od planu")
|
||
c.PricingEyebrow, c.PricingTitle, c.PricingLead = "Cennik", "Skaluj wraz z zakresem wdrożenia.", "Oprogramowanie pozostaje do samodzielnego hostowania. Płatne plany licencjonują personalizację, domeny i wsparcie."
|
||
c.PricePeriod, c.PriceNote = "/ miesiąc", "Ceny wprowadzające przy rozliczeniu rocznym, bez podatków. Enterprise wyceniany indywidualnie."
|
||
c.PlanDescriptions = [5]string{"Dla open source i standardowych deklaracji.", "Dla profesjonalnych stron z własnym wyglądem.", "Dla wydawców z wieloma markami lub portalami.", "Dla agencji wdrażających rozwiązanie u klientów.", "Dla indywidualnych umów, SLA i wdrożeń."}
|
||
c.PlanFeatures = [5][]string{{"Standardowe presety", "8 języków", "SVG, HTML i JSON-LD", "Self-hosting"}, {"Do 3 domen", "Własne teksty", "Własne etykiety i kolory", "Podpisana licencja offline"}, {"Do 20 domen", "Wszystkie funkcje Pro", "Priorytetowe wsparcie", "Pomoc w migracji"}, {"Do 100 domen", "Domeny klientów", "Komercyjne użycie agencyjne", "Onboarding techniczny"}, {"Indywidualna liczba domen", "SLA i okna wsparcia", "Prywatna dystrybucja", "Indywidualne warunki"}}
|
||
c.PlanCTA = [5]string{"Zacznij bezpłatnie", "Zapytaj o Pro", "Zapytaj o Publisher", "Zapytaj o Agency", "Kontakt ze sprzedażą"}
|
||
c.EnterprisePrice = "Indywidualnie"
|
||
c.InstallEyebrow, c.InstallTitle, c.InstallLead = "Wdrożenie", "Gotowe do produkcji w kilku poleceniach.", "Każda opcja uruchamia ten sam plik Go. Community i Pro różnią się tylko opcjonalnymi sekretami licencji."
|
||
c.CopyLabel, c.CopiedLabel = "Kopiuj", "Skopiowano"
|
||
c.InstallSummaries = [5]string{"Deklaratywna konfiguracja lokalna lub na jednym serwerze.", "Zbuduj obraz i uruchom utwardzony kontener.", "Trzy repliki, probes, rolling updates, HPA i PodDisruptionBudget.", "Wiele replik z Docker Swarm.", "Do developmentu, testów lub natywnego wdrożenia systemd."}
|
||
c.ConfigTitle, c.ConfigVariable, c.ConfigDefault, c.ConfigMeaning = "Ważne zmienne środowiskowe", "Zmienna", "Domyślnie", "Znaczenie"
|
||
c.ConfigDescriptions = [8]string{"Adres nasłuchiwania HTTP.", "Publiczny URL bazowy bez końcowego ukośnika.", "Nazwa produktu lub strony.", "Opcjonalna zewnętrzna strona kontaktowa lub projektu.", "Cel zapytań Pro i sprzedażowych.", "Język zapasowy.", "Publiczny klucz Ed25519 dla Pro.", "Podpisany i opcjonalnie związany z domeną token Pro."}
|
||
c.FAQEyebrow, c.FAQTitle = "FAQ", "Częste pytania"
|
||
c.FAQs = []FAQ{{"Czy Community jest sztucznie ograniczona?", "Nie. Presety, osiem języków, SVG, strony, JSON-LD, walidacja i pliki wdrożeniowe są kompletne. Tylko personalizacja komercyjna wymaga Pro."}, {"Czy Pro wymaga serwera licencji?", "Nie. Każda replika lokalnie weryfikuje podpis Ed25519."}, {"Czy mogę użyć CDN?", "Tak. Plakietki i manifesty są deterministyczne i używają ETag oraz Cache-Control."}, {"Czy to gwarantuje zgodność prawną?", "Nie. To infrastruktura techniczna, która nie zastępuje analizy prawnej ani odpowiedzialności redakcyjnej."}}
|
||
c.FinalTitle, c.FinalLead, c.FinalPrimary, c.FinalSecondary = "Zacznij otwarcie. Dodaj markę tylko tam, gdzie jej potrzebujesz.", "Generator działa bez rejestracji. Pro dodaje własne teksty, kolory i domeny.", "Otwórz generator", "Porozmawiaj o Pro"
|
||
c.Footer = "Otwarty standard deklarowania użycia AI · To nie jest porada prawna."
|
||
return c
|
||
}
|