Skip to content

Commit 5f80ac5

Browse files
authored
Integrate next-intl for enhanced internationalization support, adding… (#901)
* Integrate next-intl for enhanced internationalization support, adding multiple locales (en, de, fr, zh, es, pl, it, ko, pt, ja) and updating next.config.mjs. Update package.json and package-lock.json to include next-intl dependency. Refactor layout components to utilize locale-based rendering and improve accessibility. Remove unused layout files to streamline the codebase. * Add translations for multiple languages (de, en, es, fr, it, ja, ko) in JSON files, enhancing internationalization support across the application. Update locale strings for affiliate program details, usage guidelines, and analytics features to improve user experience and accessibility. * Enhance internationalization support by setting the request locale in the layout component and adding a configuration option to hide the default locale in the i18n setup. This improves locale handling and user experience across the application.
1 parent be3fffd commit 5f80ac5

141 files changed

Lines changed: 4389 additions & 1009 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
name: Translate Missing Strings (Docs)
2+
3+
on:
4+
push:
5+
branches: [master]
6+
paths:
7+
- "docs/src/**/*.ts"
8+
- "docs/src/**/*.tsx"
9+
workflow_dispatch: # Allow manual trigger
10+
11+
jobs:
12+
translate:
13+
runs-on: ubuntu-latest
14+
permissions:
15+
contents: write
16+
pull-requests: write
17+
id-token: write
18+
steps:
19+
- name: Checkout repository
20+
uses: actions/checkout@v4
21+
with:
22+
fetch-depth: 1
23+
24+
- name: Setup Node.js
25+
uses: actions/setup-node@v4
26+
with:
27+
node-version: 20
28+
29+
- name: Install dependencies
30+
run: cd docs && npm ci
31+
32+
- name: Extract messages
33+
run: cd docs && node scripts/extract-messages.mjs
34+
35+
- name: Check for untranslated strings
36+
id: changes
37+
run: |
38+
cd docs/messages
39+
# Check if any non-English file has empty string values or is missing keys from en.json
40+
EN_KEYS=$(python3 -c "import json; f=open('en.json'); d=json.load(f); print(len(d))")
41+
NEEDS_TRANSLATION=false
42+
for file in zh.json ja.json de.json pl.json pt.json it.json fr.json ko.json es.json; do
43+
LANG_KEYS=$(python3 -c "import json; f=open('$file'); d=json.load(f); print(len(d))")
44+
EMPTY=$(python3 -c "import json; f=open('$file'); d=json.load(f); print(sum(1 for v in d.values() if v == ''))")
45+
if [ "$EMPTY" -gt 0 ] || [ "$LANG_KEYS" -ne "$EN_KEYS" ]; then
46+
NEEDS_TRANSLATION=true
47+
break
48+
fi
49+
done
50+
echo "has_changes=$NEEDS_TRANSLATION" >> "$GITHUB_OUTPUT"
51+
52+
- name: Run Claude Code
53+
if: steps.changes.outputs.has_changes == 'true'
54+
id: claude
55+
uses: anthropics/claude-code-action@v1
56+
with:
57+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
58+
prompt: |
59+
The message extraction step has just run and updated the translation files in docs/messages/.
60+
New keys have been added with empty string values to the non-English locale files.
61+
62+
Check the translation files in docs/messages/. The source of truth is en.json.
63+
64+
For each non-English translation file (zh.json, ja.json, de.json, pl.json, pt.json, it.json, fr.json, ko.json, es.json):
65+
1. Find any keys that have empty string values (these are newly extracted, untranslated strings)
66+
2. Find any keys in the translation file that still have English text (were not actually translated)
67+
3. Translate the missing/untranslated strings into the appropriate language using en.json as reference
68+
4. Maintain the same key order as en.json
69+
5. Also remove any keys that exist in the translation file but NOT in en.json (stale keys)
70+
71+
Language mapping:
72+
- zh.json = Chinese (Simplified)
73+
- ja.json = Japanese
74+
- de.json = German
75+
- pl.json = Polish
76+
- pt.json = Portuguese (Brazilian)
77+
- it.json = Italian
78+
- fr.json = French
79+
- ko.json = Korean
80+
- es.json = Spanish
81+
82+
Important:
83+
- Preserve {placeholder} variables exactly as they appear in the English strings
84+
- Keep translations natural and idiomatic, not literal
85+
- Maintain consistent terminology within each language file
86+
- Do NOT modify en.json
87+
- If there are no missing translations, do nothing
88+
89+
After making changes, create a PR with the title "Update docs translations" and a summary of what was added/fixed.
90+
claude_args: >-
91+
--model claude-sonnet-4-6
92+
--max-turns 30
93+
--allowedTools "Edit" "Read" "Write" "Glob" "Grep"
94+
"Bash(git *)" "Bash(gh pr *)" "Bash(python3 *)" "Bash(node *)"

docs/messages/de.json

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
{
2+
"z3RtOY": "50% Provision",
3+
"wm0rI9": "Verdienen Sie 50% jeder Zahlung, die Ihre Empfehlungen leisten",
4+
"U06mqt": "12 Monate wiederkehrend",
5+
"ISu1KA": "Erhalten Sie jeden Monat eine Zahlung für ein volles Jahr pro Empfehlung",
6+
"5subrz": "60-Tage-Cookie",
7+
"YVAZY4": "Großzügiges 60-Tage-Attributionsfenster für alle Empfehlungslinks",
8+
"LxMW+7": "Monatliche Auszahlungen",
9+
"CXowvE": "Zuverlässige monatliche Auszahlungen über Rewardful",
10+
"8CSTli": "50% Partnerprogramm",
11+
"SO3ub+": "Verdienen Sie 12 Monate lang 50% wiederkehrende Provision, indem Sie Kunden an Rybbit weiterempfehlen.",
12+
"SeSQP7": "Am Programm teilnehmen",
13+
"/oNE8Q": "So funktioniert es",
14+
"39AHJm": "Registrieren",
15+
"GjUKIv": "Erstellen Sie Ihr kostenloses Partner-Konto und erhalten Sie Ihren einzigartigen Empfehlungslink.",
16+
"OKhRC6": "Teilen",
17+
"XsE4j9": "Teilen Sie Ihren Link mit Ihrem Publikum – Blogbeiträge, soziale Medien, Newsletter usw.",
18+
"W9cTVS": "Verdienen",
19+
"VsW03f": "Verdienen Sie 50% jeder Zahlung für 12 Monate, wenn sich jemand über Ihren Link anmeldet.",
20+
"zOvqpE": "SVG",
21+
"4425O2": "PNG",
22+
"NfU3/O": "Horizontal",
23+
"lKv8ex": "Standard",
24+
"s7k6WI": "Für dunklen Hintergrund",
25+
"Nsm79V": "Hellgrün",
26+
"8zkJnU": "Dunkelgrün",
27+
"OAG+sQ": "Weiß",
28+
"XjGbuY": "Schwarz",
29+
"cLrroF": "Vertikal",
30+
"xbPgRr": "Frosch-Symbol",
31+
"5Ps5wi": "Wortmarke",
32+
"VbSu0i": "Marken-Kit",
33+
"gDSHHG": "Laden Sie offizielle Rybbit-Logos und -Assets herunter. Alle Logos sind in SVG und PNG verfügbar für die Verwendung in Ihren Projekten, Integrationen und Inhalten.",
34+
"XC/AZv": "Nutzungsrichtlinien",
35+
"0ceNqw": "Erlaubt",
36+
"+F17u9": "Das Logo in seinen ursprünglichen Proportionen verwenden",
37+
"qFMRrb": "Die Varianten „Für dunklen Hintergrund\" auf dunklen Hintergründen verwenden",
38+
"k9cnTk": "Ausreichend Freiraum um das Logo einhalten",
39+
"hNzuTS": "SVG-Format für beste Qualität verwenden, wenn möglich",
40+
"Rs1r5E": "Nicht erlaubt",
41+
"7LfzKg": "Das Logo strecken oder verzerren",
42+
"+okw7x": "Die Logo-Farben über die vorgesehenen Varianten hinaus verändern",
43+
"hgvFr9": "Effekte wie Schatten oder Farbverläufe zum Logo hinzufügen",
44+
"Z5n7Ks": "Das Logo in einer Weise verwenden, die eine Empfehlung impliziert",
45+
"2AIDi/": "Rybbit vs. {competitor}",
46+
"j8QCz9": "Vergleichen Sie die wichtigsten Funktionen von Rybbit und {competitor}.",
47+
"M0QQUY": "Ihre Website tracken",
48+
"k6I8wU": "Live-Demo",
49+
"Ids8mE": "30 Tage Geld-zurück-Garantie. Keine Kreditkarte erforderlich.",
50+
"CIZcQY": "Warum Rybbit statt {competitor}?",
51+
"hZOGLS": "Kontakt",
52+
"bZ6o5N": "Haben Sie Fragen zu Rybbit? Wir helfen Ihnen gerne! Kontaktieren Sie uns über einen dieser Kanäle:",
53+
"sy+pv5": "E-Mail",
54+
"FvmV6q": "Discord",
55+
"5kOWki": "Unserem Discord-Server beitreten",
56+
"hChpQk": "X (Twitter)",
57+
"syB78Q": "Kundensupport",
58+
"BLgN6D": "Wenn Sie Kunde sind und Hilfe mit Ihrem Konto benötigen, kontaktieren Sie uns bitte unter",
59+
"0vjltt": "Wir versuchen, alle Support-Anfragen innerhalb von 12 Stunden zu beantworten.",
60+
"R9nLfy": "White-Labeling & Individuelle Lösungen",
61+
"yoxV98": "Möchten Sie Rybbit für Ihre Organisation unter eigenem Namen anbieten oder benötigen Sie eine maßgeschneiderte Analytics-Lösung? Wir bieten individuelle Implementierungen für Ihre spezifischen Anforderungen.",
62+
"Sx+ZtL": "Kontaktieren Sie uns unter",
63+
"Cl4LaP": "um Ihre Anforderungen zu besprechen.",
64+
"+NmCFj": "Seitenaufrufe",
65+
"3iGYno": "Sehen Sie, welche Seiten die meiste Aufmerksamkeit auf sich ziehen, und optimieren Sie Ihre Content-Strategie.",
66+
"hjKmuO": "Besucher",
67+
"smgURQ": "Detaillierte Besucherprofile mit Gerät-, Browser-, Betriebssystem- und Standortdaten.",
68+
"RrkSf6": "Absprungrate",
69+
"oXIDiN": "Erkennen Sie, welche Seiten Besucher ansprechen und welche verbessert werden müssen.",
70+
"mQmIQ8": "Traffic-Quellen",
71+
"DhSYMs": "Erfahren Sie, woher Ihre Besucher kommen, um Ihre Marketingkanäle zu optimieren.",
72+
"rvirM2": "Standort",
73+
"gfOPoH": "Geografische Daten bis auf Stadtebene für globale Zielgruppeneinblicke.",
74+
"+20FW7": "Geräte",
75+
"rS3r7E": "Optimieren Sie Ihr Design für die Geräte, die Ihre Besucher tatsächlich nutzen.",
76+
"GsBRWL": "Sprachen",
77+
"rj+TIB": "Erfahren Sie, welche Sprachen Ihre Zielgruppe spricht, um zielgerichtete Inhalte zu erstellen.",
78+
"DalKt5": "Filterung",
79+
"kbbcFO": "Analysieren Sie Ihre Daten, um Muster und umsetzbare Erkenntnisse zu gewinnen.",
80+
"rbDdJ5": "Echtzeit-Daten",
81+
"NlZDDR": "Sofortige Analytics-Aktualisierungen – sehen Sie, was gerade auf Ihrer Website passiert.",
82+
"vR+VsD": "Benutzerdefinierte Ereignisse",
83+
"oYW1tt": "Verfolgen Sie Anmeldungen, Käufe, Downloads und jede benutzerdefinierte Nutzerinteraktion.",
84+
"+SU1uM": "Benutzerdefinierte Daten",
85+
"IlDeTu": "Fügen Sie Ereignissen benutzerdefinierte Eigenschaften für tiefere Verhaltenseinblicke hinzu.",
86+
"GJ+UIz": "UTM-Tracking",
87+
"mJyuBa": "Erfassen Sie UTM-Parameter automatisch, um die Kampagnenleistung zu messen.",
88+
"qCcwo3": "Links",
89+
"MvnG38": "Verfolgen Sie Link-Klicks, um die Wirksamkeit externer Kampagnen zu messen.",
90+
"UHOrJ+": "Bot-Blockierung",
91+
"0l8nN1": "Filtern Sie Bots und Crawler automatisch heraus, um Ihre Daten sauber zu halten.",
92+
"w2bI2y": "Session-Replay",
93+
"yPepzQ": "Schauen Sie sich echte Nutzersitzungen an, um Usability-Probleme und Verbesserungsmöglichkeiten zu entdecken.",
94+
"hmMxdb": "Web Vitals",
95+
"Ca/22t": "Überwachen Sie Core Web Vitals, um schnelle und reibungslose Nutzererlebnisse zu gewährleisten.",
96+
"puhcpn": "Funnels",
97+
"CMVQfW": "Visualisieren Sie Konversionspfade und ermitteln Sie genau, wo Besucher abspringen.",
98+
"XHLYdJ": "Ziele",
99+
"lCVOu+": "Legen Sie Konversionsziele fest und überwachen Sie diese, um Geschäftsziele zu verfolgen.",
100+
"btihtD": "Journey",
101+
"YWTdof": "Kartieren Sie, wie Nutzer Ihre Website von der Landingpage bis zur Konversion navigieren.",
102+
"hkTdhp": "Globus-Ansichten",
103+
"AWPaq/": "Beobachten Sie den Traffic-Fluss rund um die Welt mit beeindruckenden 3D-Globus-Visualisierungen.",
104+
"D5j4/z": "Fehlerverfolgung",
105+
"lGzcx2": "Erfassen Sie JavaScript-Fehler in Echtzeit mit vollem Kontext, um sie schnell zu beheben.",
106+
"zNqZ6o": "Nutzersitzungen",
107+
"171hUL": "Verfolgen Sie vollständige Nutzer-Journeys vom ersten Besuch bis zur Konversion.",
108+
"WDs9bj": "Google Search Console",
109+
"ReONsT": "Sehen Sie, wie organische Suche den Traffic zusammen mit Ihren Analytics-Daten beeinflusst.",
110+
"493J7R": "Vergleichen",
111+
"SJrCdF": "Vergleichen Sie Metriken mit früheren Zeiträumen, um Trends zu erkennen und Wachstum zu messen.",
112+
"4V0ZD3": "Nutzerprofile",
113+
"d/2MX2": "Sehen Sie vollständige Nutzerhistorien einschließlich aller Sitzungen, Ereignisse und Interaktionen über ihre gesamte Lebensdauer.",
114+
"nL6Jl0": "Bindung",
115+
"sjDjks": "Verfolgen Sie wiederkehrende Besucher, um Loyalität und Engagement zu messen.",
116+
"JD2pwH": "Organisationen",
117+
"gpe9bH": "Organisieren Sie Websites und teilen Sie Zugänge nahtlos im Team.",
118+
"Lh3wDO": "Öffentliche Dashboards",
119+
"Z+7p4b": "Machen Sie Ihre Dashboards mit einem Klick öffentlich zugänglich – kein Login erforderlich.",
120+
"nWezmX": "Private Link-Freigabe",
121+
"RUnbPu": "Teilen Sie passwortgeschützte Dashboard-Links mit detaillierter Kontrolle über die sichtbaren Daten.",
122+
"DPkXAd": "RBAC",
123+
"+In3Hd": "Rollenbasierte Zugriffskontrolle zur Definition präziser Berechtigungen für verschiedene Teammitglieder.",
124+
"KKpIyA": "GDPR & CCPA",
125+
"R8Iz6e": "Privacy-first-Design bedeutet, dass Sie sofort konform sind. Keine persönlichen Daten werden erfasst.",
126+
"bwQ+bu": "Datenanonymisierung",
127+
"K/AxQK": "Jeder Besucher ist standardmäßig anonym – Datenschutz ohne Einbußen bei den Erkenntnissen.",
128+
"IpiiG8": "Keine Cookies",
129+
"8GO6Qk": "Null Cookies, null Cookie-Banner. Sauberere und schnellere Erlebnisse für Besucher.",
130+
"pIDIXS": "Dateneigentum",
131+
"m5qysm": "Ihre Daten, Ihre Regeln. Selbst hosten oder unsere Cloud nutzen – Sie haben immer die Kontrolle.",
132+
"oKPsHI": "Vollständig verwaltet",
133+
"pMG90L": "Wir kümmern uns um Infrastruktur, Updates und Skalierung – Sie konzentrieren sich auf Wachstum.",
134+
"Dsf7RD": "Hohe Performance",
135+
"1J91Ms": "Verarbeiten Sie Millionen von Ereignissen mühelos. Abfragen bleiben bei jeder Skalierung schnell.",
136+
"NWuvtB": "In EU gehostet",
137+
"I0hRdQ": "GDPR-konforme Infrastruktur, gehostet in europäischen Rechenzentren für Datensouveränität.",
138+
"n4bZ3J": "E-Mail-Berichte",
139+
"oNLHz6": "Automatisierte E-Mail-Berichte, täglich, wöchentlich oder monatlich in Ihrem Posteingang.",
140+
"0QVtWt": "E-Mail-Support",
141+
"NbAYXS": "Erhalten Sie Hilfe, wenn Sie sie brauchen, mit schnellem E-Mail-Support von unserem Team.",
142+
"Z77U9s": "API-Zugang",
143+
"T/yWuy": "Vollständiger API-Zugang zum Abfragen Ihrer Daten und zum Erstellen benutzerdefinierter Integrationen.",
144+
"hEeLPx": "Alles, was Sie brauchen, um Ihr Publikum zu verstehen",
145+
"jT0EEm": "Leistungsstarke Analytics ohne Komplexität. Verfolgen, analysieren und optimieren Sie Ihre Website mit datenschutzfreundlichen Tools, die einfach funktionieren.",
146+
"/aBLH2": "Jetzt starten",
147+
"VjWr1w": "30 Tage Geld-zurück-Garantie. Keine Kreditkarte erforderlich",
148+
"iGB6GJ": "Kern-Web-Analytics",
149+
"Tw0saF": "Verfolgen Sie jede wichtige Kennzahl. Treffen Sie datengestützte Entscheidungen mit umfassender Analytics, die auf Klarheit ausgelegt ist.",
150+
"WYPIM3": "Erweiterte Analytics",
151+
"txhE11": "Tauchen Sie tiefer ein mit leistungsstarken Tools für Session-Replay, Funnels, Vergleiche und erweiterte Nutzeranalysen.",
152+
"qxg3uo": "Zugang",
153+
"1BgHzy": "Flexible Freigabe- und Kollaborationstools, um Erkenntnisse sicher in die richtigen Hände zu geben.",
154+
"cXBJ7U": "Datenschutz",
155+
"Vkku8z": "Datenschutz ist kein Feature – er ist das Fundament. Analytics, die Ihre Nutzer respektieren und automatisch Vorschriften einhalten.",
156+
"fiPvwY": "Cloud",
157+
"4dZSmd": "Enterprise-Infrastruktur ohne Enterprise-Kopfschmerzen. Zuverlässig, schnell und vollständig verwaltet.",
158+
"P+1fsm": "Bereit loszulegen?",
159+
"iARoet": "Schließen Sie sich Tausenden von Unternehmen an, die Rybbit nutzen, um ihr Publikum zu verstehen",
160+
"8KOs6d": "Einrichtung in Minuten",
161+
"DQLZOH": "Fügen Sie eine Codezeile hinzu und sehen Sie sofort Echtzeit-Daten.",
162+
"eWSpFZ": "Sehen Sie, was gerade auf Ihrer Website passiert.",
163+
"ab6F5f": "Schauen Sie sich echte Nutzersitzungen an, um Usability-Probleme zu entdecken.",
164+
"11F8TW": "Visualisieren Sie Konversionspfade und finden Sie heraus, wo Besucher abspringen.",
165+
"nn1RWe": "Nutzer-Journeys",
166+
"lTZLIa": "Kartieren Sie, wie Nutzer von der Landingpage bis zur Konversion navigieren.",
167+
"G9x+Eb": "Überwachen Sie Core Web Vitals für schnelle Nutzererlebnisse.",
168+
"U010WF": "Verfolgen Sie Anmeldungen, Käufe und jede Nutzerinteraktion.",
169+
"j2zCdA": "Filtern Sie Bots automatisch heraus, um die Daten sauber zu halten.",
170+
"IJN9XR": "Null Cookies, null Banner. Sauberere Besuchererlebnisse.",
171+
"TzaXCc": "Privacy-first-Design bedeutet, dass Sie sofort konform sind.",
172+
"phoBtx": "Beobachten Sie den Traffic-Fluss mit beeindruckenden 3D-Globus-Visualisierungen.",
173+
"rCSmI9": "Open Source",
174+
"cv20js": "100% Open Source. Selbst hosten oder unsere Cloud nutzen.",
175+
"xwEc8K": "API",
176+
"ub/l1k": "Vollständiger API-Zugang zum Erstellen benutzerdefinierter Integrationen.",
177+
"S71TkT": "Datenexport",
178+
"DXEfMv": "Exportieren Sie Ihre Rohdaten jederzeit. Kein Vendor-Lock-in.",
179+
"OzJhnO": "Automatisierte Berichte direkt in Ihren Posteingang.",
180+
"oScozr": "Websites und Team-Zugänge an einem Ort verwalten.",
181+
"92jWMn": "Der moderne Google Analytics-Ersatz",
182+
"HJItgO": "Rybbit ist eine leistungsstarke, schlanke und sehr benutzerfreundliche Analytics-Lösung. Cookielos und GDPR-konform. Gehostet auf EU-Infrastruktur in Deutschland",
183+
"RnP+1g": "Vertraut von über 4.000 Organisationen weltweit",
184+
"nkbZhS": "Warum Rybbit",
185+
"zvwLaK": "Alles, was Sie brauchen",
186+
"r5zJKU": "Leistungsstarke Analytics ohne Komplexität. Datenschutzfreundliche Tools, die einfach funktionieren.",
187+
"OZ0o2j": "Analytics neu gedacht",
188+
"X3MpW7": "In Aktion sehen",
189+
"DC5XdE": "Leistungsstarke Tools, die auf Klarheit ausgelegt sind, nicht auf Komplexität.",
190+
"mhCOn8": "Nahtlose Integration",
191+
"VAwHD9": "Funktioniert mit all Ihren bevorzugten Plattformen",
192+
"0dylYr": "Integrieren Sie Rybbit in wenigen Minuten mit jeder Plattform",
193+
"KpYifr": "Nutzerstimmen",
194+
"6UovbP": "Menschen lieben Rybbit",
195+
"9AgcXH": "Sehen Sie, was andere über Rybbit Analytics denken",
196+
"QA1wrZ": "Häufig gestellte Fragen",
197+
"wEJSTD": "Alles, was Sie über Rybbit Analytics wissen müssen",
198+
"wbsq7O": "Nutzung",
199+
"9h0k8z": "Monatliche Seitenaufrufe",
200+
"luSdrB": "100K – 250K",
201+
"nVNxrx": "100K – 20M+",
202+
"Sjo1P4": "Individuell",
203+
"w1BgH0": "Anzahl der Websites",
204+
"TySFLg": "Bis zu {count}",
205+
"ekXood": "Unbegrenzt",
206+
"Cg1T7H": "Teammitglieder",
207+
"ZXp0z1": "Funktionen",
208+
"LkmL5V": "Kern-Analytics-Dashboard",
209+
"mQdOqI": "Erweiterte Filterung",
210+
"A04RSa": "Bot-Filterung",
211+
"CneAG1": "Echtzeit-Globus",
212+
"o+rKrp": "Seitenansicht",
213+
"Z3EDd9": "Sitzungen",
214+
"08hqOd": "Journeys",
215+
"03LxdA": "Session-Replays",
216+
"dXpfD3": "Single Sign-On (SSO)",
217+
"jIJLVQ": "Dedizierte isolierte Instanz",
218+
"EDpD+a": "On-Premise-Installation",
219+
"+Q44mU": "Individuelle Funktionen",
220+
"U0HjLb": "Whitelabeling",
221+
"yzPwT3": "Daten & Datenschutz",
222+
"fl5VcH": "Datenschutzfreundlich",
223+
"7w0u2T": "Keine Cookies erforderlich",
224+
"7U1S2Q": "Datenspeicherung",
225+
"AwuN57": "6 Monate",
226+
"CNTrZU": "2 Jahre",
227+
"dFw5uL": "5 Jahre",
228+
"jhz7Wq": "Unbegrenzt",
229+
"lFT9pP": "Support & Integrationen",
230+
"HqRNN8": "Support",
231+
"4CrCbD": "Community",
232+
"8lCjAM": "Priorität",
233+
"+VlMOt": "Enterprise + Slack",
234+
"iGoVlN": "Manuelle Rechnungsstellung",
235+
"+zPH/u": "Uptime SLA",
236+
"NimyRc": "Pläne vergleichen",
237+
"fNCCY7": "Basic",
238+
"cb2kY6": "Standard",
239+
"R/eOkj": "Pro",
240+
"CDLJ0W": "Enterprise",
241+
"WnQ/AZ": "Kontaktieren Sie uns"
242+
}

0 commit comments

Comments
 (0)