From 2b36121bb56bd9ce2ea2b2f8bd45631e3062cb30 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 10 May 2025 14:25:47 +0300 Subject: [PATCH 1/2] fix language select to work in client-side prod --- i18n.js | 58 ------------ src/components/Language/LanguageSelector.tsx | 92 +++++++++---------- src/i18n/i18n.ts | 54 +++++++++++ {public => src/i18n}/locales/de/auth.json | 0 {public => src/i18n}/locales/de/core.json | 0 {public => src/i18n}/locales/de/tutorial.json | 0 {public => src/i18n}/locales/en/auth.json | 0 {public => src/i18n}/locales/en/core.json | 0 {public => src/i18n}/locales/en/group.json | 0 {public => src/i18n}/locales/en/tutorial.json | 0 {public => src/i18n}/locales/es/auth.json | 0 {public => src/i18n}/locales/es/core.json | 0 {public => src/i18n}/locales/es/tutorial.json | 0 {public => src/i18n}/locales/fr/auth.json | 0 {public => src/i18n}/locales/fr/core.json | 0 {public => src/i18n}/locales/fr/tutorial.json | 0 {public => src/i18n}/locales/it/auth.json | 0 {public => src/i18n}/locales/it/core.json | 0 {public => src/i18n}/locales/it/group.json | 0 {public => src/i18n}/locales/it/tutorial.json | 0 {public => src/i18n}/locales/ru/auth.json | 0 {public => src/i18n}/locales/ru/core.json | 0 {public => src/i18n}/locales/ru/tutorial.json | 0 src/main.tsx | 2 +- tsconfig.json | 3 +- 25 files changed, 102 insertions(+), 107 deletions(-) delete mode 100644 i18n.js create mode 100644 src/i18n/i18n.ts rename {public => src/i18n}/locales/de/auth.json (100%) rename {public => src/i18n}/locales/de/core.json (100%) rename {public => src/i18n}/locales/de/tutorial.json (100%) rename {public => src/i18n}/locales/en/auth.json (100%) rename {public => src/i18n}/locales/en/core.json (100%) rename {public => src/i18n}/locales/en/group.json (100%) rename {public => src/i18n}/locales/en/tutorial.json (100%) rename {public => src/i18n}/locales/es/auth.json (100%) rename {public => src/i18n}/locales/es/core.json (100%) rename {public => src/i18n}/locales/es/tutorial.json (100%) rename {public => src/i18n}/locales/fr/auth.json (100%) rename {public => src/i18n}/locales/fr/core.json (100%) rename {public => src/i18n}/locales/fr/tutorial.json (100%) rename {public => src/i18n}/locales/it/auth.json (100%) rename {public => src/i18n}/locales/it/core.json (100%) rename {public => src/i18n}/locales/it/group.json (100%) rename {public => src/i18n}/locales/it/tutorial.json (100%) rename {public => src/i18n}/locales/ru/auth.json (100%) rename {public => src/i18n}/locales/ru/core.json (100%) rename {public => src/i18n}/locales/ru/tutorial.json (100%) diff --git a/i18n.js b/i18n.js deleted file mode 100644 index 5277e59..0000000 --- a/i18n.js +++ /dev/null @@ -1,58 +0,0 @@ -import { initReactI18next } from 'react-i18next'; -import HttpBackend from 'i18next-http-backend'; -import LocalStorageBackend from 'i18next-localstorage-backend'; -import HttpApi from 'i18next-http-backend'; -import i18n from 'i18next'; -import LanguageDetector from 'i18next-browser-languagedetector'; - -// Detect environment -const isDev = process.env.NODE_ENV === 'development'; - -// Register custom postProcessor: it capitalizes the first letter of a translation- -// Usage: -// t('greeting', { postProcess: 'capitalize' }) -const capitalize = { - type: 'postProcessor', - name: 'capitalize', - process: (value) => { - return value.charAt(0).toUpperCase() + value.slice(1); - }, -}; - -export const supportedLanguages = { - de: { name: 'Deutsch', flag: '🇩🇪' }, - en: { name: 'English', flag: '🇺🇸' }, - es: { name: 'Español', flag: '🇪🇸' }, - fr: { name: 'Français', flag: '🇫🇷' }, - it: { name: 'Italiano', flag: '🇮🇹' }, - ru: { name: 'Русский', flag: '🇷🇺' }, -}; - -i18n - .use(HttpApi) - .use(LanguageDetector) - .use(initReactI18next) - .use(capitalize) - .init({ - backend: { - backends: [LocalStorageBackend, HttpBackend], - backendOptions: [ - { - expirationTime: 7 * 24 * 60 * 60 * 1000, // 7 days - }, - { - loadPath: '/locales/{{lng}}/{{ns}}.json', - }, - ], - }, - debug: isDev, - fallbackLng: 'en', - interpolation: { - escapeValue: false, - }, - lng: navigator.language, - ns: ['auth', 'core', 'group', 'tutorial'], - supportedLngs: Object.keys(supportedLanguages), - }); - -export default i18n; diff --git a/src/components/Language/LanguageSelector.tsx b/src/components/Language/LanguageSelector.tsx index 751c0a9..ff78246 100644 --- a/src/components/Language/LanguageSelector.tsx +++ b/src/components/Language/LanguageSelector.tsx @@ -1,7 +1,13 @@ -import { useEffect, useRef, useState } from 'react'; +import { useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { supportedLanguages } from '../../../i18n'; -import { Tooltip, useTheme } from '@mui/material'; +import { supportedLanguages } from '../../i18n/i18n'; +import { + FormControl, + MenuItem, + Select, + Tooltip, + useTheme, +} from '@mui/material'; const LanguageSelector = () => { const { i18n, t } = useTranslation(['core']); @@ -19,20 +25,6 @@ const LanguageSelector = () => { const { name, flag } = supportedLanguages[currentLang] || supportedLanguages['en']; - // Detect clicks outside the component - useEffect(() => { - const handleClickOutside = (event) => { - if (selectorRef.current && !selectorRef.current.contains(event.target)) { - setShowSelect(false); - } - }; - - document.addEventListener('mousedown', handleClickOutside); - return () => { - document.removeEventListener('mousedown', handleClickOutside); - }; - }, []); - return (
{ position: 'absolute', }} > - - {showSelect ? ( - - ) : ( + {!showSelect && ( + - )} - + + )} + + {showSelect && ( + + + + )}
); }; diff --git a/src/i18n/i18n.ts b/src/i18n/i18n.ts new file mode 100644 index 0000000..8d267be --- /dev/null +++ b/src/i18n/i18n.ts @@ -0,0 +1,54 @@ +import i18n from 'i18next'; +import { initReactI18next } from 'react-i18next'; +import LanguageDetector from 'i18next-browser-languagedetector'; + +const capitalize = { + type: 'postProcessor', + name: 'capitalize', + process: (value: string) => value.charAt(0).toUpperCase() + value.slice(1), +}; + +export const supportedLanguages = { + de: { name: 'Deutsch', flag: '🇩🇪' }, + en: { name: 'English', flag: '🇺🇸' }, + es: { name: 'Español', flag: '🇪🇸' }, + fr: { name: 'Français', flag: '🇫🇷' }, + it: { name: 'Italiano', flag: '🇮🇹' }, + ru: { name: 'Русский', flag: '🇷🇺' }, +}; + +// Load all JSON files under locales/**/* +const modules = import.meta.glob('./locales/**/*.json', { + eager: true, +}) as Record; + +// Construct i18n resources object +const resources: Record> = {}; + +for (const path in modules) { + // Path format: './locales/en/core.json' + const match = path.match(/\.\/locales\/([^/]+)\/([^/]+)\.json$/); + if (!match) continue; + + const [, lang, ns] = match; + resources[lang] = resources[lang] || {}; + resources[lang][ns] = modules[path].default; +} + +i18n + .use(initReactI18next) + .use(LanguageDetector) + .use(capitalize as any) + .init({ + resources, + fallbackLng: 'en', + lng: navigator.language, + supportedLngs: Object.keys(supportedLanguages), + ns: ['core', 'auth', 'group', 'tutorial'], + defaultNS: 'core', + interpolation: { escapeValue: false }, + react: { useSuspense: false }, + debug: import.meta.env.MODE === 'development', + }); + +export default i18n; diff --git a/public/locales/de/auth.json b/src/i18n/locales/de/auth.json similarity index 100% rename from public/locales/de/auth.json rename to src/i18n/locales/de/auth.json diff --git a/public/locales/de/core.json b/src/i18n/locales/de/core.json similarity index 100% rename from public/locales/de/core.json rename to src/i18n/locales/de/core.json diff --git a/public/locales/de/tutorial.json b/src/i18n/locales/de/tutorial.json similarity index 100% rename from public/locales/de/tutorial.json rename to src/i18n/locales/de/tutorial.json diff --git a/public/locales/en/auth.json b/src/i18n/locales/en/auth.json similarity index 100% rename from public/locales/en/auth.json rename to src/i18n/locales/en/auth.json diff --git a/public/locales/en/core.json b/src/i18n/locales/en/core.json similarity index 100% rename from public/locales/en/core.json rename to src/i18n/locales/en/core.json diff --git a/public/locales/en/group.json b/src/i18n/locales/en/group.json similarity index 100% rename from public/locales/en/group.json rename to src/i18n/locales/en/group.json diff --git a/public/locales/en/tutorial.json b/src/i18n/locales/en/tutorial.json similarity index 100% rename from public/locales/en/tutorial.json rename to src/i18n/locales/en/tutorial.json diff --git a/public/locales/es/auth.json b/src/i18n/locales/es/auth.json similarity index 100% rename from public/locales/es/auth.json rename to src/i18n/locales/es/auth.json diff --git a/public/locales/es/core.json b/src/i18n/locales/es/core.json similarity index 100% rename from public/locales/es/core.json rename to src/i18n/locales/es/core.json diff --git a/public/locales/es/tutorial.json b/src/i18n/locales/es/tutorial.json similarity index 100% rename from public/locales/es/tutorial.json rename to src/i18n/locales/es/tutorial.json diff --git a/public/locales/fr/auth.json b/src/i18n/locales/fr/auth.json similarity index 100% rename from public/locales/fr/auth.json rename to src/i18n/locales/fr/auth.json diff --git a/public/locales/fr/core.json b/src/i18n/locales/fr/core.json similarity index 100% rename from public/locales/fr/core.json rename to src/i18n/locales/fr/core.json diff --git a/public/locales/fr/tutorial.json b/src/i18n/locales/fr/tutorial.json similarity index 100% rename from public/locales/fr/tutorial.json rename to src/i18n/locales/fr/tutorial.json diff --git a/public/locales/it/auth.json b/src/i18n/locales/it/auth.json similarity index 100% rename from public/locales/it/auth.json rename to src/i18n/locales/it/auth.json diff --git a/public/locales/it/core.json b/src/i18n/locales/it/core.json similarity index 100% rename from public/locales/it/core.json rename to src/i18n/locales/it/core.json diff --git a/public/locales/it/group.json b/src/i18n/locales/it/group.json similarity index 100% rename from public/locales/it/group.json rename to src/i18n/locales/it/group.json diff --git a/public/locales/it/tutorial.json b/src/i18n/locales/it/tutorial.json similarity index 100% rename from public/locales/it/tutorial.json rename to src/i18n/locales/it/tutorial.json diff --git a/public/locales/ru/auth.json b/src/i18n/locales/ru/auth.json similarity index 100% rename from public/locales/ru/auth.json rename to src/i18n/locales/ru/auth.json diff --git a/public/locales/ru/core.json b/src/i18n/locales/ru/core.json similarity index 100% rename from public/locales/ru/core.json rename to src/i18n/locales/ru/core.json diff --git a/public/locales/ru/tutorial.json b/src/i18n/locales/ru/tutorial.json similarity index 100% rename from public/locales/ru/tutorial.json rename to src/i18n/locales/ru/tutorial.json diff --git a/src/main.tsx b/src/main.tsx index 0a35316..d6da0d2 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -5,7 +5,7 @@ import './messaging/messagesToBackground'; import { MessageQueueProvider } from './MessageQueueContext.tsx'; import { ThemeProvider } from './components/Theme/ThemeContext.tsx'; import { CssBaseline } from '@mui/material'; -import '../i18n'; +import './i18n/i18n.js'; createRoot(document.getElementById('root')!).render( <> diff --git a/tsconfig.json b/tsconfig.json index 24c5d39..95bc40f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,12 +8,13 @@ "skipLibCheck": true, /* Bundler mode */ - "moduleResolution": "bundler", + "moduleResolution": "node", "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", + "allowSyntheticDefaultImports": true, /* Linting */ "strict": true, From 3ec35c6d022bf34a1bec393af05a2ca3c2381f0f Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sat, 10 May 2025 15:18:14 +0200 Subject: [PATCH 2/2] Update translation files (core and group) --- src/i18n/locales/de/core.json | 134 ++++++++++++++++++++++++--------- src/i18n/locales/de/group.json | 105 ++++++++++++++++++++++++++ src/i18n/locales/en/core.json | 45 +++++++---- src/i18n/locales/en/group.json | 64 +++++++++++++--- src/i18n/locales/es/core.json | 126 +++++++++++++++++++++++-------- src/i18n/locales/es/group.json | 105 ++++++++++++++++++++++++++ src/i18n/locales/fr/core.json | 126 +++++++++++++++++++++++-------- src/i18n/locales/fr/group.json | 105 ++++++++++++++++++++++++++ src/i18n/locales/it/core.json | 90 +++++++++++++--------- src/i18n/locales/it/group.json | 92 +++++++++++++++------- src/i18n/locales/ru/core.json | 114 +++++++++++++++++++++------- src/i18n/locales/ru/group.json | 105 ++++++++++++++++++++++++++ 12 files changed, 1000 insertions(+), 211 deletions(-) create mode 100644 src/i18n/locales/de/group.json create mode 100644 src/i18n/locales/es/group.json create mode 100644 src/i18n/locales/fr/group.json create mode 100644 src/i18n/locales/ru/group.json diff --git a/src/i18n/locales/de/core.json b/src/i18n/locales/de/core.json index c2b7a29..c0f4b8d 100644 --- a/src/i18n/locales/de/core.json +++ b/src/i18n/locales/de/core.json @@ -1,69 +1,131 @@ { - "add": "hinzufügen", - "cancel": "abbrechen", - "choose": "auswählen", - "close": "schließen", - "continue": "fortfahren", + "action": { + "add": "hinzufügen", + "accept": "akzeptieren", + "backup_account": "Konto sichern", + "backup_wallet": "Wallet sichern", + "cancel": "abbrechen", + "cancel_invitation": "Einladung abbrechen", + "change": "ändern", + "change_language": "Sprache ändern", + "choose": "wählen", + "close": "schließen", + "continue": "fortfahren", + "continue_logout": "mit dem Abmelden fortfahren", + "create_thread": "Thread erstellen", + "decline": "ablehnen", + "decrypt": "entschlüsseln", + "edit": "bearbeiten", + "export": "exportieren", + "import": "importieren", + "invite": "einladen", + "join": "beitreten", + "logout": "abmelden", + "new": { + "post": "neuer Beitrag", + "thread": "neuer Thread" + }, + "notify": "benachrichtigen", + "post": "veröffentlichen", + "post_message": "Nachricht senden" + }, + "admin": "Administrator", "core": { "block_height": "Blockhöhe", "information": "Kerninformationen", "peers": "verbundene Peers", - "version": "Kernversion" + "version": "Core-Version" + }, + "ui": { + "version": "UI-Version" + }, + "count": { + "none": "keine", + "one": "eins" }, "description": "Beschreibung", - "edit": "bearbeiten", - "export": "exportieren", - "import": "importieren", + "downloading_qdn": "Herunterladen von QDN", + "fee": { + "payment": "Zahlungsgebühr", + "publish": "Veröffentlichungsgebühr" + }, + "general_settings": "allgemeine Einstellungen", "last_height": "letzte Höhe", - "loading": "Lade...", - "logout": "abmelden", - "minting_status": "Präge-Status", - "payment_notification": "Zahlungsbenachrichtigung", - "price": "Preis", - "q_mail": "Q-Mail", - "result": { + "list": { + "invite": "Einladungsliste", + "join_request": "Beitrittsanfragenliste", + "member": "Mitgliederliste" + }, + "loading": "Lädt...", + "loading_posts": "Beiträge werden geladen... bitte warten.", + "message_us": "Bitte kontaktiere uns über Telegram oder Discord, wenn du 4 QORT benötigst, um ohne Einschränkungen zu chatten", + "message": { "error": { "generic": "Ein Fehler ist aufgetreten", - "incorrect_password": "Falsches Passwort", + "incorrect_password": "falsches Passwort", + "missing_field": "fehlt: {{ field }}", "save_qdn": "Speichern in QDN nicht möglich" }, "status": { - "minting": "(Prägung)", - "not_minting": "(keine Prägung)", + "minting": "(minting)", + "not_minting": "(kein minting)", "synchronized": "synchronisiert", "synchronizing": "synchronisiere" }, "success": { - "publish_qdn": "Erfolgreich in QDN veröffentlicht" + "order_submitted": "Deine Kauforder wurde übermittelt", + "publish_qdn": "Erfolgreich in QDN veröffentlicht", + "request_read": "Ich habe diese Anfrage gelesen", + "transfer": "Die Übertragung war erfolgreich!" } }, + "minting_status": "Minting-Status", + "page": { + "last": "letzte", + "first": "erste", + "next": "nächste", + "previous": "vorherige" + }, + "payment_notification": "Zahlungsbenachrichtigung", + "price": "Preis", + "q_mail": "Q-Mail", + "question": { + "new_user": "Bist du ein neuer Benutzer?" + }, "save_options": { - "no_pinned_changes": "Derzeit keine Änderungen an Ihren angehefteten Apps", - "overwrite_changes": "Die App konnte Ihre vorhandenen in QDN gespeicherten angehefteten Apps nicht herunterladen. Möchten Sie diese Änderungen überschreiben?", - "overwrite_qdn": "In QDN überschreiben", - "publish_qdn": "Möchten Sie Ihre Einstellungen in QDN (verschlüsselt) veröffentlichen?", + "no_pinned_changes": "Du hast derzeit keine Änderungen an deinen angehefteten Apps", + "overwrite_changes": "Die App konnte deine gespeicherten angehefteten QDN-Apps nicht laden. Möchtest du diese Änderungen überschreiben?", + "overwrite_qdn": "in QDN überschreiben", + "publish_qdn": "Möchtest du deine Einstellungen verschlüsselt in QDN veröffentlichen?", "qdn": "QDN-Speicherung verwenden", - "register_name": "Sie benötigen einen registrierten Qortal-Namen, um Ihre angehefteten Apps in QDN zu speichern.", - "reset_pinned": "Gefällt Ihnen Ihre aktuellen lokalen Änderungen nicht? Möchten Sie zu den Standard-Anheftungen zurückkehren?", - "reset_qdn": "Gefällt Ihnen Ihre aktuellen lokalen Änderungen nicht? Möchten Sie zu Ihren in QDN gespeicherten Anheftungen zurückkehren?", - "revert_default": "Auf Standard zurücksetzen", - "revert_qdn": "Auf QDN zurücksetzen", - "save_qdn": "In QDN speichern", + "register_name": "Du brauchst einen registrierten Qortal-Namen, um deine angehefteten Apps in QDN zu speichern.", + "reset_pinned": "Gefällt dir deine lokale Änderung nicht? Möchtest du auf die Standard-Apps zurücksetzen?", + "reset_qdn": "Gefällt dir deine lokale Änderung nicht? Möchtest du auf deine in QDN gespeicherten Apps zurücksetzen?", + "revert_default": "auf Standard zurücksetzen", + "revert_qdn": "auf QDN zurücksetzen", + "save_qdn": "in QDN speichern", "save": "speichern", - "settings": "Sie verwenden die Export/Import-Methode zum Speichern von Einstellungen.", - "unsaved_changes": "Sie haben nicht gespeicherte Änderungen an Ihren angehefteten Apps. Speichern Sie sie in QDN." + "settings": "Du nutzt die Export-/Import-Methode zum Speichern der Einstellungen.", + "unsaved_changes": "Du hast nicht gespeicherte Änderungen an deinen angehefteten Apps. Speichere sie in QDN." }, "settings": "Einstellungen", - "supply": "Angebot", + "supply": "Versorgung", "theme": { - "dark": "Dunkelmodus", - "light": "Hellmodus" + "dark": "dunkler Modus", + "light": "heller Modus" + }, + "time": { + "day_one": "{{count}} Tag", + "day_other": "{{count}} Tage", + "hour_one": "{{count}} Stunde", + "hour_other": "{{count}} Stunden", + "minute_one": "{{count}} Minute", + "minute_other": "{{count}} Minuten" }, "title": "Titel", "tutorial": "Tutorial", "user_lookup": "Benutzersuche", "wallet": { - "backup_wallet": "Wallet sichern", "wallet": "Wallet", "wallet_other": "Wallets" }, diff --git a/src/i18n/locales/de/group.json b/src/i18n/locales/de/group.json new file mode 100644 index 0000000..42e1f57 --- /dev/null +++ b/src/i18n/locales/de/group.json @@ -0,0 +1,105 @@ +{ + "action": { + "ban": "Mitglied aus der Gruppe verbannen", + "cancel_ban": "Sperre aufheben", + "copy_private_key": "Privaten Schlüssel kopieren", + "create_group": "Gruppe erstellen", + "disable_push_notifications": "Alle Push-Benachrichtigungen deaktivieren", + "enable_dev_mode": "Entwicklermodus aktivieren", + "export_password": "Passwort exportieren", + "export_private_key": "Privaten Schlüssel exportieren", + "find_group": "Gruppe finden", + "join_group": "Gruppe beitreten", + "kick_member": "Mitglied aus der Gruppe entfernen", + "invite_member": "Mitglied einladen", + "leave_group": "Gruppe verlassen", + "load_members": "Mitglieder mit Namen laden", + "make_admin": "Zum Administrator ernennen", + "manage_members": "Mitglieder verwalten", + "refetch_page": "Seite neu laden", + "remove_admin": "Als Administrator entfernen", + "return_to_thread": "Zu den Threads zurückkehren" + }, + "advanced_options": "Erweiterte Optionen", + "approval_threshold": "Genehmigungsschwelle der Gruppe (Anzahl / Prozentsatz der Administratoren, die eine Transaktion genehmigen müssen)", + "ban_list": "Sperrliste", + "block_delay": { + "minimum": "Minimale Blockverzögerung für Gruppen-Transaktionsgenehmigungen", + "maximum": "Maximale Blockverzögerung für Gruppen-Transaktionsgenehmigungen" + }, + "group": { + "closed": "geschlossen (privat) – Benutzer benötigen eine Erlaubnis zum Beitreten", + "description": "Gruppenbeschreibung", + "id": "Gruppen-ID", + "invites": "Gruppeneinladungen", + "management": "Gruppenverwaltung", + "member_number": "Anzahl der Mitglieder", + "name": "Gruppenname", + "open": "offen (öffentlich)", + "type": "Gruppentyp" + }, + "invitation_expiry": "Ablaufzeit der Einladung", + "invitees_list": "Liste der Eingeladenen", + "join_link": "Link zum Beitritt zur Gruppe", + "join_requests": "Beitrittsanfragen", + "last_message": "Letzte Nachricht", + "latest_mails": "Neueste Q-Mails", + "message": { + "generic": { + "already_in_group": "Sie sind bereits in dieser Gruppe!", + "closed_group": "Dies ist eine geschlossene/private Gruppe, daher müssen Sie warten, bis ein Administrator Ihre Anfrage akzeptiert", + "descrypt_wallet": "Wallet wird entschlüsselt...", + "encryption_key": "Der erste gemeinsame Verschlüsselungsschlüssel der Gruppe wird erstellt. Bitte warten Sie ein paar Minuten, bis er vom Netzwerk abgerufen wird. Überprüfung alle 2 Minuten...", + "group_invited_you": "{{group}} hat Sie eingeladen", + "loading_members": "Mitgliederliste mit Namen wird geladen... bitte warten.", + "no_display": "Nichts anzuzeigen", + "no_selection": "Keine Gruppe ausgewählt", + "not_part_group": "Sie sind nicht Teil der verschlüsselten Mitgliedergruppe. Warten Sie, bis ein Administrator die Schlüssel neu verschlüsselt.", + "only_encrypted": "Nur unverschlüsselte Nachrichten werden angezeigt.", + "private_key_copied": "Privater Schlüssel kopiert", + "provide_message": "Bitte geben Sie eine erste Nachricht für den Thread ein", + "secure_place": "Bewahren Sie Ihren privaten Schlüssel an einem sicheren Ort auf. Nicht teilen!", + "setting_group": "Gruppe wird eingerichtet... bitte warten." + }, + "error": { + "access_name": "Kann keine Nachricht senden, ohne Zugriff auf Ihren Namen", + "descrypt_wallet": "Fehler beim Entschlüsseln der Wallet {{ :errorMessage }}", + "description_required": "Bitte geben Sie eine Beschreibung an", + "group_info": "Kann nicht auf Gruppeninformationen zugreifen", + "group_secret_key": "Kann den geheimen Gruppenschlüssel nicht abrufen", + "name_required": "Bitte geben Sie einen Namen an", + "notify_admins": "Versuchen Sie, einen Administrator aus der untenstehenden Liste zu benachrichtigen:", + "thread_id": "Thread-ID konnte nicht gefunden werden" + }, + "success": { + "group_ban": "Mitglied erfolgreich aus der Gruppe verbannt. Es kann ein paar Minuten dauern, bis die Änderungen wirksam werden", + "group_creation": "Gruppe erfolgreich erstellt. Es kann ein paar Minuten dauern, bis die Änderungen wirksam werden", + "group_creation_name": "Gruppe {{group_name}} erstellt: Warte auf Bestätigung", + "group_creation_label": "Gruppe {{name}} erstellt: Erfolg!", + "group_invite": "{{value}} erfolgreich eingeladen. Es kann ein paar Minuten dauern, bis die Änderungen wirksam werden", + "group_join": "Beitritt zur Gruppe erfolgreich angefordert. Es kann ein paar Minuten dauern, bis die Änderungen wirksam werden", + "group_join_name": "Gruppe {{group_name}} beigetreten: Warte auf Bestätigung", + "group_join_label": "Gruppe {{name}} beigetreten: Erfolg!", + "group_join_request": "Beitritt zur Gruppe {{group_name}} angefordert: Warte auf Bestätigung", + "group_join_outcome": "Beitritt zur Gruppe {{group_name}} angefordert: Erfolg!", + "group_kick": "Mitglied erfolgreich aus der Gruppe entfernt. Es kann ein paar Minuten dauern, bis die Änderungen wirksam werden", + "group_leave": "Verlassen der Gruppe erfolgreich angefordert. Es kann ein paar Minuten dauern, bis die Änderungen wirksam werden", + "group_leave_name": "Gruppe {{group_name}} verlassen: Warte auf Bestätigung", + "group_leave_label": "Gruppe {{name}} verlassen: Erfolg!", + "group_member_admin": "Mitglied erfolgreich zum Administrator gemacht. Es kann ein paar Minuten dauern, bis die Änderungen wirksam werden", + "group_remove_member": "Mitglied erfolgreich als Administrator entfernt. Es kann ein paar Minuten dauern, bis die Änderungen wirksam werden", + "invitation_cancellation": "Einladung erfolgreich storniert. Es kann ein paar Minuten dauern, bis die Änderungen wirksam werden", + "invitation_request": "Beitrittsanfrage akzeptiert: Warte auf Bestätigung", + "loading_threads": "Threads werden geladen... bitte warten.", + "post_creation": "Beitrag erfolgreich erstellt. Es kann einige Zeit dauern, bis die Veröffentlichung verbreitet wird", + "thread_creation": "Thread erfolgreich erstellt. Es kann einige Zeit dauern, bis die Veröffentlichung verbreitet wird", + "unbanned_user": "Benutzer erfolgreich entsperrt. Es kann ein paar Minuten dauern, bis die Änderungen wirksam werden", + "user_joined": "Benutzer erfolgreich beigetreten!" + } + }, + "question": { + "perform_transaction": "Möchten Sie eine {{action}}-Transaktion durchführen?", + "provide_thread": "Bitte geben Sie einen Thread-Titel an" + }, + "thread_posts": "Neue Thread-Beiträge" +} diff --git a/src/i18n/locales/en/core.json b/src/i18n/locales/en/core.json index 33755f1..c819a38 100644 --- a/src/i18n/locales/en/core.json +++ b/src/i18n/locales/en/core.json @@ -5,21 +5,31 @@ "backup_account": "backup account", "backup_wallet": "backup wallet", "cancel": "cancel", + "cancel_invitation": "cancel invitation", "change": "change", "change_language": "change language", "choose": "choose", "close": "close", "continue": "continue", "continue_logout": "continue to logout", + "create_thread": "create thread", "decline": "decline", + "decrypt": "decrypt", "edit": "edit", "export": "export", "import": "import", "invite": "invite", "join": "join", "logout": "logout", - "notify": "notify" + "new": { + "post": "new post", + "thread": "new thread" + }, + "notify": "notify", + "post": "post", + "post_message": "post message" }, + "admin": "admin", "core": { "block_height": "block height", "information": "core information", @@ -34,30 +44,26 @@ "one": "one" }, "description": "description", + "downloading_qdn": "downloading from QDN", "fee": { "payment": "payment fee", "publish": "publish fee" }, - "page": { - "last": "last", - "first": "first", - "next": "next", - "previous": "previous" - }, - "downloading_qdn": "downloading from QDN", + "general_settings": "general settings", "last_height": "last height", + "list": { + "invite": "invite list", + "join_request": "join request list", + "member": "member list" + }, "loading": "loading...", "loading_posts": "loading posts... please wait.", "message_us": "please message us on Telegram or Discord if you need 4 QORT to start chatting without any limitations", - "minting_status": "minting status", - "new_user": "are you a new user?", - "payment_notification": "payment notification", - "price": "price", - "q_mail": "q-mail", "message": { "error": { "generic": "an error occurred", "incorrect_password": "incorrect password", + "missing_field": "missing: {{ field }}", "save_qdn": "unable to save to QDN" }, "status": { @@ -73,6 +79,19 @@ "transfer": "the transfer was succesful!" } }, + "minting_status": "minting status", + "page": { + "last": "last", + "first": "first", + "next": "next", + "previous": "previous" + }, + "payment_notification": "payment notification", + "price": "price", + "q_mail": "q-mail", + "question": { + "new_user": "are you a new user?" + }, "save_options": { "no_pinned_changes": "you currently do not have any changes to your pinned apps", "overwrite_changes": "the app was unable to download your existing QDN-saved pinned apps. Would you like to overwrite those changes?", diff --git a/src/i18n/locales/en/group.json b/src/i18n/locales/en/group.json index 345c6d0..6fba714 100644 --- a/src/i18n/locales/en/group.json +++ b/src/i18n/locales/en/group.json @@ -1,11 +1,23 @@ { "action": { + "ban": "ban member from group", "cancel_ban": "cancel ban", + "copy_private_key": "copy private key", "create_group": "create group", + "disable_push_notifications": "disable all push notifications", + "enable_dev_mode": "enable dev mode", + "export_password": "export password", + "export_private_key": "export private key", "find_group": "find group", "join_group": "join group", + "kick_member": "kick member from group", "invite_member": "invite member", + "leave_group": "leave group", + "load_members": "load members with names", + "make_admin": "make an admin", + "manage_members": "manage members", "refetch_page": "refetch page", + "remove_admin": "remove as admin", "return_to_thread": "return to threads" }, "advanced_options": "advanced options", @@ -18,48 +30,76 @@ "group": { "closed": "closed (private) - users need permission to join", "description": "description of group", + "id": "group id", "invites": "group invites", "management": "group management", - "name": "name of group", + "member_number": "number of members", + "name": "group name", "open": "open (public)", "type": "group type" }, "invitation_expiry": "invitation Expiry Time", + "invitees_list": "invitees list", + "join_link": "join group link", "join_requests": "join requests", - "question": { - "cancel_ban": "would you like to perform a CANCEL_GROUP_BAN transaction?", - "create_group": "would you like to perform an CREATE_GROUP transaction?", - "group_invite": "would you like to perform a GROUP_INVITE transaction?", - "join_group": "would you like to perform an JOIN_GROUP transaction?", - "provide_thread": "please provide a thread title" - }, + "last_message": "last message", + "latest_mails": "latest Q-Mails", "message": { "generic": { + "already_in_group": "you are already in this group!", + "closed_group": "this is a closed/private group, so you will need to wait until an admin accepts your request", + "descrypt_wallet": "decrypting wallet...", "encryption_key": "the group's first common encryption key is in the process of creation. Please wait a few minutes for it to be retrieved by the network. Checking every 2 minutes...", "group_invited_you": "{{group}} has invited you", + "loading_members": "loading member list with names... please wait.", "no_display": "nothing to display", "no_selection": "no group selected", "not_part_group": "you are not part of the encrypted group of members. Wait until an admin re-encrypts the keys.", "only_encrypted": "only unencrypted messages will be displayed.", + "private_key_copied": "private key copied", + "provide_message": "please provide a first message to the thread", + "secure_place": "keep your private key in a secure place. Do not share!", "setting_group": "setting up group... please wait." }, "error": { "access_name": "cannot send a message without a access to your name", + "descrypt_wallet": "error decrypting wallet {{ :errorMessage }}", "description_required": "please provide a description", "group_info": "cannot access group information", + "group_secret_key": "cannot get group secret key", "name_required": "please provide a name", - "notify_admins": "try notifying an admin from the list of admins below:" + "notify_admins": "try notifying an admin from the list of admins below:", + "thread_id": "unable to locate thread Id" }, "success": { + "group_ban": "successfully banned member from group. It may take a couple of minutes for the changes to propagate", "group_creation": "successfully created group. It may take a couple of minutes for the changes to propagate", "group_creation_name": "created group {{group_name}}: awaiting confirmation", "group_creation_label": "created group {{name}}: success!", "group_invite": "successfully invited {{value}}. It may take a couple of minutes for the changes to propagate", - "join_creation": "successfully requested to join group. It may take a couple of minutes for the changes to propagate", + "group_join": "successfully requested to join group. It may take a couple of minutes for the changes to propagate", "group_join_name": "joined group {{group_name}}: awaiting confirmation", "group_join_label": "joined group {{name}}: success!", + "group_join_request": "requested to join Group {{group_name}}: awaiting confirmation", + "group_join_outcome": "requested to join Group {{group_name}}: success!", + "group_kick": "successfully kicked member from group. It may take a couple of minutes for the changes to propagate", + "group_leave": "successfully requested to leave group. It may take a couple of minutes for the changes to propagate", + "group_leave_name": "left group {{group_name}}: awaiting confirmation", + "group_leave_label": "left group {{name}}: success!", + "group_member_admin": "successfully made member an admin. It may take a couple of minutes for the changes to propagate", + "group_remove_member": "successfully removed member as an admin. It may take a couple of minutes for the changes to propagate", + "invitation_cancellation": "successfully canceled invitation. It may take a couple of minutes for the changes to propagate", + "invitation_request": "accepted join request: awaiting confirmation", "loading_threads": "loading threads... please wait.", - "unbanned_user": "successfully unbanned user. It may take a couple of minutes for the changes to propagate" + "post_creation": "successfully created post. It may take some time for the publish to propagate", + "thread_creation": "successfully created thread. It may take some time for the publish to propagate", + "unbanned_user": "successfully unbanned user. It may take a couple of minutes for the changes to propagate", + "user_joined": "user successfully joined!" } - } + }, + "question": { + "perform_transaction": "would you like to perform a {{action}} transaction?", + "provide_thread": "please provide a thread title" + }, + "thread_posts": "new thread posts" } diff --git a/src/i18n/locales/es/core.json b/src/i18n/locales/es/core.json index 78b06e9..0fa1feb 100644 --- a/src/i18n/locales/es/core.json +++ b/src/i18n/locales/es/core.json @@ -1,71 +1,133 @@ { - "add": "agregar", - "cancel": "cancelar", - "choose": "elegir", - "close": "cerrar", - "continue": "continuar", + "action": { + "add": "añadir", + "accept": "aceptar", + "backup_account": "respaldar cuenta", + "backup_wallet": "respaldar monedero", + "cancel": "cancelar", + "cancel_invitation": "cancelar invitación", + "change": "cambiar", + "change_language": "cambiar idioma", + "choose": "elegir", + "close": "cerrar", + "continue": "continuar", + "continue_logout": "continuar para cerrar sesión", + "create_thread": "crear hilo", + "decline": "rechazar", + "decrypt": "descifrar", + "edit": "editar", + "export": "exportar", + "import": "importar", + "invite": "invitar", + "join": "unirse", + "logout": "cerrar sesión", + "new": { + "post": "nueva publicación", + "thread": "nuevo hilo" + }, + "notify": "notificar", + "post": "publicar", + "post_message": "enviar mensaje" + }, + "admin": "administrador", "core": { - "block_height": "altura de bloque", + "block_height": "altura del bloque", "information": "información del núcleo", "peers": "pares conectados", "version": "versión del núcleo" }, + "ui": { + "version": "versión de la interfaz" + }, + "count": { + "none": "ninguno", + "one": "uno" + }, "description": "descripción", - "edit": "editar", - "export": "exportar", - "import": "importar", + "downloading_qdn": "descargando desde QDN", + "fee": { + "payment": "tarifa de pago", + "publish": "tarifa de publicación" + }, + "general_settings": "configuración general", "last_height": "última altura", + "list": { + "invite": "lista de invitaciones", + "join_request": "lista de solicitudes de unión", + "member": "lista de miembros" + }, "loading": "cargando...", - "logout": "cerrar sesión", - "minting_status": "estado de acuñación", - "payment_notification": "notificación de pago", - "price": "precio", - "q_mail": "q-mail", - "result": { + "loading_posts": "cargando publicaciones... por favor espera.", + "message_us": "por favor contáctanos en Telegram o Discord si necesitas 4 QORT para comenzar a chatear sin limitaciones", + "message": { "error": { "generic": "ocurrió un error", "incorrect_password": "contraseña incorrecta", + "missing_field": "falta: {{ field }}", "save_qdn": "no se pudo guardar en QDN" }, "status": { - "minting": "(acuñando)", - "not_minting": "(no acuñando)", + "minting": "(generando)", + "not_minting": "(no generando)", "synchronized": "sincronizado", "synchronizing": "sincronizando" }, "success": { - "publish_qdn": "publicado exitosamente en QDN" + "order_submitted": "tu orden de compra fue enviada", + "publish_qdn": "publicado correctamente en QDN", + "request_read": "he leído esta solicitud", + "transfer": "¡la transferencia fue exitosa!" } }, + "minting_status": "estado de generación", + "page": { + "last": "última", + "first": "primera", + "next": "siguiente", + "previous": "anterior" + }, + "payment_notification": "notificación de pago", + "price": "precio", + "q_mail": "q-mail", + "question": { + "new_user": "¿eres un usuario nuevo?" + }, "save_options": { "no_pinned_changes": "actualmente no tienes cambios en tus aplicaciones fijadas", - "overwrite_changes": "la aplicación no pudo descargar tus aplicaciones fijadas existentes guardadas en QDN. ¿Deseas sobrescribir esos cambios?", + "overwrite_changes": "la aplicación no pudo descargar tus aplicaciones fijadas guardadas en QDN. ¿Deseas sobrescribir esos cambios?", "overwrite_qdn": "sobrescribir en QDN", - "publish_qdn": "¿Deseas publicar tus configuraciones en QDN (cifrado)?", - "qdn": "usar guardado en QDN", - "register_name": "necesitas un nombre Qortal registrado para guardar tus aplicaciones fijadas en QDN.", - "reset_pinned": "¿No te gustan tus cambios locales actuales? ¿Deseas restablecer las aplicaciones fijadas predeterminadas?", - "reset_qdn": "¿No te gustan tus cambios locales actuales? ¿Deseas restablecer tus aplicaciones fijadas guardadas en QDN?", - "revert_default": "restablecer a predeterminado", - "revert_qdn": "restablecer a QDN", + "publish_qdn": "¿quieres publicar tu configuración en QDN (cifrada)?", + "qdn": "usar guardado QDN", + "register_name": "necesitas un nombre de Qortal registrado para guardar tus aplicaciones fijadas en QDN.", + "reset_pinned": "¿no te gustan tus cambios locales actuales? ¿Quieres restablecer las aplicaciones fijadas por defecto?", + "reset_qdn": "¿no te gustan tus cambios locales actuales? ¿Quieres restablecer tus aplicaciones fijadas guardadas en QDN?", + "revert_default": "restablecer a valores predeterminados", + "revert_qdn": "restablecer desde QDN", "save_qdn": "guardar en QDN", "save": "guardar", - "settings": "estás utilizando el método de exportación/importación para guardar configuraciones.", + "settings": "estás usando el método de exportación/importación para guardar la configuración.", "unsaved_changes": "tienes cambios no guardados en tus aplicaciones fijadas. Guárdalos en QDN." }, - "settings": "configuraciones", - "supply": "suministro", + "settings": "configuración", + "supply": "oferta", "theme": { "dark": "modo oscuro", "light": "modo claro" }, + "time": { + "day_one": "{{count}} día", + "day_other": "{{count}} días", + "hour_one": "{{count}} hora", + "hour_other": "{{count}} horas", + "minute_one": "{{count}} minuto", + "minute_other": "{{count}} minutos" + }, "title": "título", "tutorial": "tutorial", "user_lookup": "búsqueda de usuario", "wallet": { - "backup_wallet": "respaldar billetera", - "wallet": "billetera", - "wallet_other": "billeteras" + "wallet": "monedero", + "wallet_other": "monederos" }, "welcome": "bienvenido" } diff --git a/src/i18n/locales/es/group.json b/src/i18n/locales/es/group.json new file mode 100644 index 0000000..bef1333 --- /dev/null +++ b/src/i18n/locales/es/group.json @@ -0,0 +1,105 @@ +{ + "action": { + "ban": "expulsar miembro del grupo", + "cancel_ban": "cancelar expulsión", + "copy_private_key": "copiar clave privada", + "create_group": "crear grupo", + "disable_push_notifications": "desactivar todas las notificaciones push", + "enable_dev_mode": "activar modo desarrollador", + "export_password": "exportar contraseña", + "export_private_key": "exportar clave privada", + "find_group": "encontrar grupo", + "join_group": "unirse al grupo", + "kick_member": "expulsar miembro del grupo", + "invite_member": "invitar miembro", + "leave_group": "salir del grupo", + "load_members": "cargar miembros con nombres", + "make_admin": "hacer administrador", + "manage_members": "administrar miembros", + "refetch_page": "recargar página", + "remove_admin": "quitar como administrador", + "return_to_thread": "volver a los hilos" + }, + "advanced_options": "opciones avanzadas", + "approval_threshold": "umbral de aprobación del grupo (número / porcentaje de administradores que deben aprobar una transacción)", + "ban_list": "lista de expulsados", + "block_delay": { + "minimum": "retardo mínimo de bloque para aprobaciones de transacciones de grupo", + "maximum": "retardo máximo de bloque para aprobaciones de transacciones de grupo" + }, + "group": { + "closed": "cerrado (privado) - los usuarios necesitan permiso para unirse", + "description": "descripción del grupo", + "id": "ID del grupo", + "invites": "invitaciones del grupo", + "management": "gestión del grupo", + "member_number": "número de miembros", + "name": "nombre del grupo", + "open": "abierto (público)", + "type": "tipo de grupo" + }, + "invitation_expiry": "tiempo de expiración de la invitación", + "invitees_list": "lista de invitados", + "join_link": "enlace para unirse al grupo", + "join_requests": "solicitudes de ingreso", + "last_message": "último mensaje", + "latest_mails": "últimos Q-Mails", + "message": { + "generic": { + "already_in_group": "¡ya estás en este grupo!", + "closed_group": "este es un grupo cerrado/privado, debes esperar a que un administrador acepte tu solicitud", + "descrypt_wallet": "descifrando billetera...", + "encryption_key": "la primera clave de cifrado común del grupo se está creando. Por favor, espera unos minutos a que la red la recupere. Verificando cada 2 minutos...", + "group_invited_you": "{{group}} te ha invitado", + "loading_members": "cargando lista de miembros con nombres... por favor espera.", + "no_display": "nada que mostrar", + "no_selection": "ningún grupo seleccionado", + "not_part_group": "no eres parte del grupo cifrado de miembros. Espera a que un administrador vuelva a cifrar las claves.", + "only_encrypted": "solo se mostrarán mensajes no cifrados.", + "private_key_copied": "clave privada copiada", + "provide_message": "por favor proporciona un primer mensaje para el hilo", + "secure_place": "guarda tu clave privada en un lugar seguro. ¡No la compartas!", + "setting_group": "configurando grupo... por favor espera." + }, + "error": { + "access_name": "no se puede enviar un mensaje sin acceso a tu nombre", + "descrypt_wallet": "error al descifrar la billetera {{ :errorMessage }}", + "description_required": "por favor proporciona una descripción", + "group_info": "no se puede acceder a la información del grupo", + "group_secret_key": "no se puede obtener la clave secreta del grupo", + "name_required": "por favor proporciona un nombre", + "notify_admins": "intenta notificar a un administrador de la lista a continuación:", + "thread_id": "no se puede encontrar el ID del hilo" + }, + "success": { + "group_ban": "miembro expulsado del grupo con éxito. Puede tardar unos minutos en propagarse", + "group_creation": "grupo creado con éxito. Puede tardar unos minutos en propagarse", + "group_creation_name": "grupo {{group_name}} creado: esperando confirmación", + "group_creation_label": "grupo {{name}} creado: ¡éxito!", + "group_invite": "{{value}} invitado con éxito. Puede tardar unos minutos en propagarse", + "group_join": "solicitud de ingreso enviada con éxito. Puede tardar unos minutos en propagarse", + "group_join_name": "unido al grupo {{group_name}}: esperando confirmación", + "group_join_label": "unido al grupo {{name}}: ¡éxito!", + "group_join_request": "solicitud de ingreso al grupo {{group_name}}: esperando confirmación", + "group_join_outcome": "solicitud de ingreso al grupo {{group_name}}: ¡éxito!", + "group_kick": "miembro expulsado del grupo con éxito. Puede tardar unos minutos en propagarse", + "group_leave": "solicitud de salida del grupo enviada con éxito. Puede tardar unos minutos en propagarse", + "group_leave_name": "salido del grupo {{group_name}}: esperando confirmación", + "group_leave_label": "salido del grupo {{name}}: ¡éxito!", + "group_member_admin": "miembro convertido en administrador con éxito. Puede tardar unos minutos en propagarse", + "group_remove_member": "miembro eliminado como administrador con éxito. Puede tardar unos minutos en propagarse", + "invitation_cancellation": "invitación cancelada con éxito. Puede tardar unos minutos en propagarse", + "invitation_request": "solicitud de ingreso aceptada: esperando confirmación", + "loading_threads": "cargando hilos... por favor espera.", + "post_creation": "publicación creada con éxito. Puede tardar en propagarse", + "thread_creation": "hilo creado con éxito. Puede tardar en propagarse", + "unbanned_user": "usuario desbloqueado con éxito. Puede tardar unos minutos en propagarse", + "user_joined": "¡usuario se ha unido con éxito!" + } + }, + "question": { + "perform_transaction": "¿quieres realizar una transacción de {{action}}?", + "provide_thread": "por favor proporciona un título para el hilo" + }, + "thread_posts": "nuevas publicaciones en el hilo" +} diff --git a/src/i18n/locales/fr/core.json b/src/i18n/locales/fr/core.json index 61d231d..ba5a0ce 100644 --- a/src/i18n/locales/fr/core.json +++ b/src/i18n/locales/fr/core.json @@ -1,57 +1,112 @@ { - "add": "ajouter", - "cancel": "annuler", - "choose": "choisir", - "close": "fermer", - "continue": "continuer", + "action": { + "add": "ajouter", + "accept": "accepter", + "backup_account": "sauvegarder le compte", + "backup_wallet": "sauvegarder le portefeuille", + "cancel": "annuler", + "cancel_invitation": "annuler l'invitation", + "change": "changer", + "change_language": "changer de langue", + "choose": "choisir", + "close": "fermer", + "continue": "continuer", + "continue_logout": "continuer la déconnexion", + "create_thread": "créer un fil", + "decline": "refuser", + "decrypt": "déchiffrer", + "edit": "modifier", + "export": "exporter", + "import": "importer", + "invite": "inviter", + "join": "rejoindre", + "logout": "se déconnecter", + "new": { + "post": "nouveau message", + "thread": "nouveau fil" + }, + "notify": "notifier", + "post": "publier", + "post_message": "envoyer un message" + }, + "admin": "administrateur", "core": { "block_height": "hauteur de bloc", "information": "informations du noyau", "peers": "pairs connectés", "version": "version du noyau" }, + "ui": { + "version": "version de l'interface" + }, + "count": { + "none": "aucun", + "one": "un" + }, "description": "description", - "edit": "éditer", - "export": "exporter", - "import": "importer", + "downloading_qdn": "téléchargement depuis QDN", + "fee": { + "payment": "frais de paiement", + "publish": "frais de publication" + }, + "general_settings": "paramètres généraux", "last_height": "dernière hauteur", + "list": { + "invite": "liste d'invitations", + "join_request": "liste des demandes d'adhésion", + "member": "liste des membres" + }, "loading": "chargement...", - "logout": "se déconnecter", - "minting_status": "statut de frappe", - "payment_notification": "notification de paiement", - "price": "prix", - "q_mail": "q-mail", - "result": { + "loading_posts": "chargement des messages... veuillez patienter.", + "message_us": "veuillez nous contacter sur Telegram ou Discord si vous avez besoin de 4 QORT pour commencer à discuter sans limites", + "message": { "error": { - "generic": "une erreur s'est produite", + "generic": "une erreur est survenue", "incorrect_password": "mot de passe incorrect", + "missing_field": "champ manquant : {{ field }}", "save_qdn": "impossible d'enregistrer dans QDN" }, "status": { - "minting": "(frappe en cours)", - "not_minting": "(pas de frappe)", + "minting": "(en cours de minage)", + "not_minting": "(non miné)", "synchronized": "synchronisé", - "synchronizing": "synchronisation en cours" + "synchronizing": "synchronisation" }, "success": { - "publish_qdn": "publié avec succès dans QDN" + "order_submitted": "votre ordre d'achat a été envoyé", + "publish_qdn": "publié avec succès sur QDN", + "request_read": "j'ai lu cette demande", + "transfer": "le transfert a réussi !" } }, + "minting_status": "état du minage", + "page": { + "last": "dernier", + "first": "premier", + "next": "suivant", + "previous": "précédent" + }, + "payment_notification": "notification de paiement", + "price": "prix", + "q_mail": "q-mail", + "question": { + "new_user": "êtes-vous un nouvel utilisateur ?" + }, "save_options": { - "no_pinned_changes": "vous n'avez actuellement aucune modification de vos applications épinglées", - "overwrite_changes": "l'application n'a pas pu télécharger vos applications épinglées existantes enregistrées dans QDN. Voulez-vous écraser ces modifications ?", - "overwrite_qdn": "écraser dans QDN", - "publish_qdn": "souhaitez-vous publier vos paramètres dans QDN (chiffré) ?", + "no_pinned_changes": "vous n'avez actuellement aucun changement dans vos applications épinglées", + "overwrite_changes": "l'application n'a pas pu télécharger vos applications épinglées enregistrées sur QDN. Voulez-vous écraser ces modifications ?", + "overwrite_qdn": "écraser sur QDN", + "publish_qdn": "voulez-vous publier vos paramètres sur QDN (chiffrés) ?", "qdn": "utiliser l'enregistrement QDN", - "register_name": "vous devez avoir un nom Qortal enregistré pour enregistrer vos applications épinglées dans QDN.", - "reset_pinned": "vous n'aimez pas vos modifications locales actuelles ? Voulez-vous réinitialiser les applications épinglées par défaut ?", - "reset_qdn": "vous n'aimez pas vos modifications locales actuelles ? Voulez-vous réinitialiser vos applications épinglées enregistrées dans QDN ?", - "revert_default": "revenir aux paramètres par défaut", - "revert_qdn": "revenir à QDN", - "save_qdn": "enregistrer dans QDN", + "register_name": "vous devez avoir un nom Qortal enregistré pour enregistrer vos applications épinglées sur QDN.", + "reset_pinned": "vous n'aimez pas vos changements locaux actuels ? Voulez-vous réinitialiser les applications par défaut ?", + "reset_qdn": "vous n'aimez pas vos changements locaux actuels ? Voulez-vous restaurer les applications enregistrées sur QDN ?", + "revert_default": "réinitialiser aux valeurs par défaut", + "revert_qdn": "restaurer depuis QDN", + "save_qdn": "enregistrer sur QDN", "save": "enregistrer", - "settings": "vous utilisez la méthode d'exportation/importation pour enregistrer les paramètres.", - "unsaved_changes": "vous avez des modifications non enregistrées de vos applications épinglées. Enregistrez-les dans QDN." + "settings": "vous utilisez la méthode d'exportation/importation pour sauvegarder les paramètres.", + "unsaved_changes": "vous avez des modifications non enregistrées dans vos applications épinglées. Enregistrez-les sur QDN." }, "settings": "paramètres", "supply": "approvisionnement", @@ -59,11 +114,18 @@ "dark": "mode sombre", "light": "mode clair" }, + "time": { + "day_one": "{{count}} jour", + "day_other": "{{count}} jours", + "hour_one": "{{count}} heure", + "hour_other": "{{count}} heures", + "minute_one": "{{count}} minute", + "minute_other": "{{count}} minutes" + }, "title": "titre", "tutorial": "tutoriel", "user_lookup": "recherche d'utilisateur", "wallet": { - "backup_wallet": "sauvegarder le portefeuille", "wallet": "portefeuille", "wallet_other": "portefeuilles" }, diff --git a/src/i18n/locales/fr/group.json b/src/i18n/locales/fr/group.json new file mode 100644 index 0000000..9f11290 --- /dev/null +++ b/src/i18n/locales/fr/group.json @@ -0,0 +1,105 @@ +{ + "action": { + "ban": "bannir un membre du groupe", + "cancel_ban": "annuler le bannissement", + "copy_private_key": "copier la clé privée", + "create_group": "créer un groupe", + "disable_push_notifications": "désactiver toutes les notifications push", + "enable_dev_mode": "activer le mode développeur", + "export_password": "exporter le mot de passe", + "export_private_key": "exporter la clé privée", + "find_group": "trouver un groupe", + "join_group": "rejoindre le groupe", + "kick_member": "expulser un membre du groupe", + "invite_member": "inviter un membre", + "leave_group": "quitter le groupe", + "load_members": "charger les membres avec noms", + "make_admin": "nommer administrateur", + "manage_members": "gérer les membres", + "refetch_page": "rafraîchir la page", + "remove_admin": "retirer les droits d'admin", + "return_to_thread": "retourner aux discussions" + }, + "advanced_options": "options avancées", + "approval_threshold": "seuil d'approbation du groupe (nombre / pourcentage d'administrateurs devant approuver une transaction)", + "ban_list": "liste des bannis", + "block_delay": { + "minimum": "délai de bloc minimum pour l'approbation des transactions de groupe", + "maximum": "délai de bloc maximum pour l'approbation des transactions de groupe" + }, + "group": { + "closed": "fermé (privé) – les utilisateurs ont besoin d'une autorisation pour rejoindre", + "description": "description du groupe", + "id": "ID du groupe", + "invites": "invitations du groupe", + "management": "gestion du groupe", + "member_number": "nombre de membres", + "name": "nom du groupe", + "open": "ouvert (public)", + "type": "type de groupe" + }, + "invitation_expiry": "délai d'expiration de l'invitation", + "invitees_list": "liste des invités", + "join_link": "lien pour rejoindre le groupe", + "join_requests": "demandes d’adhésion", + "last_message": "dernier message", + "latest_mails": "derniers Q-Mails", + "message": { + "generic": { + "already_in_group": "vous êtes déjà dans ce groupe !", + "closed_group": "ce groupe est fermé/privé, vous devez attendre qu’un administrateur accepte votre demande", + "descrypt_wallet": "déchiffrement du portefeuille...", + "encryption_key": "la première clé de chiffrement partagée du groupe est en cours de création. Veuillez patienter quelques minutes pendant sa récupération par le réseau. Vérification toutes les 2 minutes...", + "group_invited_you": "{{group}} vous a invité", + "loading_members": "chargement de la liste des membres avec noms... veuillez patienter.", + "no_display": "rien à afficher", + "no_selection": "aucun groupe sélectionné", + "not_part_group": "vous ne faites pas partie du groupe chiffré. Attendez qu’un administrateur ré-encrypte les clés.", + "only_encrypted": "seuls les messages non chiffrés seront affichés.", + "private_key_copied": "clé privée copiée", + "provide_message": "veuillez fournir un premier message pour la discussion", + "secure_place": "gardez votre clé privée en lieu sûr. Ne la partagez pas !", + "setting_group": "configuration du groupe... veuillez patienter." + }, + "error": { + "access_name": "impossible d’envoyer un message sans accès à votre nom", + "descrypt_wallet": "erreur lors du déchiffrement du portefeuille {{ :errorMessage }}", + "description_required": "veuillez fournir une description", + "group_info": "impossible d'accéder aux informations du groupe", + "group_secret_key": "impossible d’obtenir la clé secrète du groupe", + "name_required": "veuillez fournir un nom", + "notify_admins": "essayez de contacter un administrateur dans la liste ci-dessous :", + "thread_id": "impossible de localiser l’identifiant de discussion" + }, + "success": { + "group_ban": "membre banni avec succès. Les changements peuvent prendre quelques minutes pour se propager", + "group_creation": "groupe créé avec succès. Les changements peuvent prendre quelques minutes pour se propager", + "group_creation_name": "groupe {{group_name}} créé : en attente de confirmation", + "group_creation_label": "groupe {{name}} créé : succès !", + "group_invite": "{{value}} invité avec succès. Les changements peuvent prendre quelques minutes pour se propager", + "group_join": "demande de rejoindre le groupe envoyée avec succès. Les changements peuvent prendre quelques minutes pour se propager", + "group_join_name": "rejoint le groupe {{group_name}} : en attente de confirmation", + "group_join_label": "rejoint le groupe {{name}} : succès !", + "group_join_request": "demande d’adhésion au groupe {{group_name}} : en attente de confirmation", + "group_join_outcome": "adhésion au groupe {{group_name}} : succès !", + "group_kick": "membre expulsé avec succès du groupe. Les changements peuvent prendre quelques minutes pour se propager", + "group_leave": "demande de quitter le groupe envoyée avec succès. Les changements peuvent prendre quelques minutes pour se propager", + "group_leave_name": "a quitté le groupe {{group_name}} : en attente de confirmation", + "group_leave_label": "a quitté le groupe {{name}} : succès !", + "group_member_admin": "membre promu administrateur avec succès. Les changements peuvent prendre quelques minutes pour se propager", + "group_remove_member": "membre retiré en tant qu'administrateur avec succès. Les changements peuvent prendre quelques minutes pour se propager", + "invitation_cancellation": "invitation annulée avec succès. Les changements peuvent prendre quelques minutes pour se propager", + "invitation_request": "demande d’adhésion acceptée : en attente de confirmation", + "loading_threads": "chargement des discussions... veuillez patienter.", + "post_creation": "publication créée avec succès. La propagation peut prendre un certain temps", + "thread_creation": "discussion créée avec succès. La propagation peut prendre un certain temps", + "unbanned_user": "utilisateur débanni avec succès. Les changements peuvent prendre quelques minutes pour se propager", + "user_joined": "utilisateur rejoint avec succès !" + } + }, + "question": { + "perform_transaction": "souhaitez-vous effectuer une transaction de {{action}} ?", + "provide_thread": "veuillez fournir un titre pour la discussion" + }, + "thread_posts": "nouveaux messages de discussion" +} diff --git a/src/i18n/locales/it/core.json b/src/i18n/locales/it/core.json index 8319b22..730d95d 100644 --- a/src/i18n/locales/it/core.json +++ b/src/i18n/locales/it/core.json @@ -2,92 +2,114 @@ "action": { "add": "aggiungi", "accept": "accetta", - "backup_account": "backup account", - "backup_wallet": "backup wallet", + "backup_account": "esegui backup account", + "backup_wallet": "esegui backup portafoglio", "cancel": "annulla", + "cancel_invitation": "annulla invito", "change": "cambia", "change_language": "cambia lingua", "choose": "scegli", "close": "chiudi", "continue": "continua", "continue_logout": "continua con il logout", + "create_thread": "crea discussione", "decline": "rifiuta", + "decrypt": "decifra", "edit": "modifica", "export": "esporta", "import": "importa", "invite": "invita", "join": "unisciti", "logout": "esci", - "notify": "notifica" + "new": { + "post": "nuovo post", + "thread": "nuova discussione" + }, + "notify": "notifica", + "post": "pubblica", + "post_message": "invia messaggio" }, + "admin": "amministratore", "core": { "block_height": "altezza blocco", "information": "informazioni core", "peers": "peer connessi", "version": "versione core" }, + "ui": { + "version": "versione UI" + }, "count": { "none": "nessuno", "one": "uno" }, "description": "descrizione", + "downloading_qdn": "scaricamento da QDN", "fee": { "payment": "commissione di pagamento", "publish": "commissione di pubblicazione" }, - "page": { - "last": "ultimo", - "first": "primo", - "next": "successivo", - "previous": "precedente" - }, - "downloading_qdn": "scaricamento da QDN", + "general_settings": "impostazioni generali", "last_height": "ultima altezza", + "list": { + "invite": "lista inviti", + "join_request": "lista richieste di adesione", + "member": "lista membri" + }, "loading": "caricamento...", - "loading_posts": "caricamento post... attendere prego.", - "message_us": "per favore scrivici su Telegram o Discord se hai bisogno di 4 QORT per iniziare a chattare senza limitazioni", - "minting_status": "stato minting", - "new_user": "sei un nuovo utente?", - "payment_notification": "notifica di pagamento", - "price": "prezzo", - "q_mail": "q-mail", + "loading_posts": "caricamento post... attendere.", + "message_us": "contattaci su Telegram o Discord se hai bisogno di 4 QORT per iniziare a chattare senza limitazioni", "message": { "error": { "generic": "si è verificato un errore", "incorrect_password": "password errata", + "missing_field": "manca: {{ field }}", "save_qdn": "impossibile salvare su QDN" }, "status": { - "minting": "(minting)", - "not_minting": "(non minting)", + "minting": "(in conio)", + "not_minting": "(non in conio)", "synchronized": "sincronizzato", - "synchronizing": "sincronizzazione in corso" + "synchronizing": "sincronizzazione" }, "success": { "order_submitted": "il tuo ordine di acquisto è stato inviato", - "publish_qdn": "pubblicato su QDN con successo", + "publish_qdn": "pubblicato con successo su QDN", "request_read": "ho letto questa richiesta", - "transfer": "il trasferimento è stato effettuato con successo!" + "transfer": "il trasferimento è riuscito!" } }, + "minting_status": "stato conio", + "page": { + "last": "ultima", + "first": "prima", + "next": "successiva", + "previous": "precedente" + }, + "payment_notification": "notifica di pagamento", + "price": "prezzo", + "q_mail": "q-mail", + "question": { + "new_user": "sei un nuovo utente?" + }, "save_options": { - "no_pinned_changes": "attualmente non hai modifiche alle tue app appuntate", - "overwrite_changes": "l'app non è riuscita a scaricare le tue app appuntate salvate su QDN. Vuoi sovrascrivere le modifiche?", + "no_pinned_changes": "attualmente non hai modifiche nelle app fissate", + "overwrite_changes": "l'app non è riuscita a scaricare le tue app fissate salvate su QDN. Vuoi sovrascrivere le modifiche?", "overwrite_qdn": "sovrascrivi su QDN", - "publish_qdn": "vuoi pubblicare le tue impostazioni su QDN (crittografato)?", - "qdn": "usa il salvataggio su QDN", - "register_name": "devi avere un nome Qortal registrato per salvare le tue app appuntate su QDN.", - "reset_pinned": "non ti piacciono le modifiche locali attuali? Vuoi ripristinare le app appuntate predefinite?", - "reset_qdn": "non ti piacciono le modifiche locali attuali? Vuoi ripristinare le app appuntate salvate su QDN?", - "revert_default": "ripristina predefinito", + "publish_qdn": "vuoi pubblicare le tue impostazioni su QDN (crittografate)?", + "qdn": "usa salvataggio QDN", + "register_name": "hai bisogno di un nome Qortal registrato per salvare le app fissate su QDN.", + "reset_pinned": "non ti piacciono le modifiche locali? Vuoi ripristinare le app fissate predefinite?", + "reset_qdn": "non ti piacciono le modifiche locali? Vuoi ripristinare le app fissate salvate su QDN?", + "revert_default": "ripristina ai valori predefiniti", "revert_qdn": "ripristina da QDN", "save_qdn": "salva su QDN", "save": "salva", "settings": "stai usando il metodo di esportazione/importazione per salvare le impostazioni.", - "unsaved_changes": "hai modifiche non salvate alle tue app appuntate. Salvale su QDN." + "unsaved_changes": "hai modifiche non salvate nelle app fissate. Salvale su QDN." }, "settings": "impostazioni", - "supply": "disponibilità", + "supply": "offerta", "theme": { "dark": "modalità scura", "light": "modalità chiara" @@ -104,8 +126,8 @@ "tutorial": "tutorial", "user_lookup": "ricerca utente", "wallet": { - "wallet": "wallet", - "wallet_other": "wallet" + "wallet": "portafoglio", + "wallet_other": "portafogli" }, "welcome": "benvenuto" } diff --git a/src/i18n/locales/it/group.json b/src/i18n/locales/it/group.json index 862496d..e53b6c8 100644 --- a/src/i18n/locales/it/group.json +++ b/src/i18n/locales/it/group.json @@ -1,65 +1,105 @@ { "action": { + "ban": "banna membro dal gruppo", "cancel_ban": "annulla ban", + "copy_private_key": "copia chiave privata", "create_group": "crea gruppo", + "disable_push_notifications": "disattiva tutte le notifiche push", + "enable_dev_mode": "attiva modalità sviluppatore", + "export_password": "esporta password", + "export_private_key": "esporta chiave privata", "find_group": "trova gruppo", "join_group": "unisciti al gruppo", + "kick_member": "espelli membro dal gruppo", "invite_member": "invita membro", + "leave_group": "lascia il gruppo", + "load_members": "carica membri con nomi", + "make_admin": "rendi amministratore", + "manage_members": "gestisci membri", "refetch_page": "ricarica pagina", - "return_to_thread": "torna ai thread" + "remove_admin": "rimuovi come amministratore", + "return_to_thread": "torna alle discussioni" }, "advanced_options": "opzioni avanzate", - "approval_threshold": "soglia di Approvazione del gruppo (numero/percentuale di Admin che devono approvare una transazione)", - "ban_list": "lista ban", + "approval_threshold": "soglia di approvazione del gruppo (numero / percentuale di amministratori che devono approvare una transazione)", + "ban_list": "lista bannati", "block_delay": { - "minimum": "ritardo minimo dei blocchi per Approvazione di Transazioni di Gruppo", - "maximum": "ritardo massimo dei blocchi per Approvazione di Transazioni di Gruppo" + "minimum": "ritardo minimo dei blocchi per le approvazioni delle transazioni di gruppo", + "maximum": "ritardo massimo dei blocchi per le approvazioni delle transazioni di gruppo" }, "group": { - "closed": "chiuso (privato) - gli utenti necessitano di permesso per unirsi", + "closed": "chiuso (privato) – gli utenti hanno bisogno del permesso per entrare", "description": "descrizione del gruppo", + "id": "ID gruppo", "invites": "inviti del gruppo", "management": "gestione del gruppo", + "member_number": "numero di membri", "name": "nome del gruppo", "open": "aperto (pubblico)", "type": "tipo di gruppo" }, "invitation_expiry": "tempo di scadenza dell'invito", + "invitees_list": "lista degli invitati", + "join_link": "link per unirsi al gruppo", "join_requests": "richieste di adesione", - "question": { - "cancel_ban": "vuoi eseguire una transazione CANCEL_GROUP_BAN?", - "create_group": "vuoi eseguire una transazione CREATE_GROUP?", - "group_invite": "vuoi eseguire una transazione GROUP_INVITE?", - "join_group": "vuoi eseguire una transazione JOIN_GROUP?", - "provide_thread": "per favore fornisci un titolo per il thread" - }, + "last_message": "ultimo messaggio", + "latest_mails": "ultimi Q-Mails", "message": { "generic": { - "encryption_key": "la prima chiave di cifratura comune del gruppo è in fase di creazione. Attendere alcuni minuti affinché venga recuperata dalla rete. Controllo ogni 2 minuti...", + "already_in_group": "sei già in questo gruppo!", + "closed_group": "questo è un gruppo chiuso/privato, devi aspettare che un admin accetti la tua richiesta", + "descrypt_wallet": "decrittazione portafoglio in corso...", + "encryption_key": "la prima chiave di cifratura comune del gruppo è in fase di creazione. Attendere qualche minuto affinché venga recuperata dalla rete. Controllo ogni 2 minuti...", "group_invited_you": "{{group}} ti ha invitato", - "no_display": "niente da visualizzare", + "loading_members": "caricamento elenco membri con nomi... attendere.", + "no_display": "niente da mostrare", "no_selection": "nessun gruppo selezionato", - "not_part_group": "non fai parte del gruppo cifrato dei membri. Attendi che un amministratore ri-codifichi le chiavi.", - "only_encrypted": "verranno visualizzati solo i messaggi non cifrati.", - "setting_group": "configurazione del gruppo... attendere prego." + "not_part_group": "non fai parte del gruppo cifrato. Attendi che un amministratore re-critti le chiavi.", + "only_encrypted": "verranno mostrati solo i messaggi non cifrati.", + "private_key_copied": "chiave privata copiata", + "provide_message": "inserisci un primo messaggio per la discussione", + "secure_place": "conserva la tua chiave privata in un luogo sicuro. Non condividerla!", + "setting_group": "configurazione del gruppo in corso... attendere." }, "error": { "access_name": "impossibile inviare un messaggio senza accesso al tuo nome", - "description_required": "per favore fornisci una descrizione", + "descrypt_wallet": "errore nella decrittazione del portafoglio {{ :errorMessage }}", + "description_required": "inserisci una descrizione", "group_info": "impossibile accedere alle informazioni del gruppo", - "name_required": "per favore fornisci un nome", - "notify_admins": "prova a notificare un admin dalla lista di amministratori qui sotto:" + "group_secret_key": "impossibile ottenere la chiave segreta del gruppo", + "name_required": "inserisci un nome", + "notify_admins": "prova a contattare un amministratore dalla lista qui sotto:", + "thread_id": "impossibile trovare l'ID della discussione" }, "success": { + "group_ban": "membro bannato con successo dal gruppo. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino", "group_creation": "gruppo creato con successo. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino", "group_creation_name": "gruppo {{group_name}} creato: in attesa di conferma", "group_creation_label": "gruppo {{name}} creato: successo!", - "group_invite": "invito inviato con successo a {{value}}. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino", - "join_creation": "richiesta di adesione al gruppo inviata con successo. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino", + "group_invite": "{{value}} invitato con successo. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino", + "group_join": "richiesta di accesso al gruppo inviata con successo. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino", "group_join_name": "entrato nel gruppo {{group_name}}: in attesa di conferma", "group_join_label": "entrato nel gruppo {{name}}: successo!", - "loading_threads": "caricamento thread... attendere prego.", - "unbanned_user": "utente sbannato con successo. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino" + "group_join_request": "richiesta di accesso al gruppo {{group_name}}: in attesa di conferma", + "group_join_outcome": "richiesta di accesso al gruppo {{group_name}}: successo!", + "group_kick": "membro espulso con successo dal gruppo. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino", + "group_leave": "richiesta di uscita dal gruppo inviata con successo. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino", + "group_leave_name": "uscito dal gruppo {{group_name}}: in attesa di conferma", + "group_leave_label": "uscito dal gruppo {{name}}: successo!", + "group_member_admin": "membro nominato amministratore con successo. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino", + "group_remove_member": "amministratore rimosso con successo. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino", + "invitation_cancellation": "invito annullato con successo. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino", + "invitation_request": "richiesta di adesione accettata: in attesa di conferma", + "loading_threads": "caricamento discussioni... attendere.", + "post_creation": "post creato con successo. Potrebbe volerci un po' per la pubblicazione", + "thread_creation": "discussione creata con successo. Potrebbe volerci un po' per la pubblicazione", + "unbanned_user": "utente sbannato con successo. Potrebbero volerci alcuni minuti affinché le modifiche si propaghino", + "user_joined": "utente entrato con successo!" } - } + }, + "question": { + "perform_transaction": "vuoi eseguire una transazione di tipo {{action}}?", + "provide_thread": "inserisci un titolo per la discussione" + }, + "thread_posts": "nuovi messaggi nella discussione" } diff --git a/src/i18n/locales/ru/core.json b/src/i18n/locales/ru/core.json index 04bf898..58e4aec 100644 --- a/src/i18n/locales/ru/core.json +++ b/src/i18n/locales/ru/core.json @@ -1,53 +1,108 @@ { - "add": "добавить", - "cancel": "отмена", - "choose": "выбрать", - "close": "закрыть", - "continue": "продолжить", + "action": { + "add": "добавить", + "accept": "принять", + "backup_account": "резервное копирование аккаунта", + "backup_wallet": "резервное копирование кошелька", + "cancel": "отменить", + "cancel_invitation": "отменить приглашение", + "change": "изменить", + "change_language": "сменить язык", + "choose": "выбрать", + "close": "закрыть", + "continue": "продолжить", + "continue_logout": "продолжить выход", + "create_thread": "создать тему", + "decline": "отклонить", + "decrypt": "расшифровать", + "edit": "редактировать", + "export": "экспорт", + "import": "импорт", + "invite": "пригласить", + "join": "присоединиться", + "logout": "выйти", + "new": { + "post": "новое сообщение", + "thread": "новая тема" + }, + "notify": "уведомить", + "post": "опубликовать", + "post_message": "отправить сообщение" + }, + "admin": "администратор", "core": { "block_height": "высота блока", "information": "информация ядра", - "peers": "подключенные узлы", + "peers": "подключённые узлы", "version": "версия ядра" }, + "ui": { + "version": "версия интерфейса" + }, + "count": { + "none": "нет", + "one": "один" + }, "description": "описание", - "edit": "редактировать", - "export": "экспорт", - "import": "импорт", + "downloading_qdn": "загрузка из QDN", + "fee": { + "payment": "комиссия за платёж", + "publish": "комиссия за публикацию" + }, + "general_settings": "общие настройки", "last_height": "последняя высота", + "list": { + "invite": "список приглашений", + "join_request": "список запросов на вступление", + "member": "список участников" + }, "loading": "загрузка...", - "logout": "выйти", - "minting_status": "статус чеканки", - "payment_notification": "уведомление о платеже", - "price": "цена", - "q_mail": "q-mail", - "result": { + "loading_posts": "загрузка сообщений... пожалуйста, подождите.", + "message_us": "напишите нам в Telegram или Discord, если вам нужно 4 QORT, чтобы начать чат без ограничений", + "message": { "error": { "generic": "произошла ошибка", "incorrect_password": "неверный пароль", + "missing_field": "отсутствует: {{ field }}", "save_qdn": "не удалось сохранить в QDN" }, "status": { - "minting": "(чеканка)", - "not_minting": "(не чеканится)", + "minting": "(выпуск монет)", + "not_minting": "(не выпускается)", "synchronized": "синхронизировано", "synchronizing": "синхронизация" }, "success": { - "publish_qdn": "успешно опубликовано в QDN" + "order_submitted": "ваш ордер на покупку отправлен", + "publish_qdn": "успешно опубликовано в QDN", + "request_read": "я прочитал этот запрос", + "transfer": "перевод выполнен успешно!" } }, + "minting_status": "статус выпуска", + "page": { + "last": "последняя", + "first": "первая", + "next": "следующая", + "previous": "предыдущая" + }, + "payment_notification": "уведомление о платеже", + "price": "цена", + "q_mail": "q-mail", + "question": { + "new_user": "вы новый пользователь?" + }, "save_options": { "no_pinned_changes": "у вас нет изменений в закреплённых приложениях", - "overwrite_changes": "приложению не удалось загрузить ваши закреплённые приложения, сохранённые в QDN. Хотите перезаписать эти изменения?", + "overwrite_changes": "не удалось загрузить ваши закреплённые приложения из QDN. Перезаписать изменения?", "overwrite_qdn": "перезаписать в QDN", - "publish_qdn": "хотите опубликовать свои настройки в QDN (зашифровано)?", + "publish_qdn": "опубликовать настройки в QDN (в зашифрованном виде)?", "qdn": "использовать сохранение в QDN", - "register_name": "вам необходимо зарегистрированное имя Qortal для сохранения закреплённых приложений в QDN.", - "reset_pinned": "не устраивают текущие локальные изменения? Хотите сбросить до приложений по умолчанию?", - "reset_qdn": "не устраивают текущие локальные изменения? Хотите сбросить до сохранённых в QDN приложений?", - "revert_default": "сбросить до стандартных", - "revert_qdn": "сбросить до QDN", + "register_name": "вам нужно зарегистрированное имя Qortal, чтобы сохранять закреплённые приложения в QDN.", + "reset_pinned": "не нравятся текущие локальные изменения? Сбросить до стандартных приложений?", + "reset_qdn": "не нравятся текущие локальные изменения? Сбросить до сохранённых в QDN приложений?", + "revert_default": "сбросить по умолчанию", + "revert_qdn": "восстановить из QDN", "save_qdn": "сохранить в QDN", "save": "сохранить", "settings": "вы используете метод экспорта/импорта для сохранения настроек.", @@ -59,11 +114,18 @@ "dark": "тёмная тема", "light": "светлая тема" }, + "time": { + "day_one": "{{count}} день", + "day_other": "{{count}} дней", + "hour_one": "{{count}} час", + "hour_other": "{{count}} часов", + "minute_one": "{{count}} минута", + "minute_other": "{{count}} минут" + }, "title": "заголовок", "tutorial": "учебник", "user_lookup": "поиск пользователя", "wallet": { - "backup_wallet": "резервная копия кошелька", "wallet": "кошелёк", "wallet_other": "кошельки" }, diff --git a/src/i18n/locales/ru/group.json b/src/i18n/locales/ru/group.json new file mode 100644 index 0000000..b5e52eb --- /dev/null +++ b/src/i18n/locales/ru/group.json @@ -0,0 +1,105 @@ +{ + "action": { + "ban": "заблокировать участника группы", + "cancel_ban": "отменить блокировку", + "copy_private_key": "скопировать приватный ключ", + "create_group": "создать группу", + "disable_push_notifications": "отключить все push-уведомления", + "enable_dev_mode": "включить режим разработчика", + "export_password": "экспортировать пароль", + "export_private_key": "экспортировать приватный ключ", + "find_group": "найти группу", + "join_group": "вступить в группу", + "kick_member": "исключить участника из группы", + "invite_member": "пригласить участника", + "leave_group": "выйти из группы", + "load_members": "загрузить участников с именами", + "make_admin": "сделать админом", + "manage_members": "управлять участниками", + "refetch_page": "перезагрузить страницу", + "remove_admin": "удалить из админов", + "return_to_thread": "вернуться к темам" + }, + "advanced_options": "расширенные настройки", + "approval_threshold": "порог одобрения группы (число / процент админов, необходимых для подтверждения транзакции)", + "ban_list": "список заблокированных", + "block_delay": { + "minimum": "минимальная задержка блоков для одобрения транзакций в группе", + "maximum": "максимальная задержка блоков для одобрения транзакций в группе" + }, + "group": { + "closed": "закрытая (приватная) — требуется разрешение на вступление", + "description": "описание группы", + "id": "ID группы", + "invites": "приглашения группы", + "management": "управление группой", + "member_number": "количество участников", + "name": "название группы", + "open": "открытая (публичная)", + "type": "тип группы" + }, + "invitation_expiry": "время истечения приглашения", + "invitees_list": "список приглашённых", + "join_link": "ссылка для вступления в группу", + "join_requests": "запросы на вступление", + "last_message": "последнее сообщение", + "latest_mails": "последние Q-Mail'ы", + "message": { + "generic": { + "already_in_group": "вы уже в этой группе!", + "closed_group": "эта группа закрыта, дождитесь подтверждения от администратора", + "descrypt_wallet": "дешифровка кошелька...", + "encryption_key": "первая общая ключевая фраза группы создаётся. Подождите несколько минут для получения через сеть. Проверка каждые 2 минуты...", + "group_invited_you": "{{group}} пригласила вас", + "loading_members": "загрузка списка участников с именами... пожалуйста, подождите.", + "no_display": "нечего отображать", + "no_selection": "группа не выбрана", + "not_part_group": "вы не состоите в зашифрованной группе. Дождитесь повторного шифрования ключей администратором.", + "only_encrypted": "отображаются только незашифрованные сообщения.", + "private_key_copied": "приватный ключ скопирован", + "provide_message": "введите первое сообщение для темы", + "secure_place": "храните приватный ключ в безопасном месте. Не передавайте его никому!", + "setting_group": "настройка группы... пожалуйста, подождите." + }, + "error": { + "access_name": "невозможно отправить сообщение без доступа к вашему имени", + "descrypt_wallet": "ошибка при дешифровке кошелька {{ :errorMessage }}", + "description_required": "введите описание", + "group_info": "не удалось получить информацию о группе", + "group_secret_key": "не удалось получить секретный ключ группы", + "name_required": "введите имя", + "notify_admins": "попробуйте связаться с администратором из списка ниже:", + "thread_id": "не удалось найти ID темы" + }, + "success": { + "group_ban": "участник успешно заблокирован. Распространение изменений может занять несколько минут", + "group_creation": "группа успешно создана. Распространение изменений может занять несколько минут", + "group_creation_name": "создана группа {{group_name}}: ожидает подтверждения", + "group_creation_label": "группа {{name}} создана: успех!", + "group_invite": "{{value}} успешно приглашён. Распространение изменений может занять несколько минут", + "group_join": "запрос на вступление успешно отправлен. Распространение изменений может занять несколько минут", + "group_join_name": "вступление в группу {{group_name}}: ожидает подтверждения", + "group_join_label": "вступление в группу {{name}}: успех!", + "group_join_request": "запрос на вступление в группу {{group_name}}: ожидает подтверждения", + "group_join_outcome": "вступление в группу {{group_name}}: успех!", + "group_kick": "участник успешно удалён из группы. Распространение изменений может занять несколько минут", + "group_leave": "запрос на выход из группы успешно отправлен. Распространение изменений может занять несколько минут", + "group_leave_name": "выход из группы {{group_name}}: ожидает подтверждения", + "group_leave_label": "выход из группы {{name}}: успех!", + "group_member_admin": "пользователь успешно назначен администратором. Распространение изменений может занять несколько минут", + "group_remove_member": "администратор успешно удалён. Распространение изменений может занять несколько минут", + "invitation_cancellation": "приглашение успешно отменено. Распространение изменений может занять несколько минут", + "invitation_request": "запрос на вступление принят: ожидает подтверждения", + "loading_threads": "загрузка тем... пожалуйста, подождите.", + "post_creation": "сообщение успешно создано. Публикация может занять некоторое время", + "thread_creation": "тема успешно создана. Публикация может занять некоторое время", + "unbanned_user": "пользователь успешно разблокирован. Распространение изменений может занять несколько минут", + "user_joined": "пользователь успешно присоединился!" + } + }, + "question": { + "perform_transaction": "вы хотите выполнить транзакцию типа {{action}}?", + "provide_thread": "укажите заголовок темы" + }, + "thread_posts": "новые сообщения в теме" +}