diff --git a/docs/sprint-status.yaml b/docs/sprint-status.yaml index 360e139..a9cd0c2 100644 --- a/docs/sprint-status.yaml +++ b/docs/sprint-status.yaml @@ -51,7 +51,7 @@ development_status: 3-6-stripe-subscription-tiers: review epic-3-retrospective: optional epic-4: in-progress - 4-1-gdpr-cookie-consent: ready-for-dev + 4-1-gdpr-cookie-consent: in-progress 4-2-gdpr-right-to-be-forgotten: backlog 4-3-data-portability: backlog 4-4-explicit-ai-consent: backlog diff --git a/docs/stripe-billing-guide.md b/docs/stripe-billing-guide.md new file mode 100644 index 0000000..e6622ed --- /dev/null +++ b/docs/stripe-billing-guide.md @@ -0,0 +1,451 @@ +# Momento — Guide Stripe : Configuration, Architecture et Utilisation + +## Vue d'ensemble + +Momento utilise **Stripe** pour la gestion des abonnements payants (Pro, Business, Enterprise). Le système repose sur : + +- **Stripe Embedded Checkout** (modal dans l'app, sans redirection) +- **Webhooks** pour synchroniser l'état des abonnements en temps réel +- **Customer Portal** pour que les utilisateurs gèrent leur carte/facturation +- Un **feature flag** pour activer/désactiver le billing sans déploiement + +--- + +## 1. Architecture + +``` +┌─────────────────────────────────────────────────────────┐ +│ Frontend (React) │ +│ │ +│ /settings/billing │ +│ └─ billing-plans.tsx │ +│ ├─ Cartes Free / Pro / Business / Enterprise │ +│ ├─ Toggle mensuel/annuel │ +│ ├─ Embedded Checkout (modal Stripe) │ +│ └─ Lien vers Customer Portal │ +│ │ +│ /settings → SettingsNav → onglet "Facturation" │ +│ Sidebar → UsageMeter → lien vers /settings/billing │ +└───────────────────────┬─────────────────────────────────┘ + │ + POST /api/billing/create-checkout + POST /api/billing/portal + GET /api/billing/status + │ +┌───────────────────────▼─────────────────────────────────┐ +│ Backend (Next.js API) │ +│ │ +│ lib/stripe.ts → Client Stripe singleton │ +│ lib/billing/ → Logique métier billing │ +│ ├─ stripe-prices.ts → Mapping priceId ↔ tier │ +│ └─ sync-subscription-from-stripe.ts │ +│ → Upsert Prisma Subscription depuis webhook │ +│ │ +│ POST /api/billing/webhook → Reception événements │ +│ Stripe (raw body + sig) │ +└───────────────────────┬─────────────────────────────────┘ + │ + ┌────────────▼────────────┐ + │ PostgreSQL (Prisma) │ + │ │ + │ Subscription { │ + │ userId │ + │ tier (BASIC/PRO/ │ + │ BUSINESS/ENTERP.) │ + │ status (ACTIVE/ │ + │ CANCELED/...) │ + │ stripeCustomerId │ + │ stripeSubscriptionId │ + │ stripePriceId │ + │ currentPeriodStart │ + │ currentPeriodEnd │ + │ cancelAtPeriodEnd │ + │ } │ + └────────────┬────────────┘ + │ + ┌────────────▼────────────┐ + │ Redis │ + │ │ + │ usage:{userId}: │ + │ {feature}:{period} │ + │ → Compteurs mensuels │ + └─────────────────────────┘ +``` + +--- + +## 2. Configuration pas à pas + +### 2.1 Créer un compte Stripe + +1. Aller sur https://dashboard.stripe.com/register +2. Créer un compte (utiliser l'email `sales@memento-note.com`) +3. Activer le **mode test** (toggle en haut à droite) + +### 2.2 Créer les produits et prix + +Dans le **Stripe Dashboard** → **Produits** : + +#### Produit 1 : Momento Pro + +| Champ | Valeur | +|-------|--------| +| Nom | Momento Pro | +| Description | Pour les consultants et créateurs exigeants | + +Créer **2 prix** : + +| Prix | Montant | Récurrent | +|------|---------|-----------| +| Pro Mensuel | 9,90 EUR | Tous les mois | +| Pro Annuel | 99 EUR | Tous les ans | + +#### Produit 2 : Momento Business + +| Champ | Valeur | +|-------|--------| +| Nom | Momento Business | +| Description | Pour les équipes et chefs de produit | + +Créer **2 prix** : + +| Prix | Montant | Récurrent | +|------|---------|-----------| +| Business Mensuel | 29,90 EUR | Tous les mois | +| Business Annuel | 299 EUR | Tous les ans | + +> **Enterprise** n'a pas de prix Stripe — c'est un contact manuel (`sales@memento-note.com`). + +### 2.3 Récupérer les clés et price IDs + +Dans **Stripe Dashboard** → **Développeurs** → **Clés API** : + +| Variable | Où la trouver | +|----------|---------------| +| `STRIPE_SECRET_KEY` | Clés API → Clé secrète (sk_test_...) | +| `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY` | Clés API → Clé publiable (pk_test_...) | + +Dans **Stripe Dashboard** → **Produits** → cliquer sur chaque prix : + +| Variable | Source | +|----------|--------| +| `STRIPE_PRICE_PRO_MONTHLY` | Produit Pro → Prix mensuel → `price_1xxx...` | +| `STRIPE_PRICE_PRO_ANNUAL` | Produit Pro → Prix annuel → `price_1yyy...` | +| `STRIPE_PRICE_BUSINESS_MONTHLY` | Produit Business → Prix mensuel → `price_1zzz...` | +| `STRIPE_PRICE_BUSINESS_ANNUAL` | Produit Business → Prix annuel → `price_1www...` | + +### 2.4 Configurer le webhook + +Dans **Stripe Dashboard** → **Développeurs** → **Webhooks** : + +1. Cliquer **Ajouter un endpoint** +2. URL : `https://memento-note.com/api/billing/webhook` +3. Événements à écouter : + - `checkout.session.completed` + - `customer.subscription.created` + - `customer.subscription.updated` + - `customer.subscription.deleted` + - `invoice.payment_failed` +4. Copier la **signature secrète** → `STRIPE_WEBHOOK_SECRET` (commence par `whsec_...`) + +### 2.5 Configurer le Customer Portal + +Dans **Stripe Dashboard** → **Paramètres** → **Customer Portal** : + +1. Activer le portal +2. Configurer les fonctions autorisées : + - Mettre à jour le moyen de paiement + - Voir les factures + - Annuler l'abonnement + - Changer de plan (optionnel) +3. URL de retour : `https://memento-note.com/settings/billing` + +### 2.6 Remplir le fichier `.env` + +Ajouter dans `memento-note/.env` : + +```env +# Stripe — Server-side (NE JAMAIS exposer côté client) +STRIPE_SECRET_KEY="sk_test_VOTRE_CLE_SECRETE" +STRIPE_WEBHOOK_SECRET="whsec_VOTRE_SIGNATURE_WEBHOOK" + +# Stripe — Price IDs +STRIPE_PRICE_PRO_MONTHLY="price_ID_PRO_MENSUEL" +STRIPE_PRICE_PRO_ANNUAL="price_ID_PRO_ANNUEL" +STRIPE_PRICE_BUSINESS_MONTHLY="price_ID_BUSINESS_MENSUEL" +STRIPE_PRICE_BUSINESS_ANNUAL="price_ID_BUSINESS_ANNUEL" + +# Stripe — Client-side (sûr à exposer) +NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_test_VOTRE_CLE_PUBLIABLE" + +# Activer l'interface de facturation +NEXT_PUBLIC_FEATURE_BILLING_ENABLED="true" +``` + +> **Important** : Relancer le serveur après modification du `.env`. + +### 2.7 Résumé des variables + +| Variable | Où | Obligatoire | +|----------|----|----| +| `STRIPE_SECRET_KEY` | `.env` (server) | Oui | +| `STRIPE_WEBHOOK_SECRET` | `.env` (server) | Oui | +| `STRIPE_PRICE_PRO_MONTHLY` | `.env` (server) | Oui | +| `STRIPE_PRICE_PRO_ANNUAL` | `.env` (server) | Oui | +| `STRIPE_PRICE_BUSINESS_MONTHLY` | `.env` (server) | Oui | +| `STRIPE_PRICE_BUSINESS_ANNUAL` | `.env` (server) | Oui | +| `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY` | `.env` (client+server) | Oui | +| `NEXT_PUBLIC_FEATURE_BILLING_ENABLED` | `.env` (client+server) | Oui | + +--- + +## 3. Flux utilisateur + +### 3.1 Checkout (achat d'un plan) + +``` +Utilisateur Frontend Backend Stripe + │ │ │ │ + │ Clique "Passer Pro" │ │ │ + │───────────────────────────>│ │ │ + │ │ POST /api/billing/ │ │ + │ │ create-checkout │ │ + │ │ {tier: "PRO", │ │ + │ │ interval: "month"} │ │ + │ │─────────────────────────>│ │ + │ │ │ Crée/respire │ + │ │ │ Customer + Session │ + │ │ │───────────────────────>│ + │ │ │ │ + │ │ │ {clientSecret} │ + │ │ │<───────────────────────│ + │ │ │ │ + │ │ Modal Embedded │ │ + │ │ Checkout Stripe │ │ + │ │<─────────────────────────│ │ + │ │ │ │ + │ Remplit carte 4242... │ │ │ + │───────────────────────────>│ │ │ + │ │ Paiement Stripe │ │ + │ │─────────────────────────────────────────────────>│ + │ │ │ │ + │ │ │ Webhook: │ + │ │ │ checkout.session. │ + │ │ │ completed │ + │ │ │<───────────────────────│ + │ │ │ │ + │ │ │ Upsert Subscription │ + │ │ │ tier=PRO status=ACTIVE│ + │ │ │ │ + │ Toast "Bienvenue Pro !" │ │ │ + │ UsageMeter rafraîchi │ │ │ + │<───────────────────────────│ │ │ +``` + +### 3.2 Webhook — Cycle de vie des abonnements + +| Événement Stripe | Action Momento | Statut Prisma | +|------------------|---------------|---------------| +| `checkout.session.completed` | Upsert subscription avec tier/periode | `ACTIVE` | +| `customer.subscription.created` | Upsert (nouvelle souscription) | Selon Stripe | +| `customer.subscription.updated` | Upsert (changement de plan, etc.) | Selon Stripe | +| `customer.subscription.deleted` | Marquer annulé | `CANCELED` | +| `invoice.payment_failed` | Sync subscription (passage en `PAST_DUE`) | `PAST_DUE` | + +### 3.3 Mapping statuts Stripe → Prisma + +| Stripe | Prisma | Comportement `getEffectiveTier()` | +|--------|--------|----------------------------------| +| `active` | `ACTIVE` | Retourne le tier payé (PRO/BUSINESS) | +| `trialing` | `TRIALING` | Retourne le tier (accès complet pendant l'essai) | +| `past_due` | `PAST_DUE` | Garde le tier jusqu'à `currentPeriodEnd` | +| `canceled` / `unpaid` | `CANCELED` | Garde le tier jusqu'à `currentPeriodEnd`, puis BASIC | +| `incomplete_expired` | `INACTIVE` | Retourne BASIC | + +--- + +## 4. Pages et composants + +### 4.1 Accès utilisateur + +| URL | Description | +|-----|-------------| +| `/settings/billing` | Page principale : plans, usage, facturation | +| `/settings` → onglet "Facturation" | Navigation via SettingsNav | +| UsageMeter (sidebar) → "Upgrade" | Lien direct vers `/settings/billing` | + +### 4.2 Composants clés + +| Fichier | Rôle | +|---------|------| +| `components/settings/billing-plans.tsx` | Cartes de plans, checkout modal, usage grid, portal | +| `components/settings/SettingsNav.tsx` | Onglet "Facturation" avec icône CreditCard | +| `components/settings/billing-history.tsx` | Lien vers le portal Stripe pour factures | +| `components/usage-meter.tsx` | Meter sidebar → lien vers billing quand quota dépassé | + +### 4.3 API Routes + +| Route | Méthode | Auth | Description | +|-------|---------|------|-------------| +| `/api/billing/create-checkout` | POST | Session | Crée une session checkout embedded | +| `/api/billing/portal` | POST | Session | Ouvre le portal client Stripe | +| `/api/billing/status` | GET | Session | Retourne tier, status, periodEnd | +| `/api/billing/webhook` | POST | Signature Stripe | Reçoit les événements lifecycle | + +### 4.4 Librairies backend + +| Fichier | Rôle | +|---------|------| +| `lib/stripe.ts` | Client Stripe singleton (`getStripe()`) | +| `lib/billing/stripe-prices.ts` | `resolvePriceId()` et `priceIdToTier()` | +| `lib/billing/sync-subscription-from-stripe.ts` | Upsert Prisma depuis webhook Stripe | +| `lib/entitlements.ts` | `getEffectiveTier()`, `TIER_LIMITS`, `getUserQuotas()` | + +--- + +## 5. Quotas par tier + +| Feature | BASIC | PRO | BUSINESS | ENTERPRISE | +|---------|-------|-----|----------|------------| +| Recherche sémantique | 30 | 100 | 1000 | ∞ | +| Tags automatiques | 20 | 200 | 1000 | ∞ | +| Titres automatiques | 10 | 200 | 1000 | ∞ | +| Reformulation | — | 50 | 500 | ∞ | +| Chat IA | — | 100 | 1000 | ∞ | +| Brainstorm (création) | 1 | 30 | 200 | ∞ | +| Brainstorm (expansion) | 10 | 100 | 500 | ∞ | +| Brainstorm (enrichissement) | 20 | 200 | 1000 | ∞ | + +> Les compteurs sont stockés dans Redis avec un TTL de 90 jours. Le tier détermine les limites, pas les compteurs. + +--- + +## 6. Tests + +### Tests unitaires (22 tests, 100% passent) + +| Fichier | Tests | Description | +|---------|-------|-------------| +| `tests/unit/billing-price-map.test.ts` | 10 | Mapping priceId → tier, erreurs si env manquant | +| `tests/unit/billing-sync.test.ts` | 12 | Upsert Prisma, mapping statuts Stripe→Prisma, métadonnées | + +### Lancer les tests + +```bash +cd memento-note +npx vitest run tests/unit/billing-price-map.test.ts tests/unit/billing-sync.test.ts +``` + +--- + +## 7. Test local avec Stripe CLI + +### 7.1 Installer Stripe CLI + +```bash +# macOS +brew install stripe/stripe-cli/stripe + +# Linux +curl -s https://packages.stripe.dev/api/security/keypair/stripe-cli-gpg/public/download.gpg | sudo tee /usr/share/keyrings/stripe.gpg +echo "deb [signed-by=/usr/share/keyrings/stripe.gpg] https://packages.stripe.dev/stripe-cli-debian-local stable main" | sudo tee -a /etc/apt/sources.list.d/stripe.list +sudo apt update && sudo apt install stripe +``` + +### 7.2 Forward des webhooks en local + +```bash +stripe listen --forward-to localhost:3000/api/billing/webhook +``` + +Cette commande affiche la signature webhook (`whsec_...`) à mettre dans `STRIPE_WEBHOOK_SECRET`. + +### 7.3 Tester un paiement + +1. Lancer le serveur : `npm run dev` +2. Aller sur `/settings/billing` +3. Cliquer "Passer au Plan Pro" +4. Utiliser la carte test : **4242 4242 4242 4242** +5. Date d'expiration : n'importe quelle date future +6. CVC : n'importe quels 3 chiffres +7. Le webhook se déclenche → `Subscription` upserté dans la DB + +### 7.4 Vérifier en base + +```sql +SELECT tier, status, "currentPeriodStart", "currentPeriodEnd" +FROM "Subscription" +WHERE "userId" = 'VOTRE_USER_ID'; +``` + +### 7.5 Vérifier via l'API + +```bash +curl http://localhost:3000/api/billing/status -H "Cookie: next-auth.session-token=VOTRE_TOKEN" +``` + +Devrait retourner : +```json +{ + "tier": "PRO", + "effectiveTier": "PRO", + "status": "ACTIVE", + "currentPeriodEnd": "2026-06-16T...", + "cancelAtPeriodEnd": false, + "hasStripeSubscription": true +} +``` + +--- + +## 8. Passage en production + +### 8.1 Checklist + +- [ ] Compte Stripe vérifié (KYC complété) +- [ ] Produits et prix créés en **mode live** +- [ ] Webhook configuré en mode live avec l'URL de production +- [ ] Variables `.env` mises à jour avec les clés live (`sk_live_...`, `pk_live_...`) +- [ ] `NEXT_PUBLIC_FEATURE_BILLING_ENABLED="true"` +- [ ] Customer Portal configuré pour le mode live +- [ ] Tester un paiement réel avec une vraie carte + +### 8.2 Sécurité + +- **Jamais** de `STRIPE_SECRET_KEY` ou `STRIPE_WEBHOOK_SECRET` côté client +- Les price IDs sont côté serveur uniquement +- Le webhook vérifie la signature Stripe-Signature sur chaque requête +- L'upsert par `stripeSubscriptionId` garantit l'idempotence + +--- + +## 9. Dépannage + +### Les cartes de plans ne s'affichent pas +→ Vérifier `NEXT_PUBLIC_FEATURE_BILLING_ENABLED="true"` dans `.env` et relancer le serveur. + +### Le checkout ne s'ouvre pas +→ Vérifier `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY` est défini. Regarder la console navigateur. + +### Le webhook ne se déclenche pas +→ En local : utiliser `stripe listen --forward-to localhost:3000/api/billing/webhook` +→ En production : vérifier l'URL du webhook dans le Stripe Dashboard. + +### L'abonnement reste BASIC après paiement +→ Vérifier les logs du webhook (`[billing/webhook]`). Le `userId` doit être dans les metadata de la session. + +### `getStripe()` throw "STRIPE_SECRET_KEY is required" +→ Ajouter `STRIPE_SECRET_KEY` dans `.env`. + +--- + +## 10. Tarification + +| Tier | Mensuel | Annuel | Économie annuelle | +|------|---------|--------|-------------------| +| Gratuit | 0 € | — | — | +| Pro | 9,90 € | 99 € | ~17% | +| Business | 29,90 € | 299 € | ~17% | +| Enterprise | Sur devis | Sur devis | — | + +Devise : EUR (configurable dans Stripe Dashboard pour multi-devises). diff --git a/memento-note/app/(admin)/admin/user-list.tsx b/memento-note/app/(admin)/admin/user-list.tsx index 4d31130..1dd2702 100644 --- a/memento-note/app/(admin)/admin/user-list.tsx +++ b/memento-note/app/(admin)/admin/user-list.tsx @@ -135,7 +135,7 @@ export function UserList({ initialUsers }: { initialUsers: any[] }) { {t('admin.users.table.name')} {t('admin.users.table.email')} {t('admin.users.table.role')} - {t('admin.users.table.subscription') || 'Abonnement'} + {t('admin.users.table.subscription')} {t('admin.users.table.createdAt')} {t('admin.users.table.actions')} diff --git a/memento-note/app/(main)/settings/appearance/appearance-settings-client.tsx b/memento-note/app/(main)/settings/appearance/appearance-settings-client.tsx index 4368b30..da61644 100644 --- a/memento-note/app/(main)/settings/appearance/appearance-settings-client.tsx +++ b/memento-note/app/(main)/settings/appearance/appearance-settings-client.tsx @@ -56,7 +56,7 @@ export function AppearanceSettingsClient({ localStorage.setItem('theme-preference', next) applyDocumentTheme(next) await updateUserSettings({ theme: next }) - toast.success(t('settings.settingsSaved') || 'Saved') + toast.success(t('settings.settingsSaved')) } const handleFontSizeChange = async (value: string) => { @@ -64,7 +64,7 @@ export function AppearanceSettingsClient({ const map: Record = { small: '14px', medium: '16px', large: '18px', 'extra-large': '20px' } document.documentElement.style.setProperty('--user-font-size', map[value] || '16px') await updateAISettings({ fontSize: value as any }) - toast.success(t('settings.settingsSaved') || 'Saved') + toast.success(t('settings.settingsSaved')) } const handleFontFamilyChange = async (value: string) => { @@ -80,7 +80,7 @@ export function AppearanceSettingsClient({ if (font === 'playfair') root.classList.add('font-playfair') if (font === 'jetbrains') root.classList.add('font-jetbrains') await updateAISettings({ fontFamily: font as 'inter' | 'playfair' | 'jetbrains' | 'system' }) - toast.success(t('settings.settingsSaved') || 'Saved') + toast.success(t('settings.settingsSaved')) } const SelectCard = ({ @@ -174,7 +174,7 @@ export function AppearanceSettingsClient({ >

- {t('appearance.description') || "Personnalisez l'interface"} + {t('appearance.description')}

@@ -186,8 +186,8 @@ export function AppearanceSettingsClient({
-

{t('appearance.accentColorTitle') || 'Couleur d\'accentuation'}

-

{t('appearance.accentColorDescription') || 'Définissez la couleur principale de votre espace de travail'}

+

{t('appearance.accentColorTitle')}

+

{t('appearance.accentColorDescription')}

@@ -264,14 +264,14 @@ export function AppearanceSettingsClient({ diff --git a/memento-note/app/(main)/settings/general/general-settings-client.tsx b/memento-note/app/(main)/settings/general/general-settings-client.tsx index 805d6cc..cb1fd0d 100644 --- a/memento-note/app/(main)/settings/general/general-settings-client.tsx +++ b/memento-note/app/(main)/settings/general/general-settings-client.tsx @@ -32,12 +32,12 @@ export function GeneralSettingsClient({ initialSettings }: GeneralSettingsClient if (value === 'auto') { localStorage.removeItem('user-language') document.cookie = 'user-language=;path=/;max-age=0' - toast.success(t('settings.languageAuto') || 'Language set to Auto') + toast.success(t('settings.languageAuto')) } else { localStorage.setItem('user-language', value) document.cookie = `user-language=${value};path=/;max-age=${60 * 60 * 24 * 365};samesite=lax` setContextLanguage(value as any) - toast.success(t('profile.languageUpdateSuccess') || 'Language updated') + toast.success(t('profile.languageUpdateSuccess')) } setTimeout(() => router.refresh(), 300) } @@ -45,19 +45,19 @@ export function GeneralSettingsClient({ initialSettings }: GeneralSettingsClient const handleEmailNotificationsChange = async (enabled: boolean) => { setEmailNotifications(enabled) await updateAISettings({ emailNotifications: enabled }) - toast.success(t('settings.settingsSaved') || 'Saved') + toast.success(t('settings.settingsSaved')) } const handleDesktopNotificationsChange = async (enabled: boolean) => { setDesktopNotifications(enabled) await updateAISettings({ desktopNotifications: enabled }) - toast.success(t('settings.settingsSaved') || 'Saved') + toast.success(t('settings.settingsSaved')) } const handleAutoSaveChange = async (enabled: boolean) => { setAutoSave(enabled) await updateAISettings({ autoSave: enabled }) - toast.success(t('settings.settingsSaved') || 'Saved') + toast.success(t('settings.settingsSaved')) } return ( @@ -89,21 +89,21 @@ export function GeneralSettingsClient({ initialSettings }: GeneralSettingsClient className="w-full bg-white/50 dark:bg-black/40 border border-border rounded-xl px-5 py-3.5 text-sm outline-none focus:ring-1 ring-brand-accent/20 appearance-none cursor-pointer transition-all hover:bg-white dark:hover:bg-black/60 text-ink font-medium" > - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +
@@ -159,8 +159,8 @@ export function GeneralSettingsClient({ initialSettings }: GeneralSettingsClient
-

{t('settings.autoSave') || 'Auto-Save'}

-

{t('settings.autoSaveDesc') || 'Sauvegarder automatiquement les modifications'}

+

{t('settings.autoSave')}

+

{t('settings.autoSaveDesc')}

diff --git a/memento-note/app/(main)/trash/trash-client.tsx b/memento-note/app/(main)/trash/trash-client.tsx index 4a0e1bf..ddd290b 100644 --- a/memento-note/app/(main)/trash/trash-client.tsx +++ b/memento-note/app/(main)/trash/trash-client.tsx @@ -62,7 +62,7 @@ export function TrashClient({ const all: TrashItem[] = [ ...notes.map(n => ({ id: n.id, - title: n.title || t('notes.untitled') || 'Untitled', + title: n.title || t('notes.untitled'), itemType: 'note' as const, deletedAt: (n as any).trashedAt || null, content: n.content, @@ -101,9 +101,9 @@ export function TrashClient({ await restoreNb(item.id) setNotebooks(prev => prev.filter((nb: any) => nb.id !== item.id)) } - toast.success(t('trash.restoreSuccess') || 'Restored successfully') + toast.success(t('trash.restoreSuccess')) } catch { - toast.error(t('trash.restoreError') || 'Failed to restore') + toast.error(t('trash.restoreError')) } } @@ -116,22 +116,22 @@ export function TrashClient({ await permDeleteNb(item.id) setNotebooks(prev => prev.filter((nb: any) => nb.id !== item.id)) } - toast.success(t('trash.permanentDeleteSuccess') || 'Permanently deleted') + toast.success(t('trash.permanentDeleteSuccess')) } catch { - toast.error(t('trash.deleteError') || 'Failed to delete') + toast.error(t('trash.deleteError')) } } const handleEmptyTrash = async () => { - if (!window.confirm(t('trash.emptyTrashConfirm') || 'Empty trash? This is irreversible.')) return + if (!window.confirm(t('trash.emptyTrashConfirm'))) return setIsEmptying(true) try { await emptyTrash() setNotes([]) setNotebooks([]) - toast.success(t('trash.emptyTrashSuccess') || 'Trash emptied') + toast.success(t('trash.emptyTrashSuccess')) } catch { - toast.error(t('trash.deleteError') || 'Failed to empty trash') + toast.error(t('trash.deleteError')) } finally { setIsEmptying(false) } @@ -143,10 +143,10 @@ export function TrashClient({

- {t('sidebar.trash') || 'Trash'} + {t('sidebar.trash')}

- {t('trash.autoDelete30') || 'Auto-delete after 30 days'} + {t('trash.autoDelete30')}

@@ -156,7 +156,7 @@ export function TrashClient({ disabled={isEmptying} className="px-6 py-3 bg-card border border-border text-rose-500 rounded-2xl text-[10px] font-bold uppercase tracking-widest hover:bg-rose-50 hover:border-rose-100 transition-all shadow-sm disabled:opacity-50" > - {t('trash.emptyTrash') || 'Empty all'} + {t('trash.emptyTrash')} )}
@@ -166,7 +166,7 @@ export function TrashClient({ setSearchQuery(e.target.value)} className="w-full bg-white dark:bg-white/5 border border-border/40 rounded-2xl pl-12 pr-6 py-4 text-sm outline-none focus:ring-4 ring-foreground/5 transition-all shadow-sm" @@ -181,7 +181,7 @@ export function TrashClient({ className={`px-6 py-3 rounded-xl text-[10px] font-bold uppercase tracking-widest transition-all ${filterType === type ? 'bg-foreground text-background shadow-lg' : 'text-muted-foreground hover:text-foreground'}`} > - {type === 'all' ? (t('trash.filterAll') || 'All') : type === 'notes' ? (t('nav.notes') || 'Notes') : (t('nav.notebooks') || 'Notebooks')} + {type === 'all' ? t('trash.filterAll') : type === 'notes' ? t('nav.notes') : t('nav.notebooks')} ))}
@@ -220,12 +220,12 @@ export function TrashClient({ onClick={() => handleRestore(item)} className="flex items-center gap-2 px-4 py-2 bg-emerald-50 text-emerald-600 rounded-xl text-[10px] font-bold uppercase tracking-widest hover:bg-emerald-100 transition-colors" > - {t('trash.restore') || 'Restore'} + {t('trash.restore')} @@ -238,7 +238,7 @@ export function TrashClient({
- {daysLeft} {t('trash.daysRemaining') || 'DAYS LEFT'} + {daysLeft} {t('trash.daysRemaining')}
{item.deletedAt && ( @@ -255,7 +255,7 @@ export function TrashClient({ ) : (
- {t('trash.notebookContentPreserved') || 'Notebook content preserved'} + {t('trash.notebookContentPreserved')}
)} @@ -271,10 +271,10 @@ export function TrashClient({

- {t('trash.empty') || 'Trash is empty'} + {t('trash.empty')}

- {t('trash.emptyDescription') || 'Deleted items will appear here. They are kept for 30 days before permanent deletion.'} + {t('trash.emptyDescription')}

@@ -284,7 +284,7 @@ export function TrashClient({ diff --git a/memento-note/components/ai-chat.tsx b/memento-note/components/ai-chat.tsx index 8045455..5e820fc 100644 --- a/memento-note/components/ai-chat.tsx +++ b/memento-note/components/ai-chat.tsx @@ -58,13 +58,9 @@ export function AIChat({ showFloatingTrigger = true }: { showFloatingTrigger?: b if (parsed.error === 'QUOTA_EXCEEDED') { const isBasic = (parsed.currentTier || 'BASIC') === 'BASIC' toast.error( - language === 'fr' - ? isBasic - ? 'Le chat IA est réservé au plan PRO et supérieur.' - : `Limite mensuelle atteinte pour le plan ${parsed.currentTier}. Elle se réinitialise le mois prochain.` - : isBasic - ? 'AI Chat is available from the PRO plan onwards.' - : `Monthly quota reached for ${parsed.currentTier} plan. It will reset next month.`, + isBasic + ? t('chat.quotaExceededBasic') + : t('chat.quotaExceededTier', { tier: parsed.currentTier }), { duration: 8000 } ) return diff --git a/memento-note/components/brainstorm/activity-feed.tsx b/memento-note/components/brainstorm/activity-feed.tsx index ce4ae77..1bfb507 100644 --- a/memento-note/components/brainstorm/activity-feed.tsx +++ b/memento-note/components/brainstorm/activity-feed.tsx @@ -40,7 +40,7 @@ function getActionLabel(action: string, t: (key: string) => string | undefined): function timeAgo(dateStr: string, t: (key: string) => string | undefined): string { const diff = Date.now() - new Date(dateStr).getTime() const mins = Math.floor(diff / 60000) - if (mins < 1) return t('brainstorm.justNow') || 'just now' + if (mins < 1) return t('brainstorm.justNow') if (mins < 60) return `${mins}m` const hours = Math.floor(mins / 60) if (hours < 24) return `${hours}h` @@ -63,7 +63,7 @@ export function ActivityFeed({ activities, isOpen, onToggle, t }: ActivityFeedPr

- {t('brainstorm.activityTitle') || 'Activity'} + {t('brainstorm.activityTitle')}

{currentNotebook && ( @@ -520,7 +520,7 @@ export function HomeClient({ initialNotes, initialSettings }: HomeClientProps) { className="flex items-center gap-2 text-[13px] text-foreground font-medium hover:opacity-70 transition-opacity" > - {t('notebook.createSubNotebook') || 'Nouveau sous-carnet'} + {t('notebook.createSubNotebook')} )} @@ -558,7 +558,7 @@ export function HomeClient({ initialNotes, initialSettings }: HomeClientProps) { router.push(`/home?${params.toString()}`) } }} - placeholder={t('search.placeholder') || 'Rechercher...'} + placeholder={t('search.placeholder')} className="w-48 bg-transparent border-b border-foreground/20 focus:border-foreground outline-none text-[13px] text-foreground placeholder:text-muted-foreground/50 py-0.5 transition-colors" /> {inlineSearchQuery && ( @@ -585,7 +585,7 @@ export function HomeClient({ initialNotes, initialSettings }: HomeClientProps) { className="flex items-center gap-2 text-[13px] text-foreground font-medium hover:opacity-70 transition-opacity" > - {t('notes.search') || 'Search'} + {t('notes.search')} )} @@ -595,7 +595,7 @@ export function HomeClient({ initialNotes, initialSettings }: HomeClientProps) { className="flex items-center gap-2 text-[13px] text-foreground font-medium hover:opacity-70 transition-opacity" > - {t('notes.reorganize') || 'Réorganiser les notes'} + {t('notes.reorganize')} )} @@ -622,7 +622,7 @@ export function HomeClient({ initialNotes, initialSettings }: HomeClientProps) { title={initialSettings.aiAssistantEnabled ? t('notebook.summary') : t('notebook.assistantRequiredForSummarize')} > - {t('notebook.summary') || 'Summarize'} + {t('notebook.summary')} )} )} @@ -706,7 +706,7 @@ export function HomeClient({ initialNotes, initialSettings }: HomeClientProps) { onClick={() => setSelectedTagIds([])} className="px-3 py-1.5 text-[10px] font-bold uppercase tracking-wider text-red-500 hover:underline ms-auto" > - {t('labels.clearAll') || 'Clear all'} + {t('labels.clearAll')} )} @@ -745,14 +745,14 @@ export function HomeClient({ initialNotes, initialSettings }: HomeClientProps) { {notes.length === 0 && (

- {t('notes.emptyState') || 'This notebook is waiting for its first vision.'} + {t('notes.emptyState')}

)} diff --git a/memento-note/components/legal/cookie-preferences-dialog.tsx b/memento-note/components/legal/cookie-preferences-dialog.tsx new file mode 100644 index 0000000..38f0d2b --- /dev/null +++ b/memento-note/components/legal/cookie-preferences-dialog.tsx @@ -0,0 +1,126 @@ +'use client' + +import { useEffect, useState } from 'react' +import { useLanguage } from '@/lib/i18n' +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from '@/components/ui/dialog' +import { getConsent, setConsent } from '@/lib/consent/cookie-consent' +import { toast } from 'sonner' + +interface CookiePreferencesDialogProps { + open: boolean + onOpenChange: (open: boolean) => void +} + +export function CookiePreferencesDialog({ open, onOpenChange }: CookiePreferencesDialogProps) { + const { t } = useLanguage() + const [analytics, setAnalytics] = useState(false) + + useEffect(() => { + if (!open) return + const current = getConsent() + setAnalytics(current?.analytics ?? false) + }, [open]) + + const handleSave = () => { + setConsent({ analytics, marketing: false }) + toast.success(t('consent.preferences.saved')) + onOpenChange(false) + } + + return ( + + + + + {t('consent.preferences.title')} + + + {t('consent.preferences.description')} + + + + + + + + + + + + + + + ) +} + +function CategoryRow({ + title, + description, + checked, + onChange, + locked, +}: { + title: string + description: string + checked: boolean + onChange?: (v: boolean) => void + locked?: boolean +}) { + return ( + +
+

{title}

+

{description}

+ {locked && ( +

+ {title.includes('—') ? '' : ''} +

+ )} + + + + ) +} + +/** Avoid pulling motion into dialog — plain wrapper */ +function motionless({ children, className }: { children: React.ReactNode; className?: string }) { + return {children} +} diff --git a/memento-note/components/note-actions.tsx b/memento-note/components/note-actions.tsx index ed1003d..1ba77a6 100644 --- a/memento-note/components/note-actions.tsx +++ b/memento-note/components/note-actions.tsx @@ -234,7 +234,7 @@ export function NoteActions({ {historyEnabled - ? (t('notes.history') || 'Historique') + ? t('notes.history') : (t('notes.enableHistory') || "Activer l'historique")} )} diff --git a/memento-note/components/note-card.tsx b/memento-note/components/note-card.tsx index 16c8c87..ad6fead 100644 --- a/memento-note/components/note-card.tsx +++ b/memento-note/components/note-card.tsx @@ -351,9 +351,9 @@ export const NoteCard = memo(function NoteCard({ refreshNotes(note?.notebookId) if (!note.isPinned) { - toast.success(t('notes.pinned') || 'Note pinned') + toast.success(t('notes.pinned')) } else { - toast.info(t('notes.unpinned') || 'Note unpinned') + toast.info(t('notes.unpinned')) } }) } @@ -483,8 +483,8 @@ export const NoteCard = memo(function NoteCard({ {/* Drag Handle - Only visible on mobile/touch devices */}
@@ -563,7 +563,7 @@ export const NoteCard = memo(function NoteCard({ onCreateSubNotebook?.()}> - {t('notebook.createSubNotebook') || 'Nouveau sous-carnet…'} + {t('notebook.createSubNotebook')} @@ -605,7 +605,7 @@ export const NoteCard = memo(function NoteCard({ @@ -873,13 +873,13 @@ export const NoteCard = memo(function NoteCard({ {t('notes.confirmDeleteTitle') || t('notes.delete')} - {t('notes.confirmDelete') || 'Are you sure you want to delete this note?'} + {t('notes.confirmDelete')} - {t('common.cancel') || 'Cancel'} + {t('common.cancel')} - {t('notes.delete') || 'Delete'} + {t('notes.delete')} diff --git a/memento-note/components/note-history-modal.tsx b/memento-note/components/note-history-modal.tsx index a1bec5d..e2ab8c7 100644 --- a/memento-note/components/note-history-modal.tsx +++ b/memento-note/components/note-history-modal.tsx @@ -48,6 +48,7 @@ function fmtDate(date: Date | string, language: string): string { } function VersionPreview({ entry, language }: { entry: NoteHistoryEntry; language: string }) { + const { t } = useLanguage() const isMd = entry.type === 'markdown' || entry.isMarkdown const isCl = entry.type === 'checklist' const isRt = entry.type === 'richtext' @@ -56,15 +57,15 @@ function VersionPreview({ entry, language }: { entry: NoteHistoryEntry; language

- {language === 'fr' ? 'Titre' : 'Title'} + {t('noteHistory.title')}

- {entry.title || (language === 'fr' ? 'Sans titre' : 'Untitled')} + {entry.title || t('noteHistory.untitled')}

- {language === 'fr' ? 'Contenu' : 'Content'} + {t('noteHistory.content')}

{isCl && entry.checkItems ? ( diff --git a/memento-note/components/settings/billing-plans.tsx b/memento-note/components/settings/billing-plans.tsx index 1e4481c..6b318ea 100644 --- a/memento-note/components/settings/billing-plans.tsx +++ b/memento-note/components/settings/billing-plans.tsx @@ -222,7 +222,7 @@ export function BillingPlans() { buttonClass: effectiveTier === 'ENTERPRISE' ? 'bg-paper text-concrete cursor-default' : 'bg-ink text-white shadow-xl shadow-ink/20 hover:scale-[1.02] active:scale-95', - onClick: () => { window.location.href = 'mailto:sales@momento.app'; }, + onClick: () => { window.location.href = 'mailto:sales@memento-note.com'; }, }, ]; diff --git a/memento-note/components/sidebar.tsx b/memento-note/components/sidebar.tsx index 8ebc754..ebfb7f1 100644 --- a/memento-note/components/sidebar.tsx +++ b/memento-note/components/sidebar.tsx @@ -298,21 +298,21 @@ function SidebarCarnetItem({ @@ -399,7 +399,7 @@ function SidebarCarnetItem({ ))} {isActive && notes.length === 0 && !hasChildren && (

- {t('common.noResults') || 'No notes found'} + {t('common.noResults')}

)}
@@ -583,7 +583,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any }) try { await moveNotebookToParent(dragId, targetId) } catch (err) { - toast.error(err instanceof Error ? err.message : t('sidebar.moveFailed') || 'Failed to move notebook') + toast.error(err instanceof Error ? err.message : t('sidebar.moveFailed')) setOrderedNotebooks(sortedNotebooks) } } @@ -602,7 +602,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any }) try { await moveNotebookToParent(dragId, null) } catch (err) { - toast.error(err instanceof Error ? err.message : t('sidebar.moveFailed') || 'Failed to move notebook') + toast.error(err instanceof Error ? err.message : t('sidebar.moveFailed')) setOrderedNotebooks(sortedNotebooks) } } @@ -835,14 +835,14 @@ export function Sidebar({ className, user }: { className?: string; user?: any }) - {t('sidebar.profile') || 'Profil'} + {t('sidebar.profile')} {(user as { role?: string } | undefined)?.role === 'ADMIN' && ( - {t('nav.adminDashboard') || 'Administration'} + {t('nav.adminDashboard')} )} @@ -852,7 +852,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any }) onClick={() => signOut({ callbackUrl: '/login' })} > - {t('sidebar.signOut') || 'Se déconnecter'} + {t('sidebar.signOut')} @@ -873,7 +873,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any }) @@ -1016,7 +1016,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
- {t('sidebar.dropToRoot') || 'Drop here to move to root'} + {t('sidebar.dropToRoot')}
)}
@@ -1034,7 +1034,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any })

-

{t('sidebar.noReminders') || 'No active reminders.'}

+

{t('sidebar.noReminders')}

) : activeView === 'agents' ? ( @@ -1118,7 +1118,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any }) )} > - {t('sidebar.sharedWithMe') || 'Shared'} + {t('sidebar.sharedWithMe')} e.stopPropagation()} >

- {t('notebook.rename') || 'Rename notebook'} + {t('notebook.rename')}

setRenameValue(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') handleConfirmRename(); if (e.key === 'Escape') setRenamingNotebook(null) }} className="w-full px-3 py-2 text-sm border border-border rounded-lg bg-transparent focus:outline-none focus:ring-2 focus:ring-foreground/20" - placeholder={t('notebook.namePlaceholder') || 'Notebook name'} + placeholder={t('notebook.namePlaceholder')} />
@@ -1228,7 +1228,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any })

- {t('notebook.trashTitle') || 'Move to trash'} + {t('notebook.trashTitle')}

{t('notebook.trashConfirm', { name: deletingNotebook.name }) || `Move "${deletingNotebook.name}" to trash? You can restore it within 30 days.`} @@ -1244,14 +1244,14 @@ export function Sidebar({ className, user }: { className?: string; user?: any }) disabled={isDeleting} className="px-4 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground transition-colors rounded-lg" > - {t('common.cancel') || 'Cancel'} + {t('common.cancel')}

diff --git a/memento-note/components/usage-meter.tsx b/memento-note/components/usage-meter.tsx index a3f5fe0..1f85db1 100644 --- a/memento-note/components/usage-meter.tsx +++ b/memento-note/components/usage-meter.tsx @@ -188,7 +188,7 @@ export function UsageMeter({ className }: UsageMeterProps) { onClick={(e) => { e.stopPropagation(); router.push('/settings/billing'); }} className="w-full mt-2 py-2 bg-brand-accent/10 hover:bg-brand-accent text-brand-accent hover:text-white text-[9px] font-bold uppercase tracking-widest rounded-xl transition-all duration-300 border border-brand-accent/20" > - {t('usageMeter.upgradePricing') || 'Passer à Pro'} + {t('usageMeter.upgradePricing')} )} diff --git a/memento-note/hooks/use-cookie-consent.ts b/memento-note/hooks/use-cookie-consent.ts new file mode 100644 index 0000000..f70a379 --- /dev/null +++ b/memento-note/hooks/use-cookie-consent.ts @@ -0,0 +1,40 @@ +'use client' + +import { useCallback, useEffect, useState } from 'react' +import { + CONSENT_CHANGE_EVENT, + getConsent, + hasConsentChoice, + type ConsentRecord, +} from '@/lib/consent/cookie-consent' + +export function useCookieConsent() { + const [consent, setConsentState] = useState(null) + const [ready, setReady] = useState(false) + + const refresh = useCallback(() => { + setConsentState(getConsent()) + setReady(true) + }, []) + + useEffect(() => { + refresh() + const onChange = () => refresh() + const onStorage = (e: StorageEvent) => { + if (e.key === 'memento-consent-v1') refresh() + } + window.addEventListener(CONSENT_CHANGE_EVENT, onChange) + window.addEventListener('storage', onStorage) + return () => { + window.removeEventListener(CONSENT_CHANGE_EVENT, onChange) + window.removeEventListener('storage', onStorage) + } + }, [refresh]) + + return { + consent, + ready, + hasChoice: ready && hasConsentChoice(), + needsBanner: ready && !hasConsentChoice(), + } +} diff --git a/memento-note/lib/analytics/track.ts b/memento-note/lib/analytics/track.ts new file mode 100644 index 0000000..8b6c7e6 --- /dev/null +++ b/memento-note/lib/analytics/track.ts @@ -0,0 +1,17 @@ +/** + * Analytics choke-point — all product analytics must go through these helpers. + * New third-party scripts in app/ must check hasAnalyticsConsent() before loading. + */ +import { hasAnalyticsConsent } from '@/lib/consent/cookie-consent' + +export type AnalyticsEventProperties = Record + +export function trackClientEvent(_event: string, _properties?: AnalyticsEventProperties): void { + if (!hasAnalyticsConsent()) return + // Future: PostHog/Umami client capture (see saas-deployment-prep.md §D) +} + +export function trackServerEvent(_event: string, _properties?: AnalyticsEventProperties): void { + if (!hasAnalyticsConsent()) return + // Future: server-side analytics capture +} diff --git a/memento-note/lib/consent/cookie-consent.ts b/memento-note/lib/consent/cookie-consent.ts new file mode 100644 index 0000000..36e6068 --- /dev/null +++ b/memento-note/lib/consent/cookie-consent.ts @@ -0,0 +1,112 @@ +export const CONSENT_VERSION = 1 as const +export const CONSENT_STORAGE_KEY = 'memento-consent-v1' +export const CONSENT_COOKIE_NAME = 'memento-cookie-consent' +const CONSENT_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 + +export type ConsentRecord = { + version: typeof CONSENT_VERSION + necessary: true + analytics: boolean + marketing: boolean + updatedAt: string +} + +export const CONSENT_CHANGE_EVENT = 'memento-consent-change' +export const OPEN_COOKIE_PREFERENCES_EVENT = 'memento-open-cookie-preferences' + +function isBrowser(): boolean { + return typeof window !== 'undefined' +} + +function parseRecord(raw: unknown): ConsentRecord | null { + if (!raw || typeof raw !== 'object') return null + const o = raw as Partial + if (o.version !== CONSENT_VERSION) return null + if (o.necessary !== true) return null + if (typeof o.analytics !== 'boolean' || typeof o.marketing !== 'boolean') return null + if (typeof o.updatedAt !== 'string') return null + return { + version: CONSENT_VERSION, + necessary: true, + analytics: o.analytics, + marketing: o.marketing, + updatedAt: o.updatedAt, + } +} + +function readCookie(): ConsentRecord | null { + if (!isBrowser()) return null + const match = document.cookie + .split(';') + .map((s) => s.trim()) + .find((s) => s.startsWith(`${CONSENT_COOKIE_NAME}=`)) + if (!match) return null + try { + const encoded = match.slice(CONSENT_COOKIE_NAME.length + 1) + const json = decodeURIComponent(atob(encoded)) + return parseRecord(JSON.parse(json)) + } catch { + return null + } +} + +function writeCookie(record: ConsentRecord): void { + if (!isBrowser()) return + const encoded = btoa(encodeURIComponent(JSON.stringify(record))) + document.cookie = `${CONSENT_COOKIE_NAME}=${encoded};path=/;max-age=${CONSENT_COOKIE_MAX_AGE};samesite=lax` +} + +export function getConsent(): ConsentRecord | null { + if (!isBrowser()) return null + try { + const fromStorage = localStorage.getItem(CONSENT_STORAGE_KEY) + if (fromStorage) { + const parsed = parseRecord(JSON.parse(fromStorage)) + if (parsed) return parsed + } + } catch { + // ignore corrupt storage + } + return readCookie() +} + +export function hasConsentChoice(): boolean { + return getConsent() !== null +} + +export function hasAnalyticsConsent(): boolean { + return getConsent()?.analytics === true +} + +export function hasMarketingConsent(): boolean { + return getConsent()?.marketing === true +} + +export function setConsent(partial: Pick): ConsentRecord { + const record: ConsentRecord = { + version: CONSENT_VERSION, + necessary: true, + analytics: partial.analytics, + marketing: partial.marketing, + updatedAt: new Date().toISOString(), + } + if (isBrowser()) { + localStorage.setItem(CONSENT_STORAGE_KEY, JSON.stringify(record)) + writeCookie(record) + window.dispatchEvent(new CustomEvent(CONSENT_CHANGE_EVENT, { detail: record })) + } + return record +} + +export function acceptEssentialsOnly(): ConsentRecord { + return setConsent({ analytics: false, marketing: false }) +} + +export function acceptAllOptional(): ConsentRecord { + return setConsent({ analytics: true, marketing: false }) +} + +export function openCookiePreferences(): void { + if (!isBrowser()) return + window.dispatchEvent(new CustomEvent(OPEN_COOKIE_PREFERENCES_EVENT)) +} diff --git a/memento-note/locales/ar.json b/memento-note/locales/ar.json index 53f51e5..f817437 100644 --- a/memento-note/locales/ar.json +++ b/memento-note/locales/ar.json @@ -49,8 +49,8 @@ "sortOldest": "الأقدم أولاً", "sortAlpha": "أ → ز", "accountMenu": "قائمة الحساب", - "profile": "حساب تعريفي", - "signOut": "تسجيل الخروج", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "ترتيب الترتيب", "freezePinnedNotebook": "تثبيت ترتيب الشريط الجانبي للكمبيوتر الدفتري", "unfreezePinnedNotebook": "قم بإزالة تثبيت ترتيب الشريط الجانبي للكمبيوتر الدفتري", @@ -58,14 +58,15 @@ "renameNotebook": "إعادة تسمية", "sharedNotebookBadge": "· Shared", "sortManual": "ترتيب حر", - "moveFailed": "فشل نقل دفتر الملاحظات", - "dropToRoot": "أفلت هنا للنقل إلى الجذر" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "الملاحظات", "newNote": "ملاحظة جديدة", "reorganize": "إعادة تنظيم الملاحظات", - "untitled": "بدون عنوان", + "untitled": "Untitled", "placeholder": "اكتب ملاحظة...", "markdownPlaceholder": "اكتب ملاحظة... (Markdown مدعوم)", "titlePlaceholder": "العنوان", @@ -81,12 +82,12 @@ "add": "إضافة", "adding": "جاري الإضافة...", "close": "إغلاق", - "confirmDelete": "هل أنت متأكد أنك تريد حذف هذه الملاحظة؟", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "هل أنت متأكد أنك تريد مغادرة هذه الملاحظة المشتركة؟", "sharedBy": "شاركها", "sharedShort": "مشترك", "leaveShare": "مغادرة", - "delete": "حذف", + "delete": "Delete", "archive": "أرشفة", "unarchive": "إلغاء الأرشفة", "pin": "تثبيت", @@ -127,7 +128,7 @@ "duplicate": "نسخ", "share": "مشاركة", "showCollaborators": "إظهار المتعاونين", - "pinned": "مثبتة", + "pinned": "Note pinned", "others": "أخرى", "noNotes": "لا توجد ملاحظات", "noNotesFound": "لم يتم العثور على ملاحظات", @@ -159,8 +160,8 @@ "recent": "الحديثة", "addNote": "إضافة ملاحظة", "readMore": "اقرأ المزيد", - "remove": "إزالة", - "dragToReorder": "اسحب لإعادة الترتيب", + "remove": "Remove", + "dragToReorder": "Drag to reorder", "more": "المزيد", "emptyState": "لا توجد ملاحظات", "metadataPanel": "تفاصيل", @@ -173,7 +174,7 @@ "improveFailed": "فشل التحسين", "transformFailed": "فشل التحويل", "markdown": "Markdown", - "unpinned": "غير مثبت", + "unpinned": "Note unpinned", "redoShortcut": "إعادة (Ctrl+Y)", "undoShortcut": "تراجع (Ctrl+Z)", "reorderTabs": "إعادة ترتيب علامة التبويب", @@ -751,7 +752,7 @@ "downloadFailed": "فشل التنزيل" }, "nav": { - "home": "الرئيسية", + "home": "Home", "notes": "الملاحظات", "notebooks": "الدفاتر", "generalNotes": "الملاحظات العامة", @@ -761,7 +762,7 @@ "aiSettings": "إعدادات الذكاء الاصطناعي", "logout": "تسجيل الخروج", "login": "تسجيل الدخول", - "adminDashboard": "لوحة تحكم المشرف", + "adminDashboard": "Admin Dashboard", "diagnostics": "التشخيص", "trash": "المهملات", "support": "دعم Memento ☕", @@ -786,7 +787,8 @@ "proPlan": "خطة احترافية", "chat": "دردشة الذكاء الاصطناعي", "lab": "المختبر", - "agents": "الوكلاء" + "agents": "الوكلاء", + "sharedWithMe": "Shared with me" }, "settings": { "title": "الإعدادات", @@ -814,7 +816,7 @@ "security": "الأمان", "about": "حول", "version": "الإصدار", - "settingsSaved": "تم حفظ الإعدادات", + "settingsSaved": "Settings saved", "cardSizeMode": "حجم الملاحظة", "cardSizeModeDescription": "اختر بين أحجام متغيرة أو حجم موحد", "selectCardSizeMode": "اختر وضع العرض", @@ -835,14 +837,14 @@ "semanticIndexingDescription": "إنشاء متجهات لجميع الملاحظات لتفعيل البحث القائم على النية", "profile": "الملف الشخصي", "searchNoResults": "لم يتم العثور على إعدادات مطابقة", - "languageAuto": "الكشف التلقائي", + "languageAuto": "Language set to Auto", "emailNotifications": "إشعارات البريد الإلكتروني", "emailNotificationsDesc": "تلقي إشعارات مهمة عبر البريد الإلكتروني", "desktopNotifications": "إشعارات سطح المكتب", "desktopNotificationsDesc": "تلقي إشعارات في المتصفح", "notificationsDesc": "إدارة تفضيلات الإشعارات", - "autoSave": "الحفظ التلقائي", - "autoSaveDesc": "حفظ التغييرات تلقائيًا أثناء الكتابة" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "الملف الشخصي", @@ -864,10 +866,10 @@ "preferredLanguage": "اللغة المفضلة", "selectLanguage": "اختر لغة", "languageDescription": "سيتم استخدام هذه اللغة لميزات الذكاء الاصطناعي وتحليل المحتوى ونص الواجهة.", - "autoDetect": "الكشف التلقائي", + "autoDetect": "Auto-detect", "updateSuccess": "تم تحديث الملف الشخصي", "updateFailed": "فشل في تحديث الملف الشخصي", - "languageUpdateSuccess": "تم تحديث اللغة بنجاح", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "فشل في تحديث اللغة", "profileUpdated": "تم تحديث الملف الشخصي", "profileError": "خطأ في تحديث الملف الشخصي", @@ -922,8 +924,8 @@ }, "general": { "loading": "جاري التحميل...", - "save": "حفظ", - "cancel": "إلغاء", + "save": "Save", + "cancel": "Cancel", "add": "إضافة", "edit": "تعديل", "confirm": "تأكيد", @@ -984,7 +986,7 @@ "createNew": "إنشاء دفتر جديد", "createDescription": "ابدأ مجموعة جديدة لتنظيم ملاحظاتك وأفكارك ومشاريعك بكفاءة.", "name": "اسم الدفتر", - "namePlaceholder": "مثال: استراتيجية التسويق الربع سنوية", + "namePlaceholder": "Notebook name", "myNotebook": "دفتري", "saving": "جاري الحفظ...", "selectIcon": "الأيقونة", @@ -993,7 +995,7 @@ "creating": "جاري الإنشاء...", "edit": "تحرير الدفتر", "editDescription": "تغيير اسم الدفتر وأيقونته ولونه.", - "delete": "حذف الدفتر", + "delete": "Delete", "deleteWarning": "هل أنت متأكد أنك تريد حذف هذا الدفتر؟ سيتم نقل الملاحظات إلى الملاحظات العامة.", "deleteConfirm": "حذف", "summary": "ملخص الدفتر", @@ -1012,7 +1014,10 @@ "pinnedFrozenTooltip": "دفتر ملاحظات مثبت — تم تجميد الطلب", "organizeNotebookWithAITooltip": "قم بتنظيم دفتر الملاحظات هذا باستخدام الذكاء الاصطناعي", "assistantRequiredForSummarize": "قم بتشغيل AI Assistant في الإعدادات للتلخيص", - "createSubnotebook": "إضافة دفتر فرعي" + "createSubnotebook": "إضافة دفتر فرعي", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "النقل إلى {name}؟", @@ -1430,20 +1435,22 @@ }, "appearance": { "title": "المظهر", - "description": "تخصيص مظهر التطبيق", + "description": "Customize the interface", "notesViewDescription": "اختر كيفية عرض الملاحظات على الصفحة الرئيسية وفي الدفاتر.", "notesViewLabel": "عرض الملاحظات", "notesViewTabs": "علامات تبويب (نمط OneNote)", "notesViewMasonry": "بطاقات (شبكة)", "notesViewList": "قائمة (مجلة)", - "selectTheme": "اختر المظهر", - "fontFamilyLabel": "عائلة الخطوط", - "fontFamilyDescription": "اختر الخط المستخدم في جميع أنحاء التطبيق", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter مُحسّن لسهولة القراءة، النظام يستخدم الخط الأصلي لنظام التشغيل", - "fontSystem": "الخط الافتراضي للنظام", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", - "fontJetBrainsMono": "JetBrains Mono" + "fontJetBrainsMono": "JetBrains Mono", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "General", @@ -1477,18 +1484,26 @@ }, "trash": { "title": "سلة المحذوفات", - "empty": "سلة المحذوفات فارغة", - "emptyDescription": "ستظهر الملاحظات المحذوفة هنا", - "restore": "استعادة", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "حذف نهائي", "noteTrashed": "تم نقل الملاحظة إلى سلة المحذوفات", "noteRestored": "تم استعادة الملاحظة", "notePermanentlyDeleted": "تم حذف الملاحظة نهائيًا", "emptyTrash": "إفراغ سلة المحذوفات", - "emptyTrashConfirm": "حذف جميع الملاحظات في سلة المحذوفات نهائيًا؟", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "تم إفراغ سلة المحذوفات", - "permanentDelete": "حذف نهائي", - "permanentDeleteConfirm": "سيتم حذف هذه الملاحظة نهائيًا. لا يمكن التراجع عن هذا الإجراء." + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "سيتم حذف هذه الملاحظة نهائيًا. لا يمكن التراجع عن هذا الإجراء.", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "الخصوصية", @@ -1583,7 +1598,23 @@ "chinese": "الصينية", "japanese": "اليابانية" }, - "customPlaceholder": "على سبيل المثال العربية والروسية..." + "customPlaceholder": "على سبيل المثال العربية والروسية...", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "غير معروف", @@ -1591,16 +1622,16 @@ "loading": "جاري التحميل...", "error": "خطأ", "success": "نجاح", - "confirm": "تأكيد", - "cancel": "إلغاء", + "confirm": "Confirm", + "cancel": "Cancel", "close": "إغلاق", "save": "حفظ", "delete": "حذف", "edit": "تعديل", "add": "إضافة", "remove": "إزالة", - "search": "بحث", - "noResults": "لا توجد نتائج", + "search": "Search...", + "noResults": "No notes found", "required": "مطلوب", "optional": "اختياري" }, @@ -1982,7 +2013,9 @@ "searching": "جاري البحث...", "noNotesFoundForContext": "لم يتم العثور على ملاحظات ذات صلة لهذا السؤال. أجب باستخدام معرفتك العامة.", "webSearch": "بحث الويب", - "timeoutWarning": "الاستجابة تستغرق وقتاً أطول من المتوقع..." + "timeoutWarning": "الاستجابة تستغرق وقتاً أطول من المتوقع...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "المختبر", @@ -2550,5 +2583,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/de.json b/memento-note/locales/de.json index efadbd9..abbc69f 100644 --- a/memento-note/locales/de.json +++ b/memento-note/locales/de.json @@ -49,8 +49,8 @@ "sortOldest": "Älteste zuerst", "sortAlpha": "A → Z", "accountMenu": "Kontomenü", - "profile": "Profil", - "signOut": "Abmelden", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "Sortierreihenfolge", "freezePinnedNotebook": "Pin-Reihenfolge in der Seitenleiste des Notizbuchs", "unfreezePinnedNotebook": "Pinnwandreihenfolge in der Notizbuch-Seitenleiste aufheben", @@ -58,14 +58,15 @@ "renameNotebook": "Umbenennen", "sharedNotebookBadge": "· Shared", "sortManual": "Freie Anordnung", - "moveFailed": "Verschieben fehlgeschlagen", - "dropToRoot": "Hier ablegen für Hauptebene" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "Notizen", "newNote": "Neue Notiz", "reorganize": "Notizen neu organisieren", - "untitled": "Unbenannt", + "untitled": "Untitled", "placeholder": "Notiz machen...", "markdownPlaceholder": "Notiz machen... (Markdown unterstützt)", "titlePlaceholder": "Titel", @@ -81,12 +82,12 @@ "add": "Hinzufügen", "adding": "Wird hinzugefügt...", "close": "Schließen", - "confirmDelete": "Möchten Sie diese Notiz wirklich löschen?", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "Möchten Sie diese geteilte Notiz wirklich verlassen?", "sharedBy": "Geteilt von", "sharedShort": "Geteilt", "leaveShare": "Verlassen", - "delete": "Löschen", + "delete": "Delete", "archive": "Archivieren", "unarchive": "Aus Archiv entfernen", "pin": "Anheften", @@ -127,7 +128,7 @@ "duplicate": "Duplizieren", "share": "Teilen", "showCollaborators": "Mitarbeiter anzeigen", - "pinned": "Angeheftet", + "pinned": "Note pinned", "others": "Andere", "noNotes": "Keine Notizen", "noNotesFound": "Keine Notizen gefunden", @@ -159,8 +160,8 @@ "recent": "Aktuell", "addNote": "Notiz hinzufügen", "readMore": "Weiterlesen", - "remove": "Entfernen", - "dragToReorder": "Ziehen zum Neuanordnen", + "remove": "Remove", + "dragToReorder": "Drag to reorder", "more": "Mehr", "emptyState": "Keine Notizen vorhanden", "metadataPanel": "Einzelheiten", @@ -173,7 +174,7 @@ "improveFailed": "Verbesserung fehlgeschlagen", "transformFailed": "Umwandlung fehlgeschlagen", "markdown": "Markdown", - "unpinned": "Nicht angepinnt", + "unpinned": "Note unpinned", "redoShortcut": "Wiederholen (Strg+Y)", "undoShortcut": "Rückgängig (Strg+Z)", "reorderTabs": "Tab umsortieren", @@ -751,7 +752,7 @@ "downloadFailed": "Der Download ist fehlgeschlagen" }, "nav": { - "home": "Startseite", + "home": "Home", "notes": "Notizen", "notebooks": "Notizbücher", "generalNotes": "Allgemeine Notizen", @@ -761,7 +762,7 @@ "aiSettings": "KI-Einstellungen", "logout": "Abmelden", "login": "Anmelden", - "adminDashboard": "Admin-Dashboard", + "adminDashboard": "Admin Dashboard", "diagnostics": "Diagnose", "trash": "Papierkorb", "support": "Memento unterstützen ☕", @@ -786,7 +787,8 @@ "proPlan": "Pro Plan", "chat": "KI-Chat", "lab": "Das Labor", - "agents": "Agenten" + "agents": "Agenten", + "sharedWithMe": "Shared with me" }, "settings": { "title": "Einstellungen", @@ -814,7 +816,7 @@ "security": "Sicherheit", "about": "Über", "version": "Version", - "settingsSaved": "Einstellungen gespeichert", + "settingsSaved": "Settings saved", "cardSizeMode": "Note Size", "cardSizeModeDescription": "Choose between variable sizes or uniform size", "selectCardSizeMode": "Select display mode", @@ -835,14 +837,14 @@ "semanticIndexingDescription": "Generate vectors for all notes to enable intent-based search", "profile": "Profil", "searchNoResults": "Keine Ergebnisse gefunden", - "languageAuto": "Automatisch", + "languageAuto": "Language set to Auto", "emailNotifications": "E-Mail-Benachrichtigungen", "emailNotificationsDesc": "Wichtige Benachrichtigungen per E-Mail erhalten", "desktopNotifications": "Desktop-Benachrichtigungen", "desktopNotificationsDesc": "Benachrichtigungen im Browser erhalten", "notificationsDesc": "Verwalten Sie Ihre Benachrichtigungseinstellungen", - "autoSave": "Automatisch speichern", - "autoSaveDesc": "Änderungen während der Eingabe automatisch speichern" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "Profil", @@ -864,10 +866,10 @@ "preferredLanguage": "Bevorzugte Sprache", "selectLanguage": "Sprache auswählen", "languageDescription": "Diese Sprache wird für KI-gesteuerte Funktionen, Inhaltsanalyse und Oberflächentext verwendet.", - "autoDetect": "Automatische Erkennung", + "autoDetect": "Auto-detect", "updateSuccess": "Profil aktualisiert", "updateFailed": "Fehler beim Aktualisieren des Profils", - "languageUpdateSuccess": "Sprache erfolgreich aktualisiert", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "Fehler beim Aktualisieren der Sprache", "profileUpdated": "Profil aktualisiert", "profileError": "Fehler beim Aktualisieren des Profils", @@ -922,8 +924,8 @@ }, "general": { "loading": "Wird geladen...", - "save": "Speichern", - "cancel": "Abbrechen", + "save": "Save", + "cancel": "Cancel", "add": "Hinzufügen", "edit": "Bearbeiten", "confirm": "Bestätigen", @@ -984,7 +986,7 @@ "createNew": "Neues Notizbuch erstellen", "createDescription": "Starten Sie eine neue Sammlung, um Ihre Notizen, Ideen und Projekte effizient zu organisieren.", "name": "Notizbuch-Name", - "namePlaceholder": "z.B. Q4 Marketing-Strategie", + "namePlaceholder": "Notebook name", "myNotebook": "Mein Notizbuch", "saving": "Speichern...", "selectIcon": "Symbol", @@ -993,7 +995,7 @@ "creating": "Erstellen...", "edit": "Notizbuch bearbeiten", "editDescription": "Ändern Sie den Namen, das Symbol und die Farbe Ihres Notizbuchs.", - "delete": "Notizbuch löschen", + "delete": "Delete", "deleteWarning": "Möchten Sie dieses Notizbuch wirklich löschen? Notizen werden in Allgemeine Notizen verschoben.", "deleteConfirm": "Löschen", "summary": "Notizbuch-Zusammenfassung", @@ -1012,7 +1014,10 @@ "pinnedFrozenTooltip": "Angeheftetes Notizbuch – Bestellung eingefroren", "organizeNotebookWithAITooltip": "Organisieren Sie dieses Notizbuch mit KI", "assistantRequiredForSummarize": "Aktivieren Sie AI Assistant in den Einstellungen, um eine Zusammenfassung vorzunehmen", - "createSubnotebook": "Sub-Notebook hinzufügen" + "createSubnotebook": "Sub-Notebook hinzufügen", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "Nach {name} verschieben?", @@ -1430,20 +1435,22 @@ }, "appearance": { "title": "Erscheinungsbild", - "description": "Anpassen, wie die App aussieht", + "description": "Customize the interface", "notesViewDescription": "Wählen Sie, wie Notizen auf der Startseite und in Notizbüchern angezeigt werden.", "notesViewLabel": "Notizen-Ansicht", "notesViewTabs": "Tabs (OneNote-Stil)", "notesViewMasonry": "Karten (Raster)", "notesViewList": "Liste (Magazin)", - "selectTheme": "Select theme", - "fontFamilyLabel": "Schriftfamilie", - "fontFamilyDescription": "Wählen Sie die im gesamten Programm verwendete Schriftart", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter ist für Lesbarkeit optimiert, System verwendet die native Schriftart Ihres Betriebssystems", - "fontSystem": "Standardsystemschriftart", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", - "fontJetBrainsMono": "JetBrains Mono" + "fontJetBrainsMono": "JetBrains Mono", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "General", @@ -1477,18 +1484,26 @@ }, "trash": { "title": "Papierkorb", - "empty": "Der Papierkorb ist leer", - "emptyDescription": "Gelöschte Notizen werden hier angezeigt", - "restore": "Wiederherstellen", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "Dauerhaft löschen", "noteTrashed": "Notiz in den Papierkorb verschoben", "noteRestored": "Notiz wiederhergestellt", "notePermanentlyDeleted": "Notiz dauerhaft gelöscht", "emptyTrash": "Papierkorb leeren", - "emptyTrashConfirm": "Alle Notizen im Papierkorb dauerhaft löschen?", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "Papierkorb geleert", - "permanentDelete": "Dauerhaft löschen", - "permanentDeleteConfirm": "Diese Notiz wird dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden." + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "Diese Notiz wird dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "Datenschutz", @@ -1583,7 +1598,23 @@ "chinese": "chinesisch", "japanese": "japanisch" }, - "customPlaceholder": "z.B. Arabisch, Russisch…" + "customPlaceholder": "z.B. Arabisch, Russisch…", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "Unbekannt", @@ -1591,16 +1622,16 @@ "loading": "Wird geladen...", "error": "Fehler", "success": "Erfolg", - "confirm": "Bestätigen", - "cancel": "Abbrechen", + "confirm": "Confirm", + "cancel": "Cancel", "close": "Schließen", "save": "Speichern", "delete": "Löschen", "edit": "Bearbeiten", "add": "Hinzufügen", "remove": "Entfernen", - "search": "Suchen", - "noResults": "Keine Ergebnisse", + "search": "Search...", + "noResults": "No notes found", "required": "Erforderlich", "optional": "Optional" }, @@ -1982,7 +2013,9 @@ "searching": "Wird gesucht...", "noNotesFoundForContext": "Keine relevanten Notizen für diese Frage gefunden. Antworte mit deinem Allgemeinwissen.", "webSearch": "Websuche", - "timeoutWarning": "Response is taking longer than expected..." + "timeoutWarning": "Response is taking longer than expected...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "Das Labor", @@ -2550,5 +2583,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/en.json b/memento-note/locales/en.json index ef288a3..e3950ed 100644 --- a/memento-note/locales/en.json +++ b/memento-note/locales/en.json @@ -66,7 +66,8 @@ "sharedNotebookBadge": "· Shared", "sortManual": "Custom order", "moveFailed": "Failed to move notebook", - "dropToRoot": "Drop here to move to root" + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "Notes", @@ -789,7 +790,8 @@ "proPlan": "Pro Plan", "chat": "AI Chat", "lab": "The Workshop", - "agents": "Agents" + "agents": "Agents", + "sharedWithMe": "Shared with me" }, "settings": { "title": "Settings", @@ -891,7 +893,10 @@ "showRecentNotesDescription": "Display recent notes (last 7 days) on the main page", "recentNotesUpdateSuccess": "Recent notes setting updated successfully", "recentNotesUpdateFailed": "Failed to update recent notes setting", - "tab": "Profile" + "tab": "Profile", + "preferences": "Account Preferences", + "desktopNotifications": "Desktop notifications", + "desktopNotificationsDesc": "Receive alerts for your reminders and AI activities." }, "aiSettings": { "title": "AI", @@ -988,7 +993,7 @@ "createNew": "Create New Notebook", "createDescription": "Start a new collection to organize your notes, ideas, and projects efficiently.", "name": "Notebook Name", - "namePlaceholder": "e.g. Q4 Marketing Strategy", + "namePlaceholder": "Notebook name", "myNotebook": "My Notebook", "saving": "Saving...", "selectIcon": "Icon", @@ -997,7 +1002,7 @@ "creating": "Creating...", "edit": "Edit Notebook", "editDescription": "Change the name, icon, and color of your notebook.", - "delete": "Delete Notebook", + "delete": "Delete", "deleteWarning": "Are you sure you want to delete this notebook? Notes will be moved to General Notes.", "deleteConfirm": "Delete", "summary": "Notebook Summary", @@ -1016,7 +1021,10 @@ "pinnedFrozenTooltip": "Pinned notebook — order frozen", "organizeNotebookWithAITooltip": "Organize this notebook with AI", "assistantRequiredForSummarize": "Turn on AI Assistant in settings to summarize", - "createSubnotebook": "Add sub-notebook" + "createSubnotebook": "Add sub-notebook", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "confirmRename": "Rename" }, "notebookSuggestion": { "title": "Move to {name}?", @@ -1435,21 +1443,23 @@ }, "appearance": { "title": "Appearance", - "description": "Customize how the app looks", + "description": "Customize the interface", "notesViewDescription": "Choose how notes are shown on home and in notebooks.", "notesViewLabel": "Notes layout", "notesViewTabs": "Tabs (OneNote-style)", "notesViewMasonry": "Cards (grid)", "notesViewList": "List (magazine)", - "selectTheme": "Select theme", - "fontFamilyLabel": "Font Family", - "fontFamilyDescription": "Choose the font used throughout the app", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter is optimized for readability, System uses your OS native font", - "fontSystem": "System Default", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", "fontJetBrainsMono": "JetBrains Mono", - "tab": "Appearance" + "tab": "Appearance", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "usageMeter": { "packName": "AI Discovery Pack", @@ -1507,18 +1517,26 @@ }, "trash": { "title": "Trash", - "empty": "The trash is empty", - "emptyDescription": "Deleted notes will appear here", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", "restore": "Restore", "deletePermanently": "Delete Permanently", "noteTrashed": "Note moved to trash", "noteRestored": "Note restored", "notePermanentlyDeleted": "Note permanently deleted", "emptyTrash": "Empty Trash", - "emptyTrashConfirm": "Permanently delete all notes in the trash?", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "Trash emptied", - "permanentDelete": "Delete Permanently", - "permanentDeleteConfirm": "This note will be permanently deleted. This action cannot be undone." + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "This note will be permanently deleted. This action cannot be undone.", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "Privacy", @@ -1613,7 +1631,23 @@ "chinese": "Chinese", "japanese": "Japanese" }, - "customPlaceholder": "e.g. Arabic, Russian…" + "customPlaceholder": "e.g. Arabic, Russian…", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "Unknown", @@ -1629,8 +1663,8 @@ "edit": "Edit", "add": "Add", "remove": "Remove", - "search": "Search", - "noResults": "No results", + "search": "Search...", + "noResults": "No notes found", "required": "Required", "optional": "Optional" }, @@ -2012,7 +2046,9 @@ "searching": "Searching...", "noNotesFoundForContext": "No relevant notes found for this question. Answer with your general knowledge.", "webSearch": "Web Search", - "timeoutWarning": "Response is taking longer than expected..." + "timeoutWarning": "Response is taking longer than expected...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "The Workshop", @@ -2562,5 +2598,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/es.json b/memento-note/locales/es.json index 7222fbe..6e9ee1d 100644 --- a/memento-note/locales/es.json +++ b/memento-note/locales/es.json @@ -49,8 +49,8 @@ "sortOldest": "El más viejo primero", "sortAlpha": "A → Z", "accountMenu": "Menú de cuenta", - "profile": "Perfil", - "signOut": "desconectar", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "orden de clasificación", "freezePinnedNotebook": "Orden de fijación de la barra lateral del cuaderno", "unfreezePinnedNotebook": "Desanclar el orden de la barra lateral del cuaderno", @@ -58,14 +58,15 @@ "renameNotebook": "Rebautizar", "sharedNotebookBadge": "· Shared", "sortManual": "Orden libre", - "moveFailed": "Error al mover el cuaderno", - "dropToRoot": "Soltar aquí para mover a la raíz" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "Notas", "newNote": "Nueva nota", "reorganize": "Reorganizar notas", - "untitled": "Sin título", + "untitled": "Untitled", "placeholder": "Toma una nota...", "markdownPlaceholder": "Toma una nota... (Markdown compatible)", "titlePlaceholder": "Título", @@ -81,12 +82,12 @@ "add": "Agregar", "adding": "Agregando...", "close": "Cerrar", - "confirmDelete": "¿Estás seguro de que quieres eliminar esta nota?", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "¿Estás seguro de que quieres abandonar esta nota compartida?", "sharedBy": "Compartido por", "sharedShort": "Compartido", "leaveShare": "Abandonar", - "delete": "Eliminar", + "delete": "Delete", "archive": "Archivar", "unarchive": "Desarchivar", "pin": "Fijar", @@ -127,7 +128,7 @@ "duplicate": "Duplicar", "share": "Compartir", "showCollaborators": "Mostrar colaboradores", - "pinned": "Fijadas", + "pinned": "Note pinned", "others": "Otros", "noNotes": "Sin notas", "noNotesFound": "No se encontraron notas", @@ -160,7 +161,7 @@ "addNote": "Agregar nota", "readMore": "Leer más", "remove": "Remove", - "dragToReorder": "Arrastra para reordenar", + "dragToReorder": "Drag to reorder", "more": "Más", "emptyState": "Sin notas", "metadataPanel": "Detalles", @@ -173,7 +174,7 @@ "improveFailed": "Error al mejorar", "transformFailed": "Error al transformar", "markdown": "Markdown", - "unpinned": "Desfijadas", + "unpinned": "Note unpinned", "redoShortcut": "Rehacer (Ctrl+Y)", "undoShortcut": "Deshacer (Ctrl+Z)", "reorderTabs": "Reordenar pestaña", @@ -751,7 +752,7 @@ "downloadFailed": "Descarga fallida" }, "nav": { - "home": "Inicio", + "home": "Home", "notes": "Notas", "notebooks": "Cuadernos", "generalNotes": "Notas generales", @@ -761,7 +762,7 @@ "aiSettings": "Configuración IA", "logout": "Cerrar sesión", "login": "Iniciar sesión", - "adminDashboard": "Panel de administración", + "adminDashboard": "Admin Dashboard", "diagnostics": "Diagnósticos", "trash": "Papelera", "support": "Apoyar Memento ☕", @@ -786,7 +787,8 @@ "proPlan": "Plan Pro", "chat": "Chat IA", "lab": "El Laboratorio", - "agents": "Agentes" + "agents": "Agentes", + "sharedWithMe": "Shared with me" }, "settings": { "title": "Configuración", @@ -814,7 +816,7 @@ "security": "Seguridad", "about": "Acerca de", "version": "Versión", - "settingsSaved": "Configuración guardada", + "settingsSaved": "Settings saved", "cardSizeMode": "Note Size", "cardSizeModeDescription": "Choose between variable sizes or uniform size", "selectCardSizeMode": "Select display mode", @@ -835,14 +837,14 @@ "semanticIndexingDescription": "Generate vectors for all notes to enable intent-based search", "profile": "Perfil", "searchNoResults": "Sin resultados de búsqueda", - "languageAuto": "Automático", + "languageAuto": "Language set to Auto", "emailNotifications": "Notificaciones por correo", "emailNotificationsDesc": "Recibir notificaciones importantes por correo", "desktopNotifications": "Notificaciones de escritorio", "desktopNotificationsDesc": "Recibir notificaciones en el navegador", "notificationsDesc": "Gestiona tus preferencias de notificaciones", - "autoSave": "Guardar automáticamente", - "autoSaveDesc": "Guarda automáticamente los cambios mientras escribes" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "Perfil", @@ -864,10 +866,10 @@ "preferredLanguage": "Idioma preferido", "selectLanguage": "Selecciona un idioma", "languageDescription": "Este idioma se usará para las funciones impulsadas por IA, análisis de contenido y texto de la interfaz.", - "autoDetect": "Detección automática", + "autoDetect": "Auto-detect", "updateSuccess": "Perfil actualizado", "updateFailed": "Error al actualizar el perfil", - "languageUpdateSuccess": "Idioma actualizado exitosamente", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "Error al actualizar el idioma", "profileUpdated": "Perfil actualizado", "profileError": "Error al actualizar el perfil", @@ -922,8 +924,8 @@ }, "general": { "loading": "Cargando...", - "save": "Guardar", - "cancel": "Cancelar", + "save": "Save", + "cancel": "Cancel", "add": "Agregar", "edit": "Editar", "confirm": "Confirmar", @@ -984,7 +986,7 @@ "createNew": "Crear nuevo cuaderno", "createDescription": "Inicia una nueva colección para organizar tus notas, ideas y proyectos de manera eficiente.", "name": "Nombre del cuaderno", - "namePlaceholder": "ej. Estrategia Marketing Q4", + "namePlaceholder": "Notebook name", "myNotebook": "Mi cuaderno", "saving": "Guardando...", "selectIcon": "Icono", @@ -993,7 +995,7 @@ "creating": "Creando...", "edit": "Editar cuaderno", "editDescription": "Cambia el nombre, icono y color de tu cuaderno.", - "delete": "Eliminar cuaderno", + "delete": "Delete", "deleteWarning": "¿Estás seguro de que quieres eliminar este cuaderno? Las notas se moverán a Notas generales.", "deleteConfirm": "Eliminar", "summary": "Resumen del cuaderno", @@ -1012,7 +1014,10 @@ "pinnedFrozenTooltip": "Cuaderno fijado: pedido congelado", "organizeNotebookWithAITooltip": "Organiza este cuaderno con IA", "assistantRequiredForSummarize": "Active AI Assistant en la configuración para resumir", - "createSubnotebook": "Agregar subcuaderno" + "createSubnotebook": "Agregar subcuaderno", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "¿Mover a {name}?", @@ -1430,20 +1435,22 @@ }, "appearance": { "title": "Apariencia", - "description": "Personaliza el aspecto de la aplicación", + "description": "Customize the interface", "notesViewDescription": "Elige cómo se muestran las notas en el inicio y en los cuadernos.", "notesViewLabel": "Vista de notas", "notesViewTabs": "Pestañas (estilo OneNote)", "notesViewMasonry": "Tarjetas (cuadrícula)", "notesViewList": "Lista (revista)", - "selectTheme": "Select theme", - "fontFamilyLabel": "Familia de fuentes", - "fontFamilyDescription": "Elige la fuente utilizada en toda la aplicación", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter está optimizado para la legibilidad, Sistema usa la fuente nativa de tu sistema operativo", - "fontSystem": "Fuente del sistema predeterminada", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", - "fontJetBrainsMono": "JetBrains Mono" + "fontJetBrainsMono": "JetBrains Mono", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "General", @@ -1477,18 +1484,26 @@ }, "trash": { "title": "Papelera", - "empty": "La papelera está vacía", - "emptyDescription": "Las notas eliminadas aparecerán aquí", - "restore": "Restaurar", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "Eliminar permanentemente", "noteTrashed": "Nota movida a la papelera", "noteRestored": "Nota restaurada", "notePermanentlyDeleted": "Nota eliminada permanentemente", "emptyTrash": "Vaciar papelera", - "emptyTrashConfirm": "¿Eliminar permanentemente todas las notas de la papelera?", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "Papelera vaciada", - "permanentDelete": "Eliminar permanentemente", - "permanentDeleteConfirm": "Esta nota se eliminará permanentemente. Esta acción no se puede deshacer." + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "Esta nota se eliminará permanentemente. Esta acción no se puede deshacer.", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "Privacidad", @@ -1583,7 +1598,23 @@ "chinese": "Chino", "japanese": "japonés" }, - "customPlaceholder": "p.ej. Árabe, ruso…" + "customPlaceholder": "p.ej. Árabe, ruso…", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "Desconocido", @@ -1591,16 +1622,16 @@ "loading": "Cargando", "error": "Error", "success": "Éxito", - "confirm": "Confirmar", - "cancel": "Cancelar", + "confirm": "Confirm", + "cancel": "Cancel", "close": "Cerrar", "save": "Guardar", "delete": "Eliminar", "edit": "Editar", "add": "Agregar", "remove": "Eliminar", - "search": "Buscar", - "noResults": "Sin resultados", + "search": "Search...", + "noResults": "No notes found", "required": "Requerido", "optional": "Opcional" }, @@ -1982,7 +2013,9 @@ "searching": "Buscando...", "noNotesFoundForContext": "No se encontraron notas relevantes para esta pregunta. Responde con tu conocimiento general.", "webSearch": "Búsqueda web", - "timeoutWarning": "Response is taking longer than expected..." + "timeoutWarning": "Response is taking longer than expected...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "El Laboratorio", @@ -2550,5 +2583,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/fa.json b/memento-note/locales/fa.json index 5946b3b..c0d9023 100644 --- a/memento-note/locales/fa.json +++ b/memento-note/locales/fa.json @@ -49,8 +49,8 @@ "sortOldest": "اول قدیمی ترین", "sortAlpha": "A → Z", "accountMenu": "منوی حساب", - "profile": "نمایه", - "signOut": "از سیستم خارج شوید", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "ترتیب مرتب سازی", "freezePinnedNotebook": "پین کردن سفارش نوار کناری نوت بوک", "unfreezePinnedNotebook": "پین کردن سفارش نوار کناری نوت بوک", @@ -58,14 +58,15 @@ "renameNotebook": "تغییر نام دهید", "sharedNotebookBadge": "· Shared", "sortManual": "ترتیب آزاد", - "moveFailed": "انتقال دفترچه ناموفق بود", - "dropToRoot": "برای انتقال به ریشه اینجا رها کنید" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "یادداشت‌ها", "newNote": "یادداشت جدید", "reorganize": "سازماندهی مجدد یادداشت ها", - "untitled": "بدون عنوان", + "untitled": "Untitled", "placeholder": "یادداشت بگیرید...", "markdownPlaceholder": "یادداشت بگیرید... (Markdown پشتیبانی می‌شود)", "titlePlaceholder": "عنوان", @@ -81,12 +82,12 @@ "add": "افزودن", "adding": "در حال افزودن...", "close": "بستن", - "confirmDelete": "آیا مطمئن هستید که می‌خواهید این یادداشت را حذف کنید؟", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "آیا مطمئن هستید که می‌خواهید این یادداشت اشتراکی را ترک کنید؟", "sharedBy": "به اشتراک گذاشته توسط", "sharedShort": "به اشتراک گذاشته شده است", "leaveShare": "ترک", - "delete": "حذف", + "delete": "Delete", "archive": "بایگانی", "unarchive": "خروج از بایگانی", "pin": "سنجاق کردن", @@ -127,7 +128,7 @@ "duplicate": "تکثیر", "share": "اشتراک‌گذاری", "showCollaborators": "مشاهده همکاران", - "pinned": "سنجاق شده", + "pinned": "Note pinned", "others": "سایر", "noNotes": "بدون عنوان", "noNotesFound": "یادداشتی یافت نشد", @@ -159,8 +160,8 @@ "recent": "اخیر", "addNote": "افزودن یادداشت", "readMore": "ادامه مطلب", - "remove": "حذف", - "dragToReorder": "بکشید تا مرتب کنید", + "remove": "Remove", + "dragToReorder": "Drag to reorder", "more": "بیشتر", "emptyState": "یادداشتی نیست", "metadataPanel": "جزئیات", @@ -173,7 +174,7 @@ "improveFailed": "بهبود شکست خورد", "transformFailed": "تبدیل شکست خورد", "markdown": "مارک‌داون", - "unpinned": "سنجاق نشده", + "unpinned": "Note unpinned", "redoShortcut": "انجام مجدد (Ctrl+Y)", "undoShortcut": "بازگردانی (Ctrl+Z)", "reorderTabs": "مرتب‌سازی زبانه", @@ -753,7 +754,7 @@ "downloadFailed": "دانلود انجام نشد" }, "nav": { - "home": "خانه", + "home": "Home", "notes": "یادداشت‌ها", "notebooks": "دفترچه‌ها", "generalNotes": "یادداشت‌های عمومی", @@ -763,7 +764,7 @@ "aiSettings": "تنظیمات هوش مصنوعی", "logout": "خروج", "login": "ورود", - "adminDashboard": "داشبورد مدیریت", + "adminDashboard": "Admin Dashboard", "diagnostics": "تشخیص‌ها", "trash": "سطل زباله", "support": "پشتیبانی مامنتو ☕", @@ -788,7 +789,8 @@ "proPlan": "پلن پرو", "chat": "چت هوش مصنوعی", "lab": "آزمایشگاه", - "agents": "عامل‌ها" + "agents": "عامل‌ها", + "sharedWithMe": "Shared with me" }, "settings": { "title": "تنظیمات", @@ -816,7 +818,7 @@ "security": "امنیت", "about": "درباره", "version": "نسخه", - "settingsSaved": "تنظیمات ذخیره شد", + "settingsSaved": "Settings saved", "cardSizeMode": "اندازه یادداشت", "cardSizeModeDescription": "انتخاب بین اندازه متغیر یا یکنواخت", "selectCardSizeMode": "انتخاب حالت نمایش", @@ -837,14 +839,14 @@ "semanticIndexingDescription": "تولید بردارها برای همه یادداشت‌ها جهت فعال‌سازی جستجوی مبتنی بر قصد", "profile": "پروفایل", "searchNoResults": "تنظیمات مطابق یافت نشد", - "languageAuto": "تشخیص خودکار", + "languageAuto": "Language set to Auto", "emailNotifications": "اعلان‌های ایمیل", "emailNotificationsDesc": "دریافت اعلان‌های مهم از طریق ایمیل", "desktopNotifications": "اعلان‌های مرورگر", "desktopNotificationsDesc": "دریافت اعلان‌ها در مرورگر", "notificationsDesc": "مدیریت تنظیمات اعلان", - "autoSave": "ذخیره خودکار", - "autoSaveDesc": "هنگام تایپ کردن، تغییرات را به صورت خودکار ذخیره کنید" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "پروفایل", @@ -866,10 +868,10 @@ "preferredLanguage": "زبان مورد نظر", "selectLanguage": "یک زبان انتخاب کنید", "languageDescription": "این زبان برای ویژگی‌های هوش مصنوعی، تحلیل محتوا و متن رابط کاربری استفاده خواهد شد.", - "autoDetect": "تشخیص خودکار", + "autoDetect": "Auto-detect", "updateSuccess": "پروفایل به‌روزرسانی شد", "updateFailed": "به‌روزرسانی پروفایل شکست خورد", - "languageUpdateSuccess": "زبان با موفقیت به‌روزرسانی شد", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "به‌روزرسانی زبان شکست خورد", "profileUpdated": "پروفایل به‌روزرسانی شد", "profileError": "خطا در به‌روزرسانی پروفایل", @@ -925,8 +927,8 @@ }, "general": { "loading": "در حال بارگذاری...", - "save": "ذخیره", - "cancel": "لغو", + "save": "Save", + "cancel": "Cancel", "add": "افزودن", "edit": "ویرایش", "confirm": "تأیید", @@ -987,7 +989,7 @@ "createNew": "ایجاد دفترچه جدید", "createDescription": "یک مجموعه جدید برای سازماندهی یادداشت‌ها، ایده‌ها و پروژه‌های خود به طور مؤثر شروع کنید.", "name": "نام دفترچه", - "namePlaceholder": "مثلاً استراتژی بازاریابی سه‌ماهه چهارم", + "namePlaceholder": "Notebook name", "myNotebook": "دفترچه من", "saving": "در حال ذخیره...", "selectIcon": "آیکون", @@ -996,7 +998,7 @@ "creating": "در حال ایجاد...", "edit": "ویرایش دفترچه", "editDescription": "نام، آیکون و رنگ دفترچه خود را تغییر دهید.", - "delete": "حذف دفترچه", + "delete": "Delete", "deleteWarning": "آیا مطمئن هستید که می‌خواهید این دفترچه را حذف کنید؟ یادداشت‌ها به یادداشت‌های عمومی منتقل می‌شوند.", "deleteConfirm": "حذف", "summary": "خلاصه دفترچه", @@ -1015,7 +1017,10 @@ "pinnedFrozenTooltip": "نوت بوک پین شده - سفارش منجمد شده", "organizeNotebookWithAITooltip": "این نوت بوک را با هوش مصنوعی سازماندهی کنید", "assistantRequiredForSummarize": "برای خلاصه کردن، دستیار هوش مصنوعی را در تنظیمات روشن کنید", - "createSubnotebook": "اضافه کردن نوت بوک فرعی" + "createSubnotebook": "اضافه کردن نوت بوک فرعی", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "انتقال به {name}؟", @@ -1434,21 +1439,23 @@ }, "appearance": { "title": "ظاهر", - "description": "سفارشی‌سازی ظاهر برنامه", + "description": "Customize the interface", "notesViewDescription": "نحوه نمایش یادداشت‌ها در صفحه اصلی و دفترچه‌ها را انتخاب کنید.", "notesViewLabel": "چیدمان یادداشت‌ها", "notesViewTabs": "زبانه‌ها (سبک OneNote)", "notesViewMasonry": "کارت‌ها (شبکه‌ای)", "notesViewList": "فهرست (مجله)", - "selectTheme": "انتخاب تم", - "fontFamilyLabel": "خانواده فونت", - "fontFamilyDescription": "فونت استفاده شده در سراسر برنامه را انتخاب کنید", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter برای خوانایی بهینه شده است، سیستم از فونت بومی سیستم‌عامل شما استفاده می‌کند", - "fontSystem": "فونت پیش‌فرض سیستم", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", "fontJetBrainsMono": "JetBrains Mono", - "tab": "ظاهر" + "tab": "ظاهر", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "عمومی", @@ -1482,18 +1489,26 @@ }, "trash": { "title": "سطل زباله", - "empty": "سطل زباله خالی است", - "emptyDescription": "یادداشت‌های حذف شده در اینجا نمایش داده می‌شوند", - "restore": "بازیابی", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "حذف دائمی", "noteTrashed": "یادداشت به سطل زباله منتقل شد", "noteRestored": "یادداشت بازیابی شد", "notePermanentlyDeleted": "یادداشت برای همیشه حذف شد", "emptyTrash": "خالی کردن سطل زباله", - "emptyTrashConfirm": "همه یادداشت‌های سطل زباله برای همیشه حذف شوند؟", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "سطل زباله خالی شد", - "permanentDelete": "حذف دائمی", - "permanentDeleteConfirm": "این یادداشت برای همیشه حذف خواهد شد. این عمل قابل بازگشت نیست." + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "این یادداشت برای همیشه حذف خواهد شد. این عمل قابل بازگشت نیست.", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "حریم خصوصی", @@ -1588,7 +1603,23 @@ "chinese": "چینی", "japanese": "ژاپنی" }, - "customPlaceholder": "به عنوان مثال عربی، روسی…" + "customPlaceholder": "به عنوان مثال عربی، روسی…", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "نامشخص", @@ -1596,16 +1627,16 @@ "loading": "در حال بارگذاری...", "error": "خطا", "success": "موفق", - "confirm": "تأیید", - "cancel": "لغو", + "confirm": "Confirm", + "cancel": "Cancel", "close": "بستن", "save": "ذخیره", "delete": "حذف", "edit": "ویرایش", "add": "افزودن", "remove": "حذف", - "search": "جستجو", - "noResults": "نتیجه‌ای یافت نشد", + "search": "Search...", + "noResults": "No notes found", "required": "الزامی", "optional": "اختیاری" }, @@ -1987,7 +2018,9 @@ "searching": "در حال جستجو...", "noNotesFoundForContext": "هیچ یادداشت مرتبطی برای این سوال یافت نشد. با دانش عمومی خود پاسخ دهید.", "webSearch": "جستجوی وب", - "timeoutWarning": "پاسخ بیشتر از حد انتظار طول می‌کشد..." + "timeoutWarning": "پاسخ بیشتر از حد انتظار طول می‌کشد...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "آزمایشگاه", @@ -2561,5 +2594,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/fr.json b/memento-note/locales/fr.json index 0341f0e..9c275f0 100644 --- a/memento-note/locales/fr.json +++ b/memento-note/locales/fr.json @@ -65,8 +65,9 @@ "renameNotebook": "Renommer", "sharedNotebookBadge": "· partagé", "sortManual": "Ordre libre", - "moveFailed": "Impossible de déplacer le carnet", - "dropToRoot": "Déposer ici pour remonter à la racine" + "moveFailed": "Échec du déplacement du carnet", + "dropToRoot": "Déposez ici pour déplacer à la racine", + "noReminders": "Aucun rappel actif." }, "notes": { "title": "Notes", @@ -88,7 +89,7 @@ "add": "Ajouter", "adding": "Ajout...", "close": "Fermer", - "confirmDelete": "Êtes-vous sûr de vouloir supprimer cette note ?", + "confirmDelete": "Voulez-vous vraiment supprimer cette note ?", "confirmLeaveShare": "Êtes-vous sûr de vouloir quitter cette note partagée ?", "sharedBy": "Partagé par", "sharedShort": "Partagé", @@ -770,7 +771,7 @@ "aiSettings": "Paramètres IA", "logout": "Déconnexion", "login": "Connexion", - "adminDashboard": "Tableau de bord Admin", + "adminDashboard": "Administration", "diagnostics": "Diagnostics", "trash": "Corbeille", "support": "Soutenir Memento ☕", @@ -795,7 +796,8 @@ "proPlan": "Plan Pro", "chat": "Chat IA", "lab": "L'Atelier", - "agents": "Agents" + "agents": "Agents", + "sharedWithMe": "Partagé avec moi" }, "settings": { "title": "Paramètres", @@ -897,7 +899,10 @@ "showRecentNotesDescription": "Afficher les notes récentes (7 derniers jours) sur la page principale", "recentNotesUpdateSuccess": "Paramètre des notes récentes mis à jour avec succès", "recentNotesUpdateFailed": "Échec de la mise à jour du paramètre des notes récentes", - "tab": "Profil" + "tab": "Profil", + "preferences": "Préférences de compte", + "desktopNotifications": "Notification bureau", + "desktopNotificationsDesc": "Recevez des alertes pour vos rappels et activités IA." }, "aiSettings": { "title": "IA", @@ -994,7 +999,7 @@ "createNew": "Créer un nouveau carnet", "createDescription": "Commencez une nouvelle collection pour organiser vos notes, idées et projets efficacement.", "name": "Nom du carnet", - "namePlaceholder": "ex. Stratégie Marketing Q4", + "namePlaceholder": "Nom du carnet", "myNotebook": "Mon carnet", "saving": "Enregistrement...", "selectIcon": "Icône", @@ -1003,7 +1008,7 @@ "creating": "Création...", "edit": "Modifier le carnet", "editDescription": "Changer le nom, l'icône et la couleur de votre carnet.", - "delete": "Supprimer le carnet", + "delete": "Supprimer", "deleteWarning": "Êtes-vous sûr de vouloir supprimer ce carnet ? Les notes seront déplacées dans les Notes générales.", "deleteConfirm": "Supprimer", "summary": "Résumé du carnet", @@ -1022,7 +1027,10 @@ "pinnedFrozenTooltip": "Carnet figé (ordre des sous-carnets verrouillé)", "organizeNotebookWithAITooltip": "Organiser ce carnet avec l'IA", "assistantRequiredForSummarize": "Activez l'assistant IA dans les paramètres pour résumer", - "createSubnotebook": "Ajouter un sous-carnet" + "createSubnotebook": "Ajouter un sous-carnet", + "createSubNotebook": "Nouveau sous-carnet…", + "rename": "Renommer", + "confirmRename": "Renommer" }, "notebookSuggestion": { "title": "Déplacer vers {name} ?", @@ -1441,21 +1449,23 @@ }, "appearance": { "title": "Apparence", - "description": "Personnaliser l'apparence de l'application", + "description": "Personnalisez l'interface", "notesViewDescription": "Choisissez comment afficher les notes sur l'accueil et dans les carnets.", "notesViewLabel": "Affichage des notes", "notesViewTabs": "Onglets (type OneNote)", "notesViewMasonry": "Cartes (grille)", "notesViewList": "Liste (magazine)", - "selectTheme": "Sélectionner le thème", - "fontFamilyLabel": "Famille de polices", - "fontFamilyDescription": "Choisissez la police utilisée dans toute l'application", + "selectTheme": "Choisissez votre thème", + "fontFamilyLabel": "Police", + "fontFamilyDescription": "Choisissez la police de l'application", "selectFontFamily": "Inter est optimisé pour la lisibilité, Système utilise la police native de votre système d'exploitation", - "fontSystem": "Police système par défaut", - "fontInterDefault": "Inter (défaut)", + "fontSystem": "Système", + "fontInterDefault": "Inter (par défaut)", "fontPlayfairDisplay": "Playfair Display", "fontJetBrainsMono": "JetBrains Mono", - "tab": "Apparence" + "tab": "Apparence", + "accentColorTitle": "Couleur d'activation", + "accentColorDescription": "Définissez la couleur principale de votre espace de travail" }, "usageMeter": { "packName": "Pack découverte IA", @@ -1514,17 +1524,25 @@ "trash": { "title": "Corbeille", "empty": "La corbeille est vide", - "emptyDescription": "Les notes supprimées apparaîtront ici", + "emptyDescription": "Les éléments supprimés apparaîtront ici. Ils sont conservés pendant 30 jours avant suppression définitive.", "restore": "Restaurer", "deletePermanently": "Supprimer définitivement", "noteTrashed": "Note déplacée dans la corbeille", "noteRestored": "Note restaurée", "notePermanentlyDeleted": "Note supprimée définitivement", "emptyTrash": "Vider la corbeille", - "emptyTrashConfirm": "Supprimer définitivement toutes les notes de la corbeille ?", + "emptyTrashConfirm": "Vider la corbeille ? Cette action est irréversible.", "emptyTrashSuccess": "Corbeille vidée", "permanentDelete": "Supprimer définitivement", - "permanentDeleteConfirm": "Cette note sera supprimée définitivement. Cette action est irréversible." + "permanentDeleteConfirm": "Cette note sera supprimée définitivement. Cette action est irréversible.", + "restoreSuccess": "Restauration réussie", + "restoreError": "Échec de la restauration", + "permanentDeleteSuccess": "Suppression définitive", + "deleteError": "Échec de la suppression", + "daysRemaining": "JOURS RESTANTS", + "notebookContentPreserved": "Contenu du carnet préservé", + "notebookRestoreHint": "La restauration d'un carnet restaure également toutes ses notes.", + "filterAll": "Tous" }, "footer": { "privacy": "Confidentialité", @@ -1619,7 +1637,23 @@ "chinese": "Chinois", "japanese": "Japonais" }, - "customPlaceholder": "ex. : Arabe, Russe…" + "customPlaceholder": "ex. : Arabe, Russe…", + "autoDetect": "Détection auto", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "Inconnu", @@ -1635,8 +1669,8 @@ "edit": "Modifier", "add": "Ajouter", "remove": "Supprimer", - "search": "Rechercher", - "noResults": "Aucun résultat", + "search": "Rechercher...", + "noResults": "Aucune note trouvée", "required": "Requis", "optional": "Optionnel" }, @@ -2018,7 +2052,9 @@ "searching": "Recherche en cours...", "noNotesFoundForContext": "Aucune note pertinente trouvée pour cette question. Réponds avec tes connaissances générales.", "webSearch": "Recherche web", - "timeoutWarning": "La réponse met plus de temps que prévu..." + "timeoutWarning": "La réponse met plus de temps que prévu...", + "quotaExceededBasic": "Le chat IA est réservé au plan PRO et supérieur.", + "quotaExceededTier": "Limite mensuelle atteinte pour le plan {tier}. Elle se réinitialise le mois prochain." }, "labHeader": { "title": "L'Atelier", @@ -2568,5 +2604,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Titre", + "content": "Contenu", + "untitled": "Sans titre", + "emptyState": "Aucune version disponible", + "selectVersion": "Sélectionnez une version pour prévisualiser son contenu", + "currentVersion": "actuelle" } -} +} \ No newline at end of file diff --git a/memento-note/locales/hi.json b/memento-note/locales/hi.json index fb6c345..1108615 100644 --- a/memento-note/locales/hi.json +++ b/memento-note/locales/hi.json @@ -49,8 +49,8 @@ "sortOldest": "सबसे पुराना पहले", "sortAlpha": "ए → जेड", "accountMenu": "खाता मेनू", - "profile": "प्रोफ़ाइल", - "signOut": "साइन आउट", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "क्रमबद्ध करेन का आदेश", "freezePinnedNotebook": "पिन नोटबुक साइडबार ऑर्डर", "unfreezePinnedNotebook": "नोटबुक साइडबार ऑर्डर को अनपिन करें", @@ -58,14 +58,15 @@ "renameNotebook": "नाम बदलें", "sharedNotebookBadge": "· Shared", "sortManual": "कस्टम क्रम", - "moveFailed": "नोटबुक ले जाने में विफल", - "dropToRoot": "रूट में ले जाने के लिए यहाँ छोड़ें" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "नोट्स", "newNote": "नया नोट", "reorganize": "नोट्स को पुनर्व्यवस्थित करें", - "untitled": "शीर्षकहीन", + "untitled": "Untitled", "placeholder": "नोट लें...", "markdownPlaceholder": "नोट लें... (Markdown समर्थित)", "titlePlaceholder": "शीर्षक", @@ -81,12 +82,12 @@ "add": "जोड़ें", "adding": "जोड़ रहे हैं...", "close": "बंद करें", - "confirmDelete": "क्या आप वाकई इस नोट को हटाना चाहते हैं?", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "क्या आप वाकई इस साझा नोट को छोड़ना चाहते हैं?", "sharedBy": "द्वारा साझा किया गया", "sharedShort": "साझा", "leaveShare": "छोड़ें", - "delete": "हटाएं", + "delete": "Delete", "archive": "संग्रहित करें", "unarchive": "संग्रह से निकालें", "pin": "पिन करें", @@ -127,7 +128,7 @@ "duplicate": "डुप्लिकेट", "share": "साझा करें", "showCollaborators": "सहयोगी दिखाएं", - "pinned": "पिन किए गए", + "pinned": "Note pinned", "others": "अन्य", "noNotes": "कोई नोट नहीं", "noNotesFound": "कोई नोट नहीं मिला", @@ -159,8 +160,8 @@ "recent": "हालिया", "addNote": "नोट जोड़ें", "readMore": "और पढ़ें", - "remove": "हटाएं", - "dragToReorder": "पुनर्व्यवस्थित करने के लिए खींचें", + "remove": "Remove", + "dragToReorder": "Drag to reorder", "more": "अधिक", "emptyState": "कोई नोट नहीं", "metadataPanel": "विवरण", @@ -173,7 +174,7 @@ "improveFailed": "सुधारने में विफल", "transformFailed": "रूपांतरित करने में विफल", "markdown": "Markdown", - "unpinned": "अनपिन किया गया", + "unpinned": "Note unpinned", "redoShortcut": "फिर से करें (Ctrl+Y)", "undoShortcut": "पूर्ववत करें (Ctrl+Z)", "reorderTabs": "टैब पुनर्व्यवस्थित करें", @@ -751,7 +752,7 @@ "downloadFailed": "डाउनलोड विफल रहा" }, "nav": { - "home": "होम", + "home": "Home", "notes": "नोट्स", "notebooks": "नोटबुक", "generalNotes": "सामान्य नोट्स", @@ -761,7 +762,7 @@ "aiSettings": "AI सेटिंग्स", "logout": "लॉग आउट", "login": "लॉग इन", - "adminDashboard": "एडमिन डैशबोर्ड", + "adminDashboard": "Admin Dashboard", "diagnostics": "निदान", "trash": "कचरा", "support": "Memento का समर्थन करें ☕", @@ -786,7 +787,8 @@ "proPlan": "प्रो योजना", "chat": "AI चैट", "lab": "लैब", - "agents": "एजेंट" + "agents": "एजेंट", + "sharedWithMe": "Shared with me" }, "settings": { "title": "सेटिंग्स", @@ -814,7 +816,7 @@ "security": "सुरक्षा", "about": "के बारे में", "version": "संस्करण", - "settingsSaved": "सेटिंग्स सहेजी गई", + "settingsSaved": "Settings saved", "cardSizeMode": "Note Size", "cardSizeModeDescription": "Choose between variable sizes or uniform size", "selectCardSizeMode": "Select display mode", @@ -835,14 +837,14 @@ "semanticIndexingDescription": "Generate vectors for all notes to enable intent-based search", "profile": "प्रोफ़ाइल", "searchNoResults": "कोई मिलान सेटिंग्स नहीं मिली", - "languageAuto": "स्वचालित पता लगाना", + "languageAuto": "Language set to Auto", "emailNotifications": "ईमेल सूचनाएं", "emailNotificationsDesc": "ईमेल द्वारा महत्वपूर्ण सूचनाएं प्राप्त करें", "desktopNotifications": "डेस्कटॉप सूचनाएं", "desktopNotificationsDesc": "ब्राउज़र में सूचनाएं प्राप्त करें", "notificationsDesc": "अपनी सूचना वरीयताएं प्रबंधित करें", - "autoSave": "ऑटो को बचाने", - "autoSaveDesc": "टाइप करते समय परिवर्तन स्वचालित रूप से सहेजें" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "प्रोफ़ाइल", @@ -864,10 +866,10 @@ "preferredLanguage": "पसंदीदा भाषा", "selectLanguage": "भाषा चुनें", "languageDescription": "यह भाषा AI-संचालित सुविधाओं, सामग्री विश्लेषण और इंटरफेस पाठ के लिए उपयोग की जाएगी।", - "autoDetect": "स्वचालित पता लगाना", + "autoDetect": "Auto-detect", "updateSuccess": "प्रोफ़ाइल अपडेट किया गया", "updateFailed": "प्रोफ़ाइल अपडेट करने में विफल", - "languageUpdateSuccess": "भाषा सफलतापूर्वक अपडेट की गई", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "भाषा अपडेट करने में विफल", "profileUpdated": "प्रोफ़ाइल अपडेट किया गया", "profileError": "प्रोफ़ाइल अपडेट करने में त्रुटि", @@ -922,8 +924,8 @@ }, "general": { "loading": "लोड हो रहा है...", - "save": "सहेजें", - "cancel": "रद्द करें", + "save": "Save", + "cancel": "Cancel", "add": "जोड़ें", "edit": "संपादित करें", "confirm": "पुष्टि करें", @@ -984,7 +986,7 @@ "createNew": "नया नोटबुक बनाएं", "createDescription": "अपने नोट्स, विचारों और परियोजनाओं को कुशलता से व्यवस्थित करने के लिए एक नया संग्रह शुरू करें।", "name": "नोटबुक नाम", - "namePlaceholder": "उदा. Q4 मार्केटिंग रणनीति", + "namePlaceholder": "Notebook name", "myNotebook": "मेरी नोटबुक", "saving": "सहेज रहा है...", "selectIcon": "आइकन", @@ -993,7 +995,7 @@ "creating": "बना रहे हैं...", "edit": "नोटबुक संपादित करें", "editDescription": "नोटबुक का नाम, आइकन और रंग बदलें।", - "delete": "नोटबुक हटाएं", + "delete": "Delete", "deleteWarning": "क्या आप वाकई इस नोटबुक को हटाना चाहते हैं? नोट्स को सामान्य नोट्स में ले जाया जाएगा।", "deleteConfirm": "हटाएं", "summary": "नोटबुक सारांश", @@ -1012,7 +1014,10 @@ "pinnedFrozenTooltip": "पिन की गई नोटबुक - ऑर्डर फ़्रीज़ किया गया", "organizeNotebookWithAITooltip": "इस नोटबुक को AI के साथ व्यवस्थित करें", "assistantRequiredForSummarize": "संक्षेप में बताने के लिए सेटिंग्स में AI Assistant चालू करें", - "createSubnotebook": "उप-नोटबुक जोड़ें" + "createSubnotebook": "उप-नोटबुक जोड़ें", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "{name} में ले जाएं?", @@ -1430,20 +1435,22 @@ }, "appearance": { "title": "दिखावट", - "description": "ऐप के दिखने के तरीके को अनुकूलित करें", + "description": "Customize the interface", "notesViewDescription": "चुनें कि होम और नोटबुक में नोट्स कैसे दिखाए जाएं।", "notesViewLabel": "नोट्स दृश्य", "notesViewTabs": "टैब (OneNote-शैली)", "notesViewMasonry": "कार्ड (ग्रिड)", "notesViewList": "सूची (पत्रिका)", - "selectTheme": "Select theme", - "fontFamilyLabel": "फ़ॉन्ट परिवार", - "fontFamilyDescription": "पूरे ऐप में उपयोग किए जाने वाले फ़ॉन्ट का चयन करें", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter पठनीयता के लिए अनुकूलित है, सिस्टम आपके OS के मूल फ़ॉन्ट का उपयोग करता है", - "fontSystem": "सिस्टम डिफ़ॉल्ट", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", - "fontJetBrainsMono": "JetBrains Mono" + "fontJetBrainsMono": "JetBrains Mono", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "General", @@ -1477,18 +1484,26 @@ }, "trash": { "title": "रीसायकल बिन", - "empty": "रीसायकल बिन खाली है", - "emptyDescription": "हटाई गई नोट्स यहां दिखाई देंगी", - "restore": "पुनर्स्थापित करें", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "स्थायी रूप से हटाएं", "noteTrashed": "नोट रीसायकल बिन में ले जाया गया", "noteRestored": "नोट पुनर्स्थापित किया गया", "notePermanentlyDeleted": "नोट स्थायी रूप से हटाया गया", "emptyTrash": "रीसायकल बिन खाली करें", - "emptyTrashConfirm": "रीसायकल बिन की सभी नोट्स स्थायी रूप से हटाएं?", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "रीसायकल बिन खाली किया गया", - "permanentDelete": "स्थायी रूप से हटाएं", - "permanentDeleteConfirm": "यह नोट स्थायी रूप से हटा दी जाएगी। इसे पूर्ववत नहीं किया जा सकता।" + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "यह नोट स्थायी रूप से हटा दी जाएगी। इसे पूर्ववत नहीं किया जा सकता।", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "गोपनीयता", @@ -1583,7 +1598,23 @@ "chinese": "चीनी", "japanese": "जापानी" }, - "customPlaceholder": "जैसे अरबी, रूसी..." + "customPlaceholder": "जैसे अरबी, रूसी...", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "अज्ञात", @@ -1591,16 +1622,16 @@ "loading": "लोड हो रहा है...", "error": "त्रुटि", "success": "सफल", - "confirm": "पुष्टि करें", - "cancel": "रद्द करें", + "confirm": "Confirm", + "cancel": "Cancel", "close": "बंद करें", "save": "सहेजें", "delete": "हटाएं", "edit": "संपादित करें", "add": "जोड़ें", "remove": "हटाएं", - "search": "खोजें", - "noResults": "कोई परिणाम नहीं", + "search": "Search...", + "noResults": "No notes found", "required": "आवश्यक", "optional": "वैकल्पिक" }, @@ -1982,7 +2013,9 @@ "searching": "खोज रहे हैं...", "noNotesFoundForContext": "इस प्रश्न के लिए कोई प्रासंगिक नोट्स नहीं मिले। अपने सामान्य ज्ञान से उत्तर दें।", "webSearch": "वेब खोज", - "timeoutWarning": "Response is taking longer than expected..." + "timeoutWarning": "Response is taking longer than expected...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "लैब", @@ -2550,5 +2583,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/it.json b/memento-note/locales/it.json index b2a3941..b3f79da 100644 --- a/memento-note/locales/it.json +++ b/memento-note/locales/it.json @@ -49,8 +49,8 @@ "sortOldest": "Prima il più vecchio", "sortAlpha": "A→Z", "accountMenu": "Menù conto", - "profile": "Profilo", - "signOut": "disconnessione", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "Ordinamento", "freezePinnedNotebook": "Blocca l'ordine della barra laterale del taccuino", "unfreezePinnedNotebook": "Sblocca l'ordine della barra laterale del notebook", @@ -58,14 +58,15 @@ "renameNotebook": "Rinominare", "sharedNotebookBadge": "· Shared", "sortManual": "Ordine libero", - "moveFailed": "Impossibile spostare il quaderno", - "dropToRoot": "Rilascia qui per spostare alla radice" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "Note", "newNote": "Nuova nota", "reorganize": "Riorganizzare le note", - "untitled": "Senza titolo", + "untitled": "Untitled", "placeholder": "Scrivi una nota...", "markdownPlaceholder": "Scrivi una nota... (Markdown supportato)", "titlePlaceholder": "Titolo", @@ -81,12 +82,12 @@ "add": "Aggiungi", "adding": "Aggiunta in corso...", "close": "Chiudi", - "confirmDelete": "Sei sicuro di voler eliminare questa nota?", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "Sei sicuro di voler abbandonare questa nota condivisa?", "sharedBy": "Condivisa da", "sharedShort": "Condiviso", "leaveShare": "Abbandona", - "delete": "Elimina", + "delete": "Delete", "archive": "Archivia", "unarchive": "Rimuovi dall’archivio", "pin": "Fissa", @@ -127,7 +128,7 @@ "duplicate": "Duplica", "share": "Condividi", "showCollaborators": "Mostra collaboratori", - "pinned": "Fissate", + "pinned": "Note pinned", "others": "Altre", "noNotes": "Nessuna nota", "noNotesFound": "Nessuna nota trovata", @@ -160,7 +161,7 @@ "addNote": "Aggiungi nota", "readMore": "Leggi di più", "remove": "Remove", - "dragToReorder": "Trascina per riordinare", + "dragToReorder": "Drag to reorder", "more": "Altro", "emptyState": "Nessuna nota qui", "metadataPanel": "Dettagli", @@ -173,7 +174,7 @@ "improveFailed": "Miglioramento non riuscito", "transformFailed": "Trasformazione non riuscita", "markdown": "Markdown", - "unpinned": "Non fissato", + "unpinned": "Note unpinned", "redoShortcut": "Ripeti (Ctrl+Y)", "undoShortcut": "Annulla (Ctrl+Z)", "reorderTabs": "Riordina scheda", @@ -761,7 +762,7 @@ "aiSettings": "Impostazioni AI", "logout": "Logout", "login": "Login", - "adminDashboard": "Dashboard amministratore", + "adminDashboard": "Admin Dashboard", "diagnostics": "Diagnostica", "trash": "Cestino", "support": "Supporta Memento ☕", @@ -786,7 +787,8 @@ "proPlan": "Piano Pro", "chat": "Chat IA", "lab": "Il Lab", - "agents": "Agenti" + "agents": "Agenti", + "sharedWithMe": "Shared with me" }, "settings": { "title": "Settings", @@ -835,14 +837,14 @@ "semanticIndexingDescription": "Generate vectors for all notes to enable intent-based search", "profile": "Profilo", "searchNoResults": "Nessun risultato trovato", - "languageAuto": "Automatico", + "languageAuto": "Language set to Auto", "emailNotifications": "Notifiche email", "emailNotificationsDesc": "Ricevi notifiche importanti via email", "desktopNotifications": "Notifiche desktop", "desktopNotificationsDesc": "Ricevi notifiche nel browser", "notificationsDesc": "Gestisci le preferenze di notifica", - "autoSave": "Salvataggio automatico", - "autoSaveDesc": "Salva automaticamente le modifiche durante la digitazione" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "Profilo", @@ -864,10 +866,10 @@ "preferredLanguage": "Lingua preferita", "selectLanguage": "Seleziona una lingua", "languageDescription": "Questa lingua sarà usata per le funzionalità AI, l’analisi dei contenuti e l’interfaccia.", - "autoDetect": "Rilevamento automatico", + "autoDetect": "Auto-detect", "updateSuccess": "Profilo aggiornato", "updateFailed": "Aggiornamento del profilo non riuscito", - "languageUpdateSuccess": "Lingua aggiornata con successo", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "Aggiornamento della lingua non riuscito", "profileUpdated": "Profilo aggiornato", "profileError": "Errore nell’aggiornamento del profilo", @@ -922,8 +924,8 @@ }, "general": { "loading": "Caricamento...", - "save": "Salva", - "cancel": "Annulla", + "save": "Save", + "cancel": "Cancel", "add": "Aggiungi", "edit": "Modifica", "confirm": "Conferma", @@ -984,7 +986,7 @@ "createNew": "Crea nuovo notebook", "createDescription": "Avvia una nuova raccolta per organizzare note, idee e progetti in modo efficiente.", "name": "Nome del notebook", - "namePlaceholder": "es. Strategia Marketing Q4", + "namePlaceholder": "Notebook name", "myNotebook": "Il mio quaderno", "saving": "Salvataggio...", "selectIcon": "Icona", @@ -993,7 +995,7 @@ "creating": "Creazione...", "edit": "Modifica notebook", "editDescription": "Cambia nome, icona e colore del tuo notebook.", - "delete": "Elimina notebook", + "delete": "Delete", "deleteWarning": "Sei sicuro di voler eliminare questo notebook? Le note verranno spostate in Note generali.", "deleteConfirm": "Elimina", "summary": "Riepilogo notebook", @@ -1012,7 +1014,10 @@ "pinnedFrozenTooltip": "Taccuino appuntato: ordine congelato", "organizeNotebookWithAITooltip": "Organizza questo taccuino con l'intelligenza artificiale", "assistantRequiredForSummarize": "Attiva AI Assistant nelle impostazioni per riepilogare", - "createSubnotebook": "Aggiungi sub-notebook" + "createSubnotebook": "Aggiungi sub-notebook", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "Spostare in {name}?", @@ -1430,20 +1435,22 @@ }, "appearance": { "title": "Aspetto", - "description": "Personalizza l'aspetto dell'app", + "description": "Customize the interface", "notesViewDescription": "Scegli come mostrare le note nella home e nei quaderni.", "notesViewLabel": "Vista note", "notesViewTabs": "Schede (stile OneNote)", "notesViewMasonry": "Schede (griglia)", "notesViewList": "Elenco (rivista)", - "selectTheme": "Select theme", - "fontFamilyLabel": "Famiglia di caratteri", - "fontFamilyDescription": "Scegli il carattere utilizzato in tutta l'app", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter è ottimizzato per la leggibilità, Sistema usa il carattere nativo del tuo sistema operativo", - "fontSystem": "Carattere predefinito di sistema", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", - "fontJetBrainsMono": "JetBrains Mono" + "fontJetBrainsMono": "JetBrains Mono", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "General", @@ -1477,18 +1484,26 @@ }, "trash": { "title": "Cestino", - "empty": "Il cestino è vuoto", - "emptyDescription": "Le note eliminate appariranno qui", - "restore": "Ripristina", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "Elimina definitivamente", "noteTrashed": "Nota spostata nel cestino", "noteRestored": "Nota ripristinata", "notePermanentlyDeleted": "Nota eliminata definitivamente", "emptyTrash": "Svuota cestino", - "emptyTrashConfirm": "Eliminare definitivamente tutte le note nel cestino?", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "Cestino svuotato", - "permanentDelete": "Elimina definitivamente", - "permanentDeleteConfirm": "Questa nota verrà eliminata definitivamente. Questa azione non può essere annullata." + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "Questa nota verrà eliminata definitivamente. Questa azione non può essere annullata.", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "Privacy", @@ -1583,7 +1598,23 @@ "chinese": "cinese", "japanese": "giapponese" }, - "customPlaceholder": "per esempio. Arabo, russo…" + "customPlaceholder": "per esempio. Arabo, russo…", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "Sconosciuto", @@ -1591,16 +1622,16 @@ "loading": "Caricamento...", "error": "Errore", "success": "Successo", - "confirm": "Conferma", - "cancel": "Annulla", + "confirm": "Confirm", + "cancel": "Cancel", "close": "Chiudi", "save": "Salva", "delete": "Elimina", "edit": "Modifica", "add": "Aggiungi", "remove": "Rimuovi", - "search": "Cerca", - "noResults": "Nessun risultato", + "search": "Search...", + "noResults": "No notes found", "required": "Obbligatorio", "optional": "Opzionale" }, @@ -1982,7 +2013,9 @@ "searching": "Ricerca in corso...", "noNotesFoundForContext": "Nessuna nota rilevante trovata per questa domanda. Rispondi con la tua conoscenza generale.", "webSearch": "Ricerca web", - "timeoutWarning": "Response is taking longer than expected..." + "timeoutWarning": "Response is taking longer than expected...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "Il Laboratorio", @@ -2550,5 +2583,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/ja.json b/memento-note/locales/ja.json index bf5284a..2d11bcd 100644 --- a/memento-note/locales/ja.json +++ b/memento-note/locales/ja.json @@ -49,8 +49,8 @@ "sortOldest": "古い順", "sortAlpha": "A→Z", "accountMenu": "アカウントメニュー", - "profile": "プロフィール", - "signOut": "サインアウト", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "並べ替え順序", "freezePinnedNotebook": "ノートブックのサイドバーの順序を固定する", "unfreezePinnedNotebook": "ノートブックのサイドバーの順序の固定を解除する", @@ -58,14 +58,15 @@ "renameNotebook": "名前の変更", "sharedNotebookBadge": "· Shared", "sortManual": "自由な順序", - "moveFailed": "ノートブックの移動に失敗しました", - "dropToRoot": "ここにドロップでルートに移動" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "ノート", "newNote": "新しいノート", "reorganize": "メモを再整理する", - "untitled": "無題", + "untitled": "Untitled", "placeholder": "ノートを作成...", "markdownPlaceholder": "ノートを作成...(Markdown対応)", "titlePlaceholder": "タイトル", @@ -81,12 +82,12 @@ "add": "追加", "adding": "追加中...", "close": "閉じる", - "confirmDelete": "このノートを削除してもよろしいですか?", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "この共有ノートを退出してもよろしいですか?", "sharedBy": "共有者", "sharedShort": "共有", "leaveShare": "退出", - "delete": "削除", + "delete": "Delete", "archive": "アーカイブ", "unarchive": "アーカイブを解除", "pin": "ピン留め", @@ -127,7 +128,7 @@ "duplicate": "複製", "share": "共有", "showCollaborators": "共同編集者を表示", - "pinned": "ピン留め済み", + "pinned": "Note pinned", "others": "その他", "noNotes": "ノートはありません", "noNotesFound": "ノートが見つかりませんでした", @@ -159,8 +160,8 @@ "recent": "最近", "addNote": "ノートを追加", "readMore": "続きを読む", - "remove": "削除", - "dragToReorder": "ドラッグして並べ替え", + "remove": "Remove", + "dragToReorder": "Drag to reorder", "more": "もっと見る", "emptyState": "ノートがありません", "metadataPanel": "詳細", @@ -173,7 +174,7 @@ "improveFailed": "改善に失敗しました", "transformFailed": "変換に失敗しました", "markdown": "Markdown", - "unpinned": "ピン留め解除", + "unpinned": "Note unpinned", "redoShortcut": "やり直し (Ctrl+Y)", "undoShortcut": "元に戻す (Ctrl+Z)", "reorderTabs": "タブを並べ替え", @@ -751,7 +752,7 @@ "downloadFailed": "ダウンロードに失敗しました" }, "nav": { - "home": "ホーム", + "home": "Home", "notes": "ノート", "notebooks": "ノートブック", "generalNotes": "一般ノート", @@ -761,7 +762,7 @@ "aiSettings": "AI設定", "logout": "ログアウト", "login": "ログイン", - "adminDashboard": "管理ダッシュボード", + "adminDashboard": "Admin Dashboard", "diagnostics": "診断", "trash": "ゴミ箱", "support": "Mementoをサポート ☕", @@ -786,7 +787,8 @@ "proPlan": "プロプラン", "chat": "AIチャット", "lab": "ラボ", - "agents": "エージェント" + "agents": "エージェント", + "sharedWithMe": "Shared with me" }, "settings": { "title": "設定", @@ -814,7 +816,7 @@ "security": "セキュリティ", "about": "について", "version": "バージョン", - "settingsSaved": "設定を保存しました", + "settingsSaved": "Settings saved", "cardSizeMode": "Note Size", "cardSizeModeDescription": "Choose between variable sizes or uniform size", "selectCardSizeMode": "Select display mode", @@ -835,14 +837,14 @@ "semanticIndexingDescription": "すべてのノートのベクトルを生成して、意図に基づく検索を有効にします", "profile": "プロフィール", "searchNoResults": "一致する設定が見つかりません", - "languageAuto": "自動検出", + "languageAuto": "Language set to Auto", "emailNotifications": "メール通知", "emailNotificationsDesc": "重要な通知をメールで受け取ります", "desktopNotifications": "デスクトップ通知", "desktopNotificationsDesc": "ブラウザで通知を受け取ります", "notificationsDesc": "通知設定を管理します", - "autoSave": "自動保存", - "autoSaveDesc": "入力中に変更を自動的に保存する" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "プロフィール", @@ -864,10 +866,10 @@ "preferredLanguage": "優先言語", "selectLanguage": "言語を選択", "languageDescription": "この言語はAI機能、コンテンツ分析、インターフェーステキストに使用されます。", - "autoDetect": "自動検出", + "autoDetect": "Auto-detect", "updateSuccess": "プロフィールを更新しました", "updateFailed": "プロフィールの更新に失敗しました", - "languageUpdateSuccess": "言語を更新しました", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "言語の更新に失敗しました", "profileUpdated": "プロフィールを更新しました", "profileError": "プロフィールの更新エラー", @@ -922,8 +924,8 @@ }, "general": { "loading": "読み込み中...", - "save": "保存", - "cancel": "キャンセル", + "save": "Save", + "cancel": "Cancel", "add": "追加", "edit": "編集", "confirm": "確認", @@ -984,7 +986,7 @@ "createNew": "新しいノートブックを作成", "createDescription": "新しいコレクションを開始して、ノート、アイデア、プロジェクトを効率的に整理しましょう。", "name": "ノートブック名", - "namePlaceholder": "例:Q4マーケティング戦略", + "namePlaceholder": "Notebook name", "myNotebook": "マイノートブック", "saving": "保存中...", "selectIcon": "アイコン", @@ -993,7 +995,7 @@ "creating": "作成中...", "edit": "ノートブックを編集", "editDescription": "ノートブックの名前、アイコン、色を変更します。", - "delete": "ノートブックを削除", + "delete": "Delete", "deleteWarning": "このノートブックを削除してもよろしいですか?ノートは一般ノートに移動されます。", "deleteConfirm": "削除", "summary": "ノートブックの概要", @@ -1012,7 +1014,10 @@ "pinnedFrozenTooltip": "固定されたノートブック — 注文は凍結されています", "organizeNotebookWithAITooltip": "このノートを AI で整理する", "assistantRequiredForSummarize": "設定で AI アシスタントをオンにして要約します", - "createSubnotebook": "サブノートブックを追加する" + "createSubnotebook": "サブノートブックを追加する", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "{name}に移動しますか?", @@ -1430,20 +1435,22 @@ }, "appearance": { "title": "外観", - "description": "アプリの見た目をカスタマイズ", + "description": "Customize the interface", "notesViewDescription": "ホームとノートブックでノートを表示する方法を選択します。", "notesViewLabel": "ノートのレイアウト", "notesViewTabs": "タブ(OneNote風)", "notesViewMasonry": "カード(グリッド)", "notesViewList": "一覧(雑誌)", - "selectTheme": "Select theme", - "fontFamilyLabel": "フォントファミリー", - "fontFamilyDescription": "アプリ全体で使用するフォントを選択してください", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter は読みやすさに最適化されています。システムはOSのネイティブフォントを使用します", - "fontSystem": "システムデフォルト", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", - "fontJetBrainsMono": "JetBrains Mono" + "fontJetBrainsMono": "JetBrains Mono", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "General", @@ -1477,18 +1484,26 @@ }, "trash": { "title": "ゴミ箱", - "empty": "ゴミ箱は空です", - "emptyDescription": "削除されたメモはここに表示されます", - "restore": "復元", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "完全に削除", "noteTrashed": "メモをゴミ箱に移動しました", "noteRestored": "メモを復元しました", "notePermanentlyDeleted": "メモを完全に削除しました", "emptyTrash": "ゴミ箱を空にする", - "emptyTrashConfirm": "ゴミ箱内のすべてのメモを完全に削除しますか?", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "ゴミ箱を空にしました", - "permanentDelete": "完全に削除", - "permanentDeleteConfirm": "このメモは完全に削除されます。この操作は取り消せません。" + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "このメモは完全に削除されます。この操作は取り消せません。", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "プライバシー", @@ -1583,7 +1598,23 @@ "chinese": "中国語", "japanese": "日本語" }, - "customPlaceholder": "例えばアラビア語、ロシア語…" + "customPlaceholder": "例えばアラビア語、ロシア語…", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "不明", @@ -1591,16 +1622,16 @@ "loading": "読み込み中...", "error": "エラー", "success": "成功", - "confirm": "確認", - "cancel": "キャンセル", + "confirm": "Confirm", + "cancel": "Cancel", "close": "閉じる", "save": "保存", "delete": "削除", "edit": "編集", "add": "追加", "remove": "削除", - "search": "検索", - "noResults": "結果なし", + "search": "Search...", + "noResults": "No notes found", "required": "必須", "optional": "任意" }, @@ -1982,7 +2013,9 @@ "searching": "検索中...", "noNotesFoundForContext": "この質問に関連するノートが見つかりませんでした。一般的な知識でお答えください。", "webSearch": "ウェブ検索", - "timeoutWarning": "Response is taking longer than expected..." + "timeoutWarning": "Response is taking longer than expected...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "ラボ", @@ -2550,5 +2583,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/ko.json b/memento-note/locales/ko.json index c18816e..2950f81 100644 --- a/memento-note/locales/ko.json +++ b/memento-note/locales/ko.json @@ -49,8 +49,8 @@ "sortOldest": "오래된 것부터", "sortAlpha": "A → Z", "accountMenu": "계정 메뉴", - "profile": "윤곽", - "signOut": "로그아웃", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "정렬 순서", "freezePinnedNotebook": "노트북 사이드바 순서 고정", "unfreezePinnedNotebook": "노트북 사이드바 순서 고정 해제", @@ -58,14 +58,15 @@ "renameNotebook": "이름 바꾸기", "sharedNotebookBadge": "· Shared", "sortManual": "사용자 지정 순서", - "moveFailed": "노트북 이동 실패", - "dropToRoot": "여기에 놓아 루트로 이동" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "메모", "newNote": "새 메모", "reorganize": "메모 재구성", - "untitled": "제목 없음", + "untitled": "Untitled", "placeholder": "메모 작성...", "markdownPlaceholder": "메모 작성... (Markdown 지원)", "titlePlaceholder": "제목", @@ -81,12 +82,12 @@ "add": "추가", "adding": "추가 중...", "close": "닫기", - "confirmDelete": "이 메모를 삭제하시겠습니까?", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "이 공유 메모를 나가시겠습니까?", "sharedBy": "공유자", "sharedShort": "공유됨", "leaveShare": "나가기", - "delete": "삭제", + "delete": "Delete", "archive": "보관", "unarchive": "보관 취소", "pin": "고정", @@ -127,7 +128,7 @@ "duplicate": "복제", "share": "공유", "showCollaborators": "공동 작업자 표시", - "pinned": "고정됨", + "pinned": "Note pinned", "others": "기타", "noNotes": "메모 없음", "noNotesFound": "메모를 찾을 수 없습니다", @@ -159,8 +160,8 @@ "recent": "최근", "addNote": "메모 추가", "readMore": "더 읽기", - "remove": "제거", - "dragToReorder": "드래그하여 재정렬", + "remove": "Remove", + "dragToReorder": "Drag to reorder", "more": "더 보기", "emptyState": "메모가 없습니다", "metadataPanel": "세부", @@ -173,7 +174,7 @@ "improveFailed": "개선 실패", "transformFailed": "변환 실패", "markdown": "Markdown", - "unpinned": "고정 해제됨", + "unpinned": "Note unpinned", "redoShortcut": "다시 실행 (Ctrl+Y)", "undoShortcut": "실행 취소 (Ctrl+Z)", "reorderTabs": "탭 재정렬", @@ -751,7 +752,7 @@ "downloadFailed": "다운로드 실패" }, "nav": { - "home": "홈", + "home": "Home", "notes": "메모", "notebooks": "노트북", "generalNotes": "일반 메모", @@ -761,7 +762,7 @@ "aiSettings": "AI 설정", "logout": "로그아웃", "login": "로그인", - "adminDashboard": "관리자 대시보드", + "adminDashboard": "Admin Dashboard", "diagnostics": "진단", "trash": "휴지통", "support": "Memento 지원하기 ☕", @@ -786,7 +787,8 @@ "proPlan": "프로 플랜", "chat": "AI 채팅", "lab": "랩", - "agents": "에이전트" + "agents": "에이전트", + "sharedWithMe": "Shared with me" }, "settings": { "title": "설정", @@ -814,7 +816,7 @@ "security": "보안", "about": "정보", "version": "버전", - "settingsSaved": "설정이 저장되었습니다", + "settingsSaved": "Settings saved", "cardSizeMode": "Note Size", "cardSizeModeDescription": "Choose between variable sizes or uniform size", "selectCardSizeMode": "Select display mode", @@ -835,14 +837,14 @@ "semanticIndexingDescription": "의도 기반 검색을 활성화하기 위해 모든 노트의 벡터를 생성합니다", "profile": "프로필", "searchNoResults": "일치하는 설정을 찾을 수 없습니다", - "languageAuto": "자동 감지", + "languageAuto": "Language set to Auto", "emailNotifications": "이메일 알림", "emailNotificationsDesc": "이메일로 중요한 알림을 받습니다", "desktopNotifications": "데스크톱 알림", "desktopNotificationsDesc": "브라우저에서 알림을 받습니다", "notificationsDesc": "알림 환경설정을 관리합니다", - "autoSave": "자동 저장", - "autoSaveDesc": "입력하는 동안 변경 사항을 자동으로 저장" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "프로필", @@ -864,10 +866,10 @@ "preferredLanguage": "선호 언어", "selectLanguage": "언어 선택", "languageDescription": "이 언어는 AI 기능, 콘텐츠 분석 및 인터페이스 텍스트에 사용됩니다.", - "autoDetect": "자동 감지", + "autoDetect": "Auto-detect", "updateSuccess": "프로필이 업데이트되었습니다", "updateFailed": "프로필 업데이트 실패", - "languageUpdateSuccess": "언어가 업데이트되었습니다", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "언어 업데이트 실패", "profileUpdated": "프로필이 업데이트되었습니다", "profileError": "프로필 업데이트 오류", @@ -922,8 +924,8 @@ }, "general": { "loading": "로딩 중...", - "save": "저장", - "cancel": "취소", + "save": "Save", + "cancel": "Cancel", "add": "추가", "edit": "편집", "confirm": "확인", @@ -984,7 +986,7 @@ "createNew": "새 노트북 만들기", "createDescription": "메모, 아이디어, 프로젝트를 효율적으로 정리할 새 컬렉션을 시작하세요.", "name": "노트북 이름", - "namePlaceholder": "예: 4분기 마케팅 전략", + "namePlaceholder": "Notebook name", "myNotebook": "내 노트북", "saving": "저장 중...", "selectIcon": "아이콘", @@ -993,7 +995,7 @@ "creating": "생성 중...", "edit": "노트북 편집", "editDescription": "노트북의 이름, 아이콘, 색상을 변경합니다.", - "delete": "노트북 삭제", + "delete": "Delete", "deleteWarning": "이 노트북을 삭제하시겠습니까? 메모는 일반 메모로 이동됩니다.", "deleteConfirm": "삭제", "summary": "노트북 요약", @@ -1012,7 +1014,10 @@ "pinnedFrozenTooltip": "고정된 노트북 - 주문이 동결됨", "organizeNotebookWithAITooltip": "AI로 이 노트북을 정리하세요", "assistantRequiredForSummarize": "요약하려면 설정에서 AI 도우미를 켜세요.", - "createSubnotebook": "하위 노트북 추가" + "createSubnotebook": "하위 노트북 추가", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "{name}(으)로 이동하시겠습니까?", @@ -1430,20 +1435,22 @@ }, "appearance": { "title": "모양", - "description": "앱의 모양 사용자 지정", + "description": "Customize the interface", "notesViewDescription": "홈 및 노트북에서 메모가 표시되는 방식을 선택하세요.", "notesViewLabel": "메모 레이아웃", "notesViewTabs": "탭 (OneNote 스타일)", "notesViewMasonry": "카드 (그리드)", "notesViewList": "목록(잡지)", - "selectTheme": "Select theme", - "fontFamilyLabel": "글꼴 패밀리", - "fontFamilyDescription": "앱 전체에서 사용할 글꼴을 선택하세요", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter는 가독성에 최적화되어 있으며, 시스템은 OS 기본 글꼴을 사용합니다", - "fontSystem": "시스템 기본 글꼴", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", - "fontJetBrainsMono": "JetBrains Mono" + "fontJetBrainsMono": "JetBrains Mono", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "General", @@ -1477,18 +1484,26 @@ }, "trash": { "title": "휴지통", - "empty": "휴지통이 비어 있습니다", - "emptyDescription": "삭제된 메모가 여기에 표시됩니다", - "restore": "복원", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "영구 삭제", "noteTrashed": "메모가 휴지통으로 이동되었습니다", "noteRestored": "메모가 복원되었습니다", "notePermanentlyDeleted": "메모가 영구 삭제되었습니다", "emptyTrash": "휴지통 비우기", - "emptyTrashConfirm": "휴지통의 모든 메모를 영구 삭제하시겠습니까?", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "휴지통이 비워졌습니다", - "permanentDelete": "영구 삭제", - "permanentDeleteConfirm": "이 메모는 영구 삭제됩니다. 이 작업은 되돌릴 수 없습니다." + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "이 메모는 영구 삭제됩니다. 이 작업은 되돌릴 수 없습니다.", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "개인정보", @@ -1583,7 +1598,23 @@ "chinese": "중국인", "japanese": "일본어" }, - "customPlaceholder": "예를 들어 아랍어, 러시아어…" + "customPlaceholder": "예를 들어 아랍어, 러시아어…", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "알 수 없음", @@ -1591,16 +1622,16 @@ "loading": "로딩 중...", "error": "오류", "success": "성공", - "confirm": "확인", - "cancel": "취소", + "confirm": "Confirm", + "cancel": "Cancel", "close": "닫기", "save": "저장", "delete": "삭제", "edit": "편집", "add": "추가", "remove": "제거", - "search": "검색", - "noResults": "결과 없음", + "search": "Search...", + "noResults": "No notes found", "required": "필수", "optional": "선택" }, @@ -1982,7 +2013,9 @@ "searching": "검색 중...", "noNotesFoundForContext": "이 질문에 대한 관련 노트를 찾을 수 없습니다. 일반 지식으로 답변하세요.", "webSearch": "웹 검색", - "timeoutWarning": "Response is taking longer than expected..." + "timeoutWarning": "Response is taking longer than expected...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "랩", @@ -2550,5 +2583,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/nl.json b/memento-note/locales/nl.json index 10350aa..a40b88f 100644 --- a/memento-note/locales/nl.json +++ b/memento-note/locales/nl.json @@ -49,8 +49,8 @@ "sortOldest": "Oudste eerst", "sortAlpha": "A → Z", "accountMenu": "Accountmenu", - "profile": "Profiel", - "signOut": "Meld u af", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "Sorteervolgorde", "freezePinnedNotebook": "Zet de volgorde van de notitieboekjezijbalk vast", "unfreezePinnedNotebook": "Maak de volgorde van de notitieblokzijbalk los", @@ -58,14 +58,15 @@ "renameNotebook": "Hernoemen", "sharedNotebookBadge": "· Shared", "sortManual": "Vrije volgorde", - "moveFailed": "Kan notitieboek niet verplaatsen", - "dropToRoot": "Hier loslaten om naar root te verplaatsen" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "Notities", "newNote": "Nieuwe notitie", "reorganize": "Notities reorganiseren", - "untitled": "Naamloos", + "untitled": "Untitled", "placeholder": "Maak een notitie...", "markdownPlaceholder": "Maak een notitie... (Markdown ondersteund)", "titlePlaceholder": "Titel", @@ -81,12 +82,12 @@ "add": "Toevoegen", "adding": "Toevoegen...", "close": "Sluiten", - "confirmDelete": "Weet u zeker dat u deze notitie wilt verwijderen?", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "Weet u zeker dat u deze gedeelde notitie wilt verlaten?", "sharedBy": "Gedeeld door", "sharedShort": "Gedeeld", "leaveShare": "Verlaten", - "delete": "Verwijderen", + "delete": "Delete", "archive": "Archiveren", "unarchive": "Dearchiveren", "pin": "Vastzetten", @@ -127,7 +128,7 @@ "duplicate": "Dupliceren", "share": "Delen", "showCollaborators": "Medewerkers weergeven", - "pinned": "Vastgezet", + "pinned": "Note pinned", "others": "Overig", "noNotes": "Geen notities", "noNotesFound": "Geen notities gevonden", @@ -159,8 +160,8 @@ "recent": "Recent", "addNote": "Notitie toevoegen", "readMore": "Lees meer", - "remove": "Verwijderen", - "dragToReorder": "Sleep om te herschikken", + "remove": "Remove", + "dragToReorder": "Drag to reorder", "more": "Meer", "emptyState": "Geen notities hier", "metadataPanel": "Details", @@ -173,7 +174,7 @@ "improveFailed": "Verbeteren mislukt", "transformFailed": "Transformeren mislukt", "markdown": "Markdown", - "unpinned": "Losgemaakt", + "unpinned": "Note unpinned", "redoShortcut": "Opnieuw (Ctrl+Y)", "undoShortcut": "Ongedaan maken (Ctrl+Z)", "reorderTabs": "Tabblad herschikken", @@ -761,7 +762,7 @@ "aiSettings": "AI-instellingen", "logout": "Uitloggen", "login": "Inloggen", - "adminDashboard": "Beheerdashboard", + "adminDashboard": "Admin Dashboard", "diagnostics": "Diagnostiek", "trash": "Prullenbak", "support": "Memento ondersteunen ☕", @@ -786,7 +787,8 @@ "proPlan": "Pro Plan", "chat": "AI Chat", "lab": "Het Lab", - "agents": "Agents" + "agents": "Agents", + "sharedWithMe": "Shared with me" }, "settings": { "title": "Instellingen", @@ -814,7 +816,7 @@ "security": "Beveiliging", "about": "Over", "version": "Versie", - "settingsSaved": "Instellingen opgeslagen", + "settingsSaved": "Settings saved", "cardSizeMode": "Note Size", "cardSizeModeDescription": "Choose between variable sizes or uniform size", "selectCardSizeMode": "Select display mode", @@ -835,14 +837,14 @@ "semanticIndexingDescription": "Genereer vectoren voor alle notities om intentiegericht zoeken mogelijk te maken", "profile": "Profiel", "searchNoResults": "Geen resultaten gevonden", - "languageAuto": "Automatisch", + "languageAuto": "Language set to Auto", "emailNotifications": "E-mailmeldingen", "emailNotificationsDesc": "Ontvang belangrijke meldingen per e-mail", "desktopNotifications": "Bureaubladmeldingen", "desktopNotificationsDesc": "Ontvang meldingen in uw browser", "notificationsDesc": "Beheer uw meldingsvoorkeuren", - "autoSave": "Automatisch opslaan", - "autoSaveDesc": "Sla wijzigingen automatisch op tijdens het typen" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "Profiel", @@ -864,10 +866,10 @@ "preferredLanguage": "Voorkeurstaal", "selectLanguage": "Selecteer een taal", "languageDescription": "Deze taal wordt gebruikt voor AI-functies, inhoudsanalyse en interfacetekst.", - "autoDetect": "Automatisch detecteren", + "autoDetect": "Auto-detect", "updateSuccess": "Profiel bijgewerkt", "updateFailed": "Profiel bijwerken mislukt", - "languageUpdateSuccess": "Taal succesvol bijgewerkt", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "Taal bijwerken mislukt", "profileUpdated": "Profiel bijgewerkt", "profileError": "Fout bij bijwerken profiel", @@ -922,8 +924,8 @@ }, "general": { "loading": "Laden...", - "save": "Opslaan", - "cancel": "Annuleren", + "save": "Save", + "cancel": "Cancel", "add": "Toevoegen", "edit": "Bewerken", "confirm": "Bevestigen", @@ -984,7 +986,7 @@ "createNew": "Nieuw notitieboek maken", "createDescription": "Start een nieuwe verzameling om uw notities, ideeën en projecten efficiënt te organiseren.", "name": "Naam van notitieboek", - "namePlaceholder": "bijv. Q4 Marketingstrategie", + "namePlaceholder": "Notebook name", "myNotebook": "Mijn notitieboek", "saving": "Opslaan...", "selectIcon": "Icoon", @@ -993,7 +995,7 @@ "creating": "Maken...", "edit": "Notitieboek bewerken", "editDescription": "Wijzig de naam, het pictogram en de kleur van uw notitieboek.", - "delete": "Notitieboek verwijderen", + "delete": "Delete", "deleteWarning": "Weet u zeker dat u dit notitieboek wilt verwijderen? Notities worden verplaatst naar Algemene notities.", "deleteConfirm": "Verwijderen", "summary": "Samenvatting van notitieboek", @@ -1012,7 +1014,10 @@ "pinnedFrozenTooltip": "Vastgezet notitieboekje — bestelling bevroren", "organizeNotebookWithAITooltip": "Organiseer dit notitieboekje met AI", "assistantRequiredForSummarize": "Schakel AI Assistant in de instellingen in om samen te vatten", - "createSubnotebook": "Subnotitieblok toevoegen" + "createSubnotebook": "Subnotitieblok toevoegen", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "Verplaatsen naar {name}?", @@ -1430,20 +1435,22 @@ }, "appearance": { "title": "Weergave", - "description": "Pas aan hoe de app eruit ziet", + "description": "Customize the interface", "notesViewDescription": "Kies hoe notities worden weergegeven op de startpagina en in notitieboeken.", "notesViewLabel": "Notities weergave", "notesViewTabs": "Tabbladen (OneNote-stijl)", "notesViewMasonry": "Kaarten (raster)", "notesViewList": "Lijst (tijdschrift)", - "selectTheme": "Select theme", - "fontFamilyLabel": "Lettertypefamilie", - "fontFamilyDescription": "Kies het lettertype dat in de hele app wordt gebruikt", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter is geoptimaliseerd voor leesbaarheid, Systeem gebruikt het native lettertype van uw besturingssysteem", - "fontSystem": "Standaard systeemlettertype", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", - "fontJetBrainsMono": "JetBrains Mono" + "fontJetBrainsMono": "JetBrains Mono", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "General", @@ -1477,18 +1484,26 @@ }, "trash": { "title": "Prullenbak", - "empty": "De prullenbak is leeg", - "emptyDescription": "Verwijderde notities verschijnen hier", - "restore": "Herstellen", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "Definitief verwijderen", "noteTrashed": "Notitie naar prullenbak verplaatst", "noteRestored": "Notitie hersteld", "notePermanentlyDeleted": "Notitie definitief verwijderd", "emptyTrash": "Prullenbak legen", - "emptyTrashConfirm": "Alle notities in de prullenbak definitief verwijderen?", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "Prullenbak geleegd", - "permanentDelete": "Definitief verwijderen", - "permanentDeleteConfirm": "Deze notitie wordt definitief verwijderd. Deze actie kan niet ongedaan worden gemaakt." + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "Deze notitie wordt definitief verwijderd. Deze actie kan niet ongedaan worden gemaakt.", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "Privacy", @@ -1583,7 +1598,23 @@ "chinese": "Chinese", "japanese": "Japanse" }, - "customPlaceholder": "bijv. Arabisch, Russisch…" + "customPlaceholder": "bijv. Arabisch, Russisch…", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "Onbekend", @@ -1591,16 +1622,16 @@ "loading": "Laden...", "error": "Fout", "success": "Succes", - "confirm": "Bevestigen", - "cancel": "Annuleren", + "confirm": "Confirm", + "cancel": "Cancel", "close": "Sluiten", "save": "Opslaan", "delete": "Verwijderen", "edit": "Bewerken", "add": "Toevoegen", "remove": "Verwijderen", - "search": "Zoeken", - "noResults": "Geen resultaten", + "search": "Search...", + "noResults": "No notes found", "required": "Vereist", "optional": "Optioneel" }, @@ -1982,7 +2013,9 @@ "searching": "Zoeken...", "noNotesFoundForContext": "Geen relevante notities gevonden voor deze vraag. Beantwoord met je algemene kennis.", "webSearch": "Zoeken op het web", - "timeoutWarning": "Response is taking longer than expected..." + "timeoutWarning": "Response is taking longer than expected...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "Het Lab", @@ -2550,5 +2583,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/pl.json b/memento-note/locales/pl.json index df18822..72e0909 100644 --- a/memento-note/locales/pl.json +++ b/memento-note/locales/pl.json @@ -49,8 +49,8 @@ "sortOldest": "Najpierw najstarszy", "sortAlpha": "A → Z", "accountMenu": "Menu konta", - "profile": "Profil", - "signOut": "Wyloguj się", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "Kolejność sortowania", "freezePinnedNotebook": "Przypnij kolejność paska bocznego notatnika", "unfreezePinnedNotebook": "Odepnij zamówienie na pasku bocznym notatnika", @@ -58,14 +58,15 @@ "renameNotebook": "Przemianować", "sharedNotebookBadge": "· Shared", "sortManual": "Dowolna kolejność", - "moveFailed": "Nie udało się przenieść notatnika", - "dropToRoot": "Upuść tutaj, aby przenieść do roota" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "Notatki", "newNote": "Nowa notatka", "reorganize": "Reorganizuj notatki", - "untitled": "Bez tytułu", + "untitled": "Untitled", "placeholder": "Zrób notatkę...", "markdownPlaceholder": "Zrób notatkę... (Markdown obsługiwany)", "titlePlaceholder": "Tytuł", @@ -81,12 +82,12 @@ "add": "Dodaj", "adding": "Dodawanie...", "close": "Zamknij", - "confirmDelete": "Czy na pewno chcesz usunąć tę notatkę?", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "Czy na pewno chcesz opuścić tę udostępnioną notatkę?", "sharedBy": "Udostępnione przez", "sharedShort": "Wspólny", "leaveShare": "Opuść", - "delete": "Usuń", + "delete": "Delete", "archive": "Archiwizuj", "unarchive": "Przywróć z archiwum", "pin": "Przypnij", @@ -127,7 +128,7 @@ "duplicate": "Duplikuj", "share": "Udostępnij", "showCollaborators": "Pokaż współpracowników", - "pinned": "Przypięte", + "pinned": "Note pinned", "others": "Inne", "noNotes": "Brak notatek", "noNotesFound": "Nie znaleziono notatek", @@ -159,8 +160,8 @@ "recent": "Ostatnie", "addNote": "Dodaj notatkę", "readMore": "Czytaj więcej", - "remove": "Usuń", - "dragToReorder": "Przeciągnij, aby zmienić kolejność", + "remove": "Remove", + "dragToReorder": "Drag to reorder", "more": "Więcej", "emptyState": "Brak notatek tutaj", "metadataPanel": "Bliższe dane", @@ -173,7 +174,7 @@ "improveFailed": "Ulepszenie nie powiodło się", "transformFailed": "Przekształcenie nie powiodło się", "markdown": "Markdown", - "unpinned": "Odepnięta", + "unpinned": "Note unpinned", "redoShortcut": "Ponów (Ctrl+Y)", "undoShortcut": "Cofnij (Ctrl+Z)", "reorderTabs": "Zmień kolejność kart", @@ -751,7 +752,7 @@ "downloadFailed": "Pobieranie nie powiodło się" }, "nav": { - "home": "Strona główna", + "home": "Home", "notes": "Notatki", "notebooks": "Notatniki", "generalNotes": "Notatki ogólne", @@ -761,7 +762,7 @@ "aiSettings": "Ustawienia AI", "logout": "Wyloguj", "login": "Zaloguj", - "adminDashboard": "Panel administracyjny", + "adminDashboard": "Admin Dashboard", "diagnostics": "Diagnostyka", "trash": "Kosz", "support": "Wspomóż Memento ☕", @@ -786,7 +787,8 @@ "proPlan": "Plan Pro", "chat": "Czat AI", "lab": "Laboratorium", - "agents": "Agenci" + "agents": "Agenci", + "sharedWithMe": "Shared with me" }, "settings": { "title": "Ustawienia", @@ -814,7 +816,7 @@ "security": "Bezpieczeństwo", "about": "O aplikacji", "version": "Wersja", - "settingsSaved": "Ustawienia zapisane", + "settingsSaved": "Settings saved", "cardSizeMode": "Note Size", "cardSizeModeDescription": "Choose between variable sizes or uniform size", "selectCardSizeMode": "Select display mode", @@ -835,14 +837,14 @@ "semanticIndexingDescription": "Generuj wektory dla wszystkich notatek, aby umożliwić wyszukiwanie oparte na intencji", "profile": "Profil", "searchNoResults": "Nie znaleziono wyników", - "languageAuto": "Automatyczny", + "languageAuto": "Language set to Auto", "emailNotifications": "Powiadomienia e-mail", "emailNotificationsDesc": "Otrzymuj ważne powiadomienia przez e-mail", "desktopNotifications": "Powiadomienia na pulpicie", "desktopNotificationsDesc": "Otrzymuj powiadomienia w przeglądarce", "notificationsDesc": "Zarządzaj swoimi preferencjami powiadomień", - "autoSave": "Automatyczne zapisywanie", - "autoSaveDesc": "Automatycznie zapisuj zmiany podczas pisania" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "Profil", @@ -864,10 +866,10 @@ "preferredLanguage": "Preferowany język", "selectLanguage": "Wybierz język", "languageDescription": "Ten język będzie używany do funkcji AI, analizy treści i tekstu interfejsu.", - "autoDetect": "Automatyczne wykrywanie", + "autoDetect": "Auto-detect", "updateSuccess": "Profil zaktualizowany", "updateFailed": "Nie udało się zaktualizować profilu", - "languageUpdateSuccess": "Język zaktualizowany pomyślnie", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "Nie udało się zaktualizować języka", "profileUpdated": "Profil zaktualizowany", "profileError": "Błąd aktualizacji profilu", @@ -922,8 +924,8 @@ }, "general": { "loading": "Ładowanie...", - "save": "Zapisz", - "cancel": "Anuluj", + "save": "Save", + "cancel": "Cancel", "add": "Dodaj", "edit": "Edytuj", "confirm": "Potwierdź", @@ -984,7 +986,7 @@ "createNew": "Utwórz nowy notatnik", "createDescription": "Rozpocznij nową kolekcję, aby efektywnie organizować swoje notatki, pomysły i projekty.", "name": "Nazwa notatnika", - "namePlaceholder": "np. Strategia marketingowa Q4", + "namePlaceholder": "Notebook name", "myNotebook": "Mój notatnik", "saving": "Zapisywanie...", "selectIcon": "Ikona", @@ -993,7 +995,7 @@ "creating": "Tworzenie...", "edit": "Edytuj notatnik", "editDescription": "Zmień nazwę, ikonę i kolor swojego notatnika.", - "delete": "Usuń notatnik", + "delete": "Delete", "deleteWarning": "Czy na pewno chcesz usunąć ten notatnik? Notatki zostaną przeniesione do Notatek ogólnych.", "deleteConfirm": "Usuń", "summary": "Podsumowanie notatnika", @@ -1012,7 +1014,10 @@ "pinnedFrozenTooltip": "Przypięty notatnik — zamówienie zamrożone", "organizeNotebookWithAITooltip": "Uporządkuj ten notatnik za pomocą sztucznej inteligencji", "assistantRequiredForSummarize": "Aby podsumować, włącz AI Assistant w ustawieniach", - "createSubnotebook": "Dodaj podnotatnik" + "createSubnotebook": "Dodaj podnotatnik", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "Przenieść do {name}?", @@ -1430,20 +1435,22 @@ }, "appearance": { "title": "Wygląd", - "description": "Dostosuj wygląd aplikacji", + "description": "Customize the interface", "notesViewDescription": "Wybierz sposób wyświetlania notatek na stronie głównej i w notatnikach.", "notesViewLabel": "Układ notatek", "notesViewTabs": "Karty (styl OneNote)", "notesViewMasonry": "Karty (siatka)", "notesViewList": "Lista (magazyn)", - "selectTheme": "Select theme", - "fontFamilyLabel": "Rodzina czcionek", - "fontFamilyDescription": "Wybierz czcionkę używaną w całej aplikacji", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter jest zoptymalizowany pod kątem czytelności, Systemowa używa natywnej czcionki systemu operacyjnego", - "fontSystem": "Domyślna czcionka systemowa", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", - "fontJetBrainsMono": "JetBrains Mono" + "fontJetBrainsMono": "JetBrains Mono", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "General", @@ -1477,18 +1484,26 @@ }, "trash": { "title": "Kosz", - "empty": "Kosz jest pusty", - "emptyDescription": "Usunięte notatki pojawią się tutaj", - "restore": "Przywróć", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "Usuń trwale", "noteTrashed": "Notatka przeniesiona do kosza", "noteRestored": "Notatka przywrócona", "notePermanentlyDeleted": "Notatka trwale usunięta", "emptyTrash": "Opróżnij kosz", - "emptyTrashConfirm": "Trwale usunąć wszystkie notatki z kosza?", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "Kosz opróżniony", - "permanentDelete": "Usuń trwale", - "permanentDeleteConfirm": "Ta notatka zostanie trwale usunięta. Ta operacja jest nieodwracalna." + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "Ta notatka zostanie trwale usunięta. Ta operacja jest nieodwracalna.", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "Prywatność", @@ -1583,7 +1598,23 @@ "chinese": "chiński", "japanese": "japoński" }, - "customPlaceholder": "np. Arabski, rosyjski…" + "customPlaceholder": "np. Arabski, rosyjski…", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "Nieznany", @@ -1591,16 +1622,16 @@ "loading": "Ładowanie...", "error": "Błąd", "success": "Sukces", - "confirm": "Potwierdź", - "cancel": "Anuluj", + "confirm": "Confirm", + "cancel": "Cancel", "close": "Zamknij", "save": "Zapisz", "delete": "Usuń", "edit": "Edytuj", "add": "Dodaj", "remove": "Usuń", - "search": "Szukaj", - "noResults": "Brak wyników", + "search": "Search...", + "noResults": "No notes found", "required": "Wymagane", "optional": "Opcjonalne" }, @@ -1982,7 +2013,9 @@ "searching": "Wyszukiwanie...", "noNotesFoundForContext": "Nie znaleziono odpowiednich notatek dla tego pytania. Odpowiedz używając ogólnej wiedzy.", "webSearch": "Wyszukiwanie w sieci", - "timeoutWarning": "Response is taking longer than expected..." + "timeoutWarning": "Response is taking longer than expected...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "Laboratorium", @@ -2550,5 +2583,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/pt.json b/memento-note/locales/pt.json index 3b1dd2a..0b07376 100644 --- a/memento-note/locales/pt.json +++ b/memento-note/locales/pt.json @@ -49,8 +49,8 @@ "sortOldest": "Mais antigo primeiro", "sortAlpha": "A → Z", "accountMenu": "Menu da conta", - "profile": "Perfil", - "signOut": "sair", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "Ordem de classificação", "freezePinnedNotebook": "Fixar ordem da barra lateral do notebook", "unfreezePinnedNotebook": "Liberar ordem da barra lateral do notebook", @@ -58,14 +58,15 @@ "renameNotebook": "Renomear", "sharedNotebookBadge": "· Shared", "sortManual": "Ordem livre", - "moveFailed": "Falha ao mover o caderno", - "dropToRoot": "Solte aqui para mover para a raiz" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "Notas", "newNote": "Nova nota", "reorganize": "Reorganizar notas", - "untitled": "Sem título", + "untitled": "Untitled", "placeholder": "Faça uma nota...", "markdownPlaceholder": "Faça uma nota... (Markdown suportado)", "titlePlaceholder": "Título", @@ -81,12 +82,12 @@ "add": "Adicionar", "adding": "Adicionando...", "close": "Fechar", - "confirmDelete": "Tem certeza de que deseja excluir esta nota?", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "Tem certeza de que deseja sair desta nota compartilhada?", "sharedBy": "Compartilhado por", "sharedShort": "Compartilhado", "leaveShare": "Sair", - "delete": "Excluir", + "delete": "Delete", "archive": "Arquivar", "unarchive": "Desarquivar", "pin": "Fixar", @@ -127,7 +128,7 @@ "duplicate": "Duplicar", "share": "Compartilhar", "showCollaborators": "Mostrar colaboradores", - "pinned": "Fixadas", + "pinned": "Note pinned", "others": "Outros", "noNotes": "Sem notas", "noNotesFound": "Nenhuma nota encontrada", @@ -159,8 +160,8 @@ "recent": "Recentes", "addNote": "Adicionar nota", "readMore": "Ler mais", - "remove": "Remover", - "dragToReorder": "Arraste para reordenar", + "remove": "Remove", + "dragToReorder": "Drag to reorder", "more": "Mais", "emptyState": "Nenhuma nota aqui", "metadataPanel": "Detalhes", @@ -173,7 +174,7 @@ "improveFailed": "Falha ao melhorar", "transformFailed": "Falha ao transformar", "markdown": "Markdown", - "unpinned": "Desafixado", + "unpinned": "Note unpinned", "redoShortcut": "Refazer (Ctrl+Y)", "undoShortcut": "Desfazer (Ctrl+Z)", "reorderTabs": "Reordenar aba", @@ -751,7 +752,7 @@ "downloadFailed": "Falha no download" }, "nav": { - "home": "Início", + "home": "Home", "notes": "Notas", "notebooks": "Cadernos", "generalNotes": "Notas gerais", @@ -761,7 +762,7 @@ "aiSettings": "Configurações de IA", "logout": "Sair", "login": "Entrar", - "adminDashboard": "Painel de administração", + "adminDashboard": "Admin Dashboard", "diagnostics": "Diagnósticos", "trash": "Lixeira", "support": "Apoie o Memento ☕", @@ -786,7 +787,8 @@ "proPlan": "Plano Pro", "chat": "Chat IA", "lab": "O Laboratório", - "agents": "Agentes" + "agents": "Agentes", + "sharedWithMe": "Shared with me" }, "settings": { "title": "Configurações", @@ -814,7 +816,7 @@ "security": "Segurança", "about": "Sobre", "version": "Versão", - "settingsSaved": "Configurações salvas", + "settingsSaved": "Settings saved", "cardSizeMode": "Note Size", "cardSizeModeDescription": "Choose between variable sizes or uniform size", "selectCardSizeMode": "Select display mode", @@ -835,14 +837,14 @@ "semanticIndexingDescription": "Gere vetores para todas as notas para ativar a pesquisa baseada em intenção", "profile": "Perfil", "searchNoResults": "Nenhum resultado encontrado", - "languageAuto": "Automático", + "languageAuto": "Language set to Auto", "emailNotifications": "Notificações por e-mail", "emailNotificationsDesc": "Receba notificações importantes por e-mail", "desktopNotifications": "Notificações na área de trabalho", "desktopNotificationsDesc": "Receba notificações no seu navegador", "notificationsDesc": "Gerencie suas preferências de notificação", - "autoSave": "Salvar automaticamente", - "autoSaveDesc": "Salvar alterações automaticamente enquanto digita" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "Perfil", @@ -864,10 +866,10 @@ "preferredLanguage": "Idioma preferido", "selectLanguage": "Selecione um idioma", "languageDescription": "Este idioma será usado para recursos com IA, análise de conteúdo e texto da interface.", - "autoDetect": "Detecção automática", + "autoDetect": "Auto-detect", "updateSuccess": "Perfil atualizado", "updateFailed": "Falha ao atualizar perfil", - "languageUpdateSuccess": "Idioma atualizado com sucesso", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "Falha ao atualizar idioma", "profileUpdated": "Perfil atualizado", "profileError": "Erro ao atualizar perfil", @@ -922,8 +924,8 @@ }, "general": { "loading": "Carregando...", - "save": "Salvar", - "cancel": "Cancelar", + "save": "Save", + "cancel": "Cancel", "add": "Adicionar", "edit": "Editar", "confirm": "Confirmar", @@ -984,7 +986,7 @@ "createNew": "Criar novo caderno", "createDescription": "Inicie uma nova coleção para organizar suas notas, ideias e projetos de forma eficiente.", "name": "Nome do caderno", - "namePlaceholder": "ex. Estratégia de Marketing Q4", + "namePlaceholder": "Notebook name", "myNotebook": "Meu Caderno", "saving": "Salvando...", "selectIcon": "Ícone", @@ -993,7 +995,7 @@ "creating": "Criando...", "edit": "Editar caderno", "editDescription": "Mude o nome, ícone e cor do seu caderno.", - "delete": "Excluir caderno", + "delete": "Delete", "deleteWarning": "Tem certeza de que deseja excluir este caderno? As notas serão movidas para Notas Gerais.", "deleteConfirm": "Excluir", "summary": "Resumo do caderno", @@ -1012,7 +1014,10 @@ "pinnedFrozenTooltip": "Caderno fixado – pedido congelado", "organizeNotebookWithAITooltip": "Organize este notebook com IA", "assistantRequiredForSummarize": "Ative o AI Assistant nas configurações para resumir", - "createSubnotebook": "Adicionar sub-notebook" + "createSubnotebook": "Adicionar sub-notebook", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "Mover para {name}?", @@ -1430,20 +1435,22 @@ }, "appearance": { "title": "Aparência", - "description": "Personalize a aparência do aplicativo", + "description": "Customize the interface", "notesViewDescription": "Escolha como as notas são exibidas na página inicial e nos cadernos.", "notesViewLabel": "Layout das notas", "notesViewTabs": "Abas (estilo OneNote)", "notesViewMasonry": "Cartões (grade)", "notesViewList": "Lista (revista)", - "selectTheme": "Select theme", - "fontFamilyLabel": "Família de fontes", - "fontFamilyDescription": "Escolha a fonte usada em todo o aplicativo", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter é otimizado para legibilidade, Sistema usa a fonte nativa do seu sistema operacional", - "fontSystem": "Fonte padrão do sistema", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", - "fontJetBrainsMono": "JetBrains Mono" + "fontJetBrainsMono": "JetBrains Mono", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "General", @@ -1477,18 +1484,26 @@ }, "trash": { "title": "Lixeira", - "empty": "A lixeira está vazia", - "emptyDescription": "As notas excluídas aparecerão aqui", - "restore": "Restaurar", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "Excluir permanentemente", "noteTrashed": "Nota movida para a lixeira", "noteRestored": "Nota restaurada", "notePermanentlyDeleted": "Nota excluída permanentemente", "emptyTrash": "Esvaziar lixeira", - "emptyTrashConfirm": "Excluir permanentemente todas as notas da lixeira?", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "Lixeira esvaziada", - "permanentDelete": "Excluir permanentemente", - "permanentDeleteConfirm": "Esta nota será excluída permanentemente. Esta ação não pode ser desfeita." + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "Esta nota será excluída permanentemente. Esta ação não pode ser desfeita.", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "Privacidade", @@ -1583,7 +1598,23 @@ "chinese": "chinês", "japanese": "japonês" }, - "customPlaceholder": "por exemplo Árabe, russo…" + "customPlaceholder": "por exemplo Árabe, russo…", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "Desconhecido", @@ -1591,16 +1622,16 @@ "loading": "Carregando...", "error": "Erro", "success": "Sucesso", - "confirm": "Confirmar", - "cancel": "Cancelar", + "confirm": "Confirm", + "cancel": "Cancel", "close": "Fechar", "save": "Salvar", "delete": "Excluir", "edit": "Editar", "add": "Adicionar", "remove": "Remover", - "search": "Pesquisar", - "noResults": "Sem resultados", + "search": "Search...", + "noResults": "No notes found", "required": "Obrigatório", "optional": "Opcional" }, @@ -1982,7 +2013,9 @@ "searching": "Pesquisando...", "noNotesFoundForContext": "Nenhuma nota relevante encontrada para esta pergunta. Responda com seu conhecimento geral.", "webSearch": "Pesquisa na web", - "timeoutWarning": "Response is taking longer than expected..." + "timeoutWarning": "Response is taking longer than expected...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "O Laboratório", @@ -2550,5 +2583,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/ru.json b/memento-note/locales/ru.json index 21f47f3..df30027 100644 --- a/memento-note/locales/ru.json +++ b/memento-note/locales/ru.json @@ -49,8 +49,8 @@ "sortOldest": "Сначала самый старый", "sortAlpha": "А → Я", "accountMenu": "Меню аккаунта", - "profile": "Профиль", - "signOut": "выход", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "Порядок сортировки", "freezePinnedNotebook": "Закрепить порядок на боковой панели блокнота", "unfreezePinnedNotebook": "Открепить порядок боковой панели блокнота", @@ -58,14 +58,15 @@ "renameNotebook": "Переименовать", "sharedNotebookBadge": "· Shared", "sortManual": "Свободный порядок", - "moveFailed": "Не удалось переместить блокнот", - "dropToRoot": "Перетащите сюда для перемещения в корень" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "Заметки", "newNote": "Новая заметка", "reorganize": "Реорганизация заметок", - "untitled": "Без названия", + "untitled": "Untitled", "placeholder": "Сделайте заметку...", "markdownPlaceholder": "Сделайте заметку... (Поддерживается Markdown)", "titlePlaceholder": "Заголовок", @@ -81,12 +82,12 @@ "add": "Добавить", "adding": "Добавление...", "close": "Закрыть", - "confirmDelete": "Вы уверены, что хотите удалить эту заметку?", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "Вы уверены, что хотите покинуть эту общую заметку?", "sharedBy": "Поделился", "sharedShort": "Общий", "leaveShare": "Покинуть", - "delete": "Удалить", + "delete": "Delete", "archive": "Архивировать", "unarchive": "Разархивировать", "pin": "Закрепить", @@ -127,7 +128,7 @@ "duplicate": "Дублировать", "share": "Поделиться", "showCollaborators": "Показать соавторов", - "pinned": "Закреплённые", + "pinned": "Note pinned", "others": "Другие", "noNotes": "Нет заметок", "noNotesFound": "Заметки не найдены", @@ -159,8 +160,8 @@ "recent": "Недавние", "addNote": "Добавить заметку", "readMore": "Читать далее", - "remove": "Удалить", - "dragToReorder": "Перетащите для изменения порядка", + "remove": "Remove", + "dragToReorder": "Drag to reorder", "more": "Ещё", "emptyState": "Здесь нет заметок", "metadataPanel": "Подробности", @@ -173,7 +174,7 @@ "improveFailed": "Ошибка улучшения", "transformFailed": "Ошибка преобразования", "markdown": "Markdown", - "unpinned": "Откреплённая", + "unpinned": "Note unpinned", "redoShortcut": "Повторить (Ctrl+Y)", "undoShortcut": "Отменить (Ctrl+Z)", "reorderTabs": "Изменить порядок вкладок", @@ -751,7 +752,7 @@ "downloadFailed": "Загрузка не удалась" }, "nav": { - "home": "Главная", + "home": "Home", "notes": "Заметки", "notebooks": "Блокноты", "generalNotes": "Общие заметки", @@ -761,7 +762,7 @@ "aiSettings": "Настройки ИИ", "logout": "Выйти", "login": "Войти", - "adminDashboard": "Панель администратора", + "adminDashboard": "Admin Dashboard", "diagnostics": "Диагностика", "trash": "Корзина", "support": "Поддержать Memento ☕", @@ -786,7 +787,8 @@ "proPlan": "Про-план", "chat": "ИИ-чат", "lab": "Лаборатория", - "agents": "Агенты" + "agents": "Агенты", + "sharedWithMe": "Shared with me" }, "settings": { "title": "Настройки", @@ -814,7 +816,7 @@ "security": "Безопасность", "about": "О программе", "version": "Версия", - "settingsSaved": "Настройки сохранены", + "settingsSaved": "Settings saved", "cardSizeMode": "Note Size", "cardSizeModeDescription": "Choose between variable sizes or uniform size", "selectCardSizeMode": "Select display mode", @@ -835,14 +837,14 @@ "semanticIndexingDescription": "Создать векторы для всех заметок для поиска по смыслу", "profile": "Профиль", "searchNoResults": "Результаты не найдены", - "languageAuto": "Автоматически", + "languageAuto": "Language set to Auto", "emailNotifications": "Email-уведомления", "emailNotificationsDesc": "Получать важные уведомления по email", "desktopNotifications": "Уведомления на рабочем столе", "desktopNotificationsDesc": "Получать уведомления в браузере", "notificationsDesc": "Управление настройками уведомлений", - "autoSave": "Автосохранение", - "autoSaveDesc": "Автоматически сохранять изменения во время ввода" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "Профиль", @@ -864,10 +866,10 @@ "preferredLanguage": "Предпочитаемый язык", "selectLanguage": "Выберите язык", "languageDescription": "Этот язык будет использоваться для функций на базе ИИ, анализа содержимого и текста интерфейса.", - "autoDetect": "Автоопределение", + "autoDetect": "Auto-detect", "updateSuccess": "Профиль обновлён", "updateFailed": "Не удалось обновить профиль", - "languageUpdateSuccess": "Язык успешно обновлён", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "Не удалось обновить язык", "profileUpdated": "Профиль обновлён", "profileError": "Ошибка обновления профиля", @@ -922,8 +924,8 @@ }, "general": { "loading": "Загрузка...", - "save": "Сохранить", - "cancel": "Отмена", + "save": "Save", + "cancel": "Cancel", "add": "Добавить", "edit": "Редактировать", "confirm": "Подтвердить", @@ -984,7 +986,7 @@ "createNew": "Создать новый блокнот", "createDescription": "Начните новую коллекцию для эффективной организации ваших заметок, идей и проектов.", "name": "Название блокнота", - "namePlaceholder": "напр. Маркетинговая стратегия Q4", + "namePlaceholder": "Notebook name", "myNotebook": "Мой блокнот", "saving": "Сохранение...", "selectIcon": "Значок", @@ -993,7 +995,7 @@ "creating": "Создание...", "edit": "Редактировать блокнот", "editDescription": "Измените название, значок и цвет вашего блокнота.", - "delete": "Удалить блокнот", + "delete": "Delete", "deleteWarning": "Вы уверены, что хотите удалить этот блокнот? Заметки будут перемещены в Общие заметки.", "deleteConfirm": "Удалить", "summary": "Сводка блокнота", @@ -1012,7 +1014,10 @@ "pinnedFrozenTooltip": "Прикрепленный блокнот — заказ заморожен", "organizeNotebookWithAITooltip": "Организуйте этот блокнот с помощью ИИ", "assistantRequiredForSummarize": "Включите AI Assistant в настройках, чтобы подводить итоги.", - "createSubnotebook": "Добавить субноутбук" + "createSubnotebook": "Добавить субноутбук", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "Переместить в {name}?", @@ -1430,20 +1435,22 @@ }, "appearance": { "title": "Внешний вид", - "description": "Настройте внешний вид приложения", + "description": "Customize the interface", "notesViewDescription": "Выберите, как отображаются заметки на главной странице и в блокнотах.", "notesViewLabel": "Макет заметок", "notesViewTabs": "Вкладки (в стиле OneNote)", "notesViewMasonry": "Карточки (сетка)", "notesViewList": "Список (журнал)", - "selectTheme": "Select theme", - "fontFamilyLabel": "Семейство шрифтов", - "fontFamilyDescription": "Выберите шрифт, используемый во всём приложении", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter оптимизирован для читаемости, Системный использует нативный шрифт вашей ОС", - "fontSystem": "Системный шрифт по умолчанию", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", - "fontJetBrainsMono": "JetBrains Mono" + "fontJetBrainsMono": "JetBrains Mono", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "General", @@ -1477,18 +1484,26 @@ }, "trash": { "title": "Корзина", - "empty": "Корзина пуста", - "emptyDescription": "Удалённые заметки появятся здесь", - "restore": "Восстановить", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "Удалить навсегда", "noteTrashed": "Заметка перемещена в корзину", "noteRestored": "Заметка восстановлена", "notePermanentlyDeleted": "Заметка удалена навсегда", "emptyTrash": "Очистить корзину", - "emptyTrashConfirm": "Удалить навсегда все заметки из корзины?", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "Корзина очищена", - "permanentDelete": "Удалить навсегда", - "permanentDeleteConfirm": "Эта заметка будет удалена навсегда. Это действие нельзя отменить." + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "Эта заметка будет удалена навсегда. Это действие нельзя отменить.", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "Конфиденциальность", @@ -1583,7 +1598,23 @@ "chinese": "китайский", "japanese": "японский" }, - "customPlaceholder": "например арабский, русский…" + "customPlaceholder": "например арабский, русский…", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "Неизвестно", @@ -1591,16 +1622,16 @@ "loading": "Загрузка...", "error": "Ошибка", "success": "Успешно", - "confirm": "Подтвердить", - "cancel": "Отмена", + "confirm": "Confirm", + "cancel": "Cancel", "close": "Закрыть", "save": "Сохранить", "delete": "Удалить", "edit": "Редактировать", "add": "Добавить", "remove": "Удалить", - "search": "Поиск", - "noResults": "Нет результатов", + "search": "Search...", + "noResults": "No notes found", "required": "Обязательно", "optional": "Необязательно" }, @@ -1982,7 +2013,9 @@ "searching": "Поиск...", "noNotesFoundForContext": "Не найдено заметок по этому вопросу. Ответьте, используя свои общие знания.", "webSearch": "Веб-поиск", - "timeoutWarning": "Response is taking longer than expected..." + "timeoutWarning": "Response is taking longer than expected...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "Лаборатория", @@ -2550,5 +2583,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file diff --git a/memento-note/locales/zh.json b/memento-note/locales/zh.json index f238b61..48e2be4 100644 --- a/memento-note/locales/zh.json +++ b/memento-note/locales/zh.json @@ -49,8 +49,8 @@ "sortOldest": "最老的在前", "sortAlpha": "A → Z", "accountMenu": "账户菜单", - "profile": "轮廓", - "signOut": "登出", + "profile": "Profile", + "signOut": "Sign out", "sortOrder": "排序顺序", "freezePinnedNotebook": "固定笔记本侧边栏顺序", "unfreezePinnedNotebook": "取消固定笔记本侧边栏顺序", @@ -58,14 +58,15 @@ "renameNotebook": "重命名", "sharedNotebookBadge": "· Shared", "sortManual": "自定义顺序", - "moveFailed": "移动笔记本失败", - "dropToRoot": "拖放到此处移至根级别" + "moveFailed": "Failed to move notebook", + "dropToRoot": "Drop here to move to root", + "noReminders": "No active reminders." }, "notes": { "title": "笔记", "newNote": "新建笔记", "reorganize": "重新整理笔记", - "untitled": "无标题", + "untitled": "Untitled", "placeholder": "记笔记...", "markdownPlaceholder": "记笔记...(支持 Markdown)", "titlePlaceholder": "标题", @@ -81,12 +82,12 @@ "add": "添加", "adding": "添加中...", "close": "关闭", - "confirmDelete": "确定要删除这条笔记吗?", + "confirmDelete": "Are you sure you want to delete this note?", "confirmLeaveShare": "确定要离开这条共享笔记吗?", "sharedBy": "共享者", "sharedShort": "共享", "leaveShare": "离开", - "delete": "删除", + "delete": "Delete", "archive": "归档", "unarchive": "取消归档", "pin": "置顶", @@ -127,7 +128,7 @@ "duplicate": "复制", "share": "共享", "showCollaborators": "显示协作者", - "pinned": "已置顶", + "pinned": "Note pinned", "others": "其他", "noNotes": "无笔记", "noNotesFound": "未找到笔记", @@ -159,8 +160,8 @@ "recent": "最近", "addNote": "添加笔记", "readMore": "阅读全文", - "remove": "移除", - "dragToReorder": "拖动以重新排序", + "remove": "Remove", + "dragToReorder": "Drag to reorder", "more": "更多", "emptyState": "暂无笔记", "metadataPanel": "细节", @@ -173,7 +174,7 @@ "improveFailed": "改进失败", "transformFailed": "转换失败", "markdown": "Markdown", - "unpinned": "未置顶", + "unpinned": "Note unpinned", "redoShortcut": "重做 (Ctrl+Y)", "undoShortcut": "撤销 (Ctrl+Z)", "reorderTabs": "重新排序标签页", @@ -751,7 +752,7 @@ "downloadFailed": "下载失败" }, "nav": { - "home": "主页", + "home": "Home", "notes": "笔记", "notebooks": "笔记本", "generalNotes": "普通笔记", @@ -761,7 +762,7 @@ "aiSettings": "AI 设置", "logout": "退出登录", "login": "登录", - "adminDashboard": "管理后台", + "adminDashboard": "Admin Dashboard", "diagnostics": "诊断", "trash": "回收站", "support": "支持 Memento ☕", @@ -786,7 +787,8 @@ "proPlan": "专业版", "chat": "AI 聊天", "lab": "实验室", - "agents": "代理" + "agents": "代理", + "sharedWithMe": "Shared with me" }, "settings": { "title": "设置", @@ -814,7 +816,7 @@ "security": "安全", "about": "关于", "version": "版本", - "settingsSaved": "设置已保存", + "settingsSaved": "Settings saved", "cardSizeMode": "Note Size", "cardSizeModeDescription": "Choose between variable sizes or uniform size", "selectCardSizeMode": "Select display mode", @@ -835,14 +837,14 @@ "semanticIndexingDescription": "为所有笔记生成向量以启用基于意图的搜索", "profile": "个人资料", "searchNoResults": "未找到匹配的设置", - "languageAuto": "自动检测", + "languageAuto": "Language set to Auto", "emailNotifications": "电子邮件通知", "emailNotificationsDesc": "通过电子邮件接收重要通知", "desktopNotifications": "桌面通知", "desktopNotificationsDesc": "在浏览器中接收通知", "notificationsDesc": "管理您的通知偏好", - "autoSave": "自动保存", - "autoSaveDesc": "键入时自动保存更改" + "autoSave": "Auto-save", + "autoSaveDesc": "Automatically save changes while typing" }, "profile": { "title": "个人资料", @@ -864,10 +866,10 @@ "preferredLanguage": "首选语言", "selectLanguage": "选择语言", "languageDescription": "此语言将用于 AI 驱动的功能、内容分析和界面文本。", - "autoDetect": "自动检测", + "autoDetect": "Auto-detect", "updateSuccess": "个人资料已更新", "updateFailed": "更新个人资料失败", - "languageUpdateSuccess": "语言更新成功", + "languageUpdateSuccess": "Language updated successfully", "languageUpdateFailed": "更新语言失败", "profileUpdated": "个人资料已更新", "profileError": "更新个人资料时出错", @@ -922,8 +924,8 @@ }, "general": { "loading": "加载中...", - "save": "保存", - "cancel": "取消", + "save": "Save", + "cancel": "Cancel", "add": "添加", "edit": "编辑", "confirm": "确认", @@ -984,7 +986,7 @@ "createNew": "创建新笔记本", "createDescription": "开始一个新的集合,高效地组织您的笔记、想法和项目。", "name": "笔记本名称", - "namePlaceholder": "例如:第四季度营销策略", + "namePlaceholder": "Notebook name", "myNotebook": "我的笔记本", "saving": "保存中...", "selectIcon": "图标", @@ -993,7 +995,7 @@ "creating": "创建中...", "edit": "编辑笔记本", "editDescription": "更改笔记本的名称、图标和颜色。", - "delete": "删除笔记本", + "delete": "Delete", "deleteWarning": "确定要删除此笔记本吗?笔记将被移动到普通笔记。", "deleteConfirm": "删除", "summary": "笔记本摘要", @@ -1012,7 +1014,10 @@ "pinnedFrozenTooltip": "固定笔记本 — 订单冻结", "organizeNotebookWithAITooltip": "用人工智能整理这个笔记本", "assistantRequiredForSummarize": "设置中开启AI助手进行总结", - "createSubnotebook": "添加子笔记本" + "createSubnotebook": "添加子笔记本", + "createSubNotebook": "Add sub-notebook", + "rename": "Rename", + "moveToTrash": "Move to trash" }, "notebookSuggestion": { "title": "移动到 {name}?", @@ -1430,20 +1435,22 @@ }, "appearance": { "title": "外观", - "description": "自定义应用的外观", + "description": "Customize the interface", "notesViewDescription": "选择笔记在主页和笔记本中的显示方式。", "notesViewLabel": "笔记布局", "notesViewTabs": "标签页(OneNote 风格)", "notesViewMasonry": "卡片(网格)", "notesViewList": "列表(杂志)", - "selectTheme": "Select theme", - "fontFamilyLabel": "字体系列", - "fontFamilyDescription": "选择应用程序中使用的字体", + "selectTheme": "Choose your preferred theme", + "fontFamilyLabel": "Font", + "fontFamilyDescription": "Choose the application's font", "selectFontFamily": "Inter 针对可读性进行了优化,系统使用您操作系统的原生字体", - "fontSystem": "系统默认字体", + "fontSystem": "System", "fontInterDefault": "Inter (default)", "fontPlayfairDisplay": "Playfair Display", - "fontJetBrainsMono": "JetBrains Mono" + "fontJetBrainsMono": "JetBrains Mono", + "accentColorTitle": "Accent Color", + "accentColorDescription": "Set the main color of your workspace" }, "generalSettings": { "title": "General", @@ -1477,18 +1484,26 @@ }, "trash": { "title": "回收站", - "empty": "回收站为空", - "emptyDescription": "已删除的笔记将显示在这里", - "restore": "恢复", + "empty": "Trash is empty", + "emptyDescription": "Deleted items will appear here. They are kept for 30 days before permanent deletion.", + "restore": "Restore", "deletePermanently": "永久删除", "noteTrashed": "笔记已移至回收站", "noteRestored": "笔记已恢复", "notePermanentlyDeleted": "笔记已永久删除", "emptyTrash": "清空回收站", - "emptyTrashConfirm": "确定永久删除回收站中的所有笔记?", + "emptyTrashConfirm": "Empty trash? This is irreversible.", "emptyTrashSuccess": "回收站已清空", - "permanentDelete": "永久删除", - "permanentDeleteConfirm": "此笔记将被永久删除,此操作无法撤销。" + "permanentDelete": "Delete permanently", + "permanentDeleteConfirm": "此笔记将被永久删除,此操作无法撤销。", + "restoreSuccess": "Restored successfully", + "restoreError": "Failed to restore", + "permanentDeleteSuccess": "Permanently deleted", + "deleteError": "Failed to delete", + "daysRemaining": "DAYS LEFT", + "notebookContentPreserved": "Notebook content preserved", + "notebookRestoreHint": "Restoring a notebook also restores all its notes.", + "filterAll": "All" }, "footer": { "privacy": "隐私", @@ -1583,7 +1598,23 @@ "chinese": "中国人", "japanese": "日本人" }, - "customPlaceholder": "例如阿拉伯语、俄语……" + "customPlaceholder": "例如阿拉伯语、俄语……", + "autoDetect": "Auto-detect", + "en": "English", + "fr": "Français", + "es": "Español", + "de": "Deutsch", + "fa": "فارسی", + "it": "Italiano", + "pt": "Português", + "ru": "Русский", + "zh": "中文", + "ja": "日本語", + "ko": "한국어", + "ar": "العربية", + "hi": "हिन्दी", + "nl": "Nederlands", + "pl": "Polski" }, "common": { "unknown": "未知", @@ -1591,16 +1622,16 @@ "loading": "加载中...", "error": "错误", "success": "成功", - "confirm": "确认", - "cancel": "取消", + "confirm": "Confirm", + "cancel": "Cancel", "close": "关闭", "save": "保存", "delete": "删除", "edit": "编辑", "add": "添加", "remove": "移除", - "search": "搜索", - "noResults": "无结果", + "search": "Search...", + "noResults": "No notes found", "required": "必填", "optional": "可选" }, @@ -1982,7 +2013,9 @@ "searching": "搜索中...", "noNotesFoundForContext": "未找到与此问题相关的笔记。请用你的常识回答。", "webSearch": "网络搜索", - "timeoutWarning": "Response is taking longer than expected..." + "timeoutWarning": "Response is taking longer than expected...", + "quotaExceededBasic": "AI Chat is available from the PRO plan onwards.", + "quotaExceededTier": "Monthly quota reached for {tier} plan. It will reset next month." }, "labHeader": { "title": "实验室", @@ -2550,5 +2583,13 @@ "link2Href": "#" } } + }, + "noteHistory": { + "title": "Title", + "content": "Content", + "untitled": "Untitled", + "emptyState": "No versions available", + "selectVersion": "Select a version to preview its content", + "currentVersion": "current" } -} +} \ No newline at end of file