Skip to content

Commit

Permalink
feat(i18n): added i18n base (#146)
Browse files Browse the repository at this point in the history
  • Loading branch information
CorentinTh authored Sep 15, 2024
1 parent 1cd0b90 commit 7c63756
Show file tree
Hide file tree
Showing 15 changed files with 533 additions and 109 deletions.
1 change: 1 addition & 0 deletions packages/app-client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"@corentinth/chisels": "^1.0.2",
"@enclosed/lib": "workspace:*",
"@kobalte/core": "^0.13.4",
"@solid-primitives/i18n": "^2.1.1",
"@solid-primitives/storage": "^4.2.1",
"@solidjs/router": "^0.14.3",
"@unocss/reset": "^0.62.2",
Expand Down
21 changes: 12 additions & 9 deletions packages/app-client/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { ColorModeProvider, ColorModeScript, createLocalStorageManager } from '@
import { Router } from '@solidjs/router';
import { render, Suspense } from 'solid-js/web';
import { ConfigProvider } from './modules/config/config.provider';
import { I18nProvider } from './modules/i18n/i18n.provider';
import { NoteContextProvider } from './modules/notes/notes.context';
import { routes } from './routes';
import '@unocss/reset/tailwind.css';
Expand All @@ -22,15 +23,17 @@ render(
root={props => (
<Suspense>
<ConfigProvider>
<NoteContextProvider>
<ColorModeScript storageType={localStorageManager.type} storageKey={colorModeStorageKey} initialColorMode={initialColorMode} />
<ColorModeProvider
initialColorMode={initialColorMode}
storageManager={localStorageManager}
>
<div class="min-h-screen font-sans text-sm font-400">{props.children}</div>
</ColorModeProvider>
</NoteContextProvider>
<I18nProvider>
<NoteContextProvider>
<ColorModeScript storageType={localStorageManager.type} storageKey={colorModeStorageKey} initialColorMode={initialColorMode} />
<ColorModeProvider
initialColorMode={initialColorMode}
storageManager={localStorageManager}
>
<div class="min-h-screen font-sans text-sm font-400">{props.children}</div>
</ColorModeProvider>
</NoteContextProvider>
</I18nProvider>
</ConfigProvider>
</Suspense>
)}
Expand Down
133 changes: 133 additions & 0 deletions packages/app-client/src/locales/en.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
{
"app": {
"title": "Enclosed",
"description": "Send private and secure notes"
},
"navbar": {
"new-note": "New note",
"theme": {
"light-mode": "Light mode",
"dark-mode": "Dark mode",
"system-mode": "System"
},
"settings": {
"documentation": "Documentation",
"cli": "Enclosed CLI",
"support": "Support Enclosed",
"report-bug": "Report a bug",
"logout": "Logout",
"contribute-to-i18n": "Contribute to i18n"
}
},
"footer": {
"crafted-by": "Crafted by",
"source-code": "Source code available on",
"github": "GitHub",
"version": "Version"
},
"login": {
"title": "Login to Enclosed",
"description": "This is a private instance of Enclosed. Enter your credentials to be able to create notes.",
"email": "Email",
"password": "Password",
"submit": "Login",
"errors": {
"invalid-credentials": "Invalid email or password.",
"unknown": "An unknown error occurred. Please try again later."
},
"footer": [
"Don't have an account?",
"Contact the owner of the instance."
]
},
"create": {
"errors": {
"empty-note": "Please enter a note content or attach a file.",
"rate-limit": "You have exceeded the rate limit for creating notes. Please try again later.",
"too-large": "The note content and attachments are too large. Please reduce the size and try again.",
"unauthorized": "You are not authorized to create notes. Please login and try again.",
"unknown": "An error occurred while creating the note, please try again."
},
"share": {
"button": "Share note",
"title": "Shared note",
"description": "Here is a note shared with you."
},
"settings": {
"placeholder": "Type your note here...",
"password": {
"label": "Note password",
"placeholder": "Password..."
},
"expiration": "Expiration delay",
"delays": {
"1h": "1 hour",
"1d": "1 day",
"1w": "1 week",
"1m": "1 month"
},
"delete-after-reading": {
"label": "Delete after reading",
"description": "Delete the note after reading"
},
"attach-files": "Attach files",
"drop-files": {
"title": "Drop files here",
"description": "Drag and drop files here to attach them to the note"
},
"create": "Create note"
},
"success": {
"title": "Note created successfully",
"description": "Your note has been created. You can now share it using the following link.",
"with-deletion": "The note will be deleted after reading.",
"copy-link": "Copy link",
"copy-success": "Link copied"
}
},
"view": {
"note-content": "Note content",
"download": "Download",
"download-all": "Download all files",
"request-password": {
"description": "This note is password protected. Please enter the password to unlock it.",
"form": {
"label": "Password",
"placeholder": "Note password...",
"unlock-button": "Unlock note",
"invalid": "The password you entered is invalid or the note URL is incorrect."
}
},
"error": {
"invalid-url": {
"title": "Invalid note URL",
"description": "This note URL is invalid. Please make sure you are using the correct URL."
},
"rate-limit": {
"title": "Rate limit exceeded",
"description": "You have exceeded the rate limit for fetching notes. Please try again later."
},
"unauthorized": {
"title": "Unauthorized",
"description": "This note is private. You need to be logged in to view it.",
"button": "Log in"
},
"note-not-found": {
"title": "Note not found",
"description": "This note does not exist, has expired, or has been deleted."
},
"fetch-error": {
"title": "An error occurred",
"description": "An error occurred while fetching the note. Please try again later."
},
"decryption": {
"title": "An error occurred",
"description": "An error occurred while decrypting the note. The url may be invalid."
}
}
},
"copy": {
"label": "Copy to clipboard",
"success": "Copied!"
}
}
134 changes: 134 additions & 0 deletions packages/app-client/src/locales/fr.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
{
"app": {
"title": "Enclosed",
"description": "Envoyez des notes privées et sécurisées"
},
"navbar": {
"new-note": "Nouvelle note",
"theme": {
"light-mode": "Mode clair",
"dark-mode": "Mode sombre",
"system-mode": "Mode système"
},
"settings": {
"documentation": "Documentation",
"cli": "Enclosed CLI",
"support": "Soutenir Enclosed",
"report-bug": "Signaler un bug",
"logout": "Se déconnecter",
"contribute-to-i18n": "Contribuer à l'i18n"
}
},
"footer": {
"crafted-by": "Créé par",
"source-code": "Code source disponible sur",
"github": "GitHub",
"version": "Version"
},
"login": {
"title": "Connexion à Enclosed",
"description": "Ceci est une instance privée de Enclosed. Entrez vos identifiants pour pouvoir créer des notes.",
"email": "Email",
"password": "Mot de passe",
"submit": "Se connecter",
"errors": {
"invalid-credentials": "Email ou mot de passe invalide.",
"unknown": "Une erreur inconnue est survenue. Veuillez réessayer plus tard."
},
"footer": [
"Vous n'avez pas de compte ?",
"Contactez le propriétaire de l'instance."
]
},
"create": {
"errors": {
"empty-note": "Veuillez entrer le contenu d'une note ou joindre un fichier.",
"rate-limit": "Vous avez dépassé la limite de création de notes. Veuillez réessayer plus tard.",
"too-large": "Le contenu de la note et les pièces jointes sont trop volumineux. Veuillez réduire la taille et réessayer.",
"unauthorized": "Vous n'êtes pas autorisé à créer des notes. Veuillez vous connecter et réessayer.",
"unknown": "Une erreur est survenue lors de la création de la note, veuillez réessayer."
},
"share": {
"button": "Partager la note",
"title": "Note partagée",
"description": "Voici une note partagée avec vous."
},
"settings": {
"placeholder": "Saisissez votre note ici...",
"password": {
"label": "Mot de passe de la note",
"placeholder": "Mot de passe..."
},
"expiration": "Délai d'expiration",
"delays": {
"1h": "1 heure",
"1d": "1 jour",
"1w": "1 semaine",
"1m": "1 mois"
},
"delete-after-reading": {
"label": "Supprimer après lecture",
"description": "Supprimer la note après lecture"
},
"attach-files": "Joindre des fichiers",
"drop-files": {
"title": "Déposez les fichiers ici",
"description": "Glissez et déposez les fichiers ici pour les joindre à la note"
},
"create": "Créer une note"
},
"success": {
"title": "Note créée avec succès",
"description": "Votre note a été créée. Vous pouvez maintenant la partager à l'aide du lien suivant.",
"with-deletion": "La note sera supprimée après lecture.",
"copy-link": "Copier le lien",
"copy-success": "Lien copié"
}
},
"view": {
"note-content": "Contenu de la note",
"download": "Télécharger",
"download-all": "Télécharger tous les fichiers",
"request-password": {
"description": "Cette note est protégée par un mot de passe. Veuillez entrer le mot de passe pour la déverrouiller.",
"form": {
"label": "Mot de passe",
"placeholder": "Mot de passe de la note...",
"unlock-button": "Déverrouiller la note",
"invalid": "Le mot de passe que vous avez entré est incorrect ou l'URL de la note est incorrecte."
}
},
"error": {

"invalid-url": {
"title": "URL de note invalide",
"description": "Cette URL de note est invalide. Veuillez vous assurer d'utiliser la bonne URL."
},
"rate-limit": {
"title": "Limite de taux dépassée",
"description": "Vous avez dépassé la limite de taux pour récupérer des notes. Veuillez réessayer plus tard."
},
"unauthorized": {
"title": "Non autorisé",
"description": "Cette note est privée. Vous devez être connecté pour la voir.",
"button": "Se connecter"
},
"note-not-found": {
"title": "Note introuvable",
"description": "Cette note n'existe pas, a expiré ou a été supprimée."
},
"fetch-error": {
"title": "Une erreur s'est produite",
"description": "Une erreur s'est produite lors de la récupération de la note. Veuillez réessayer plus tard."
},
"decryption": {
"title": "Une erreur s'est produite",
"description": "Une erreur s'est produite lors du déchiffrement de la note. L'URL peut être invalide."
}
}
},
"copy": {
"label": "Copier",
"success": "Copié!"
}
}
Loading

0 comments on commit 7c63756

Please sign in to comment.