diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 79b2974..e21c7e7 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -112,6 +112,46 @@
"openAIVersionSaved": {
"title": "saved",
"message": "Your OpenAI Version has been saved."
- }
+ },
+ "newChatFromPrompt": "New Chat From Prompt",
+ "copied": "Copied",
+ "copy": "Copy",
+ "words": "words",
+ "editPrompt": "Edit Prompt",
+ "promptUpdated": {
+ "title": "saved",
+ "message": "Prompt updated"
+ },
+ "editChat": "Edit Chat",
+ "chatUpdated": {
+ "title": "saved",
+ "message": "Chat updated"
+ },
+ "name": "Name",
+ "deleteAllData": "Delete All Data",
+ "confirmDeleteAllData": "Are you sure you want to delete your data?",
+ "messages": "Messages",
+ "exportingData" : {
+ "title": "Exporting Data",
+ "message": "Your data is being exported."
+ },
+ "exportData": "Export Data",
+ "importingData" : {
+ "title": "Import Data",
+ "message": "Your data is being imported."
+ },
+ "importData": "Import Data",
+ "selectedFileError": {
+ "title": "Error",
+ "message": "The file you selected is invalid"
+ },
+ "edit": "Edit",
+ "promptDeleted": "Prompt deleted.",
+ "removePromptError": {
+ "title": "Error",
+ "message": "Can't remove prompt. Please refresh the page and try again."
+ },
+ "deletePrompt": "Delete Prompt",
+ "confirmDeletePrompt": "Are you sure you want to delete this prompt?"
}
}
\ No newline at end of file
diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json
index 03cd2e0..f49e475 100644
--- a/src/assets/i18n/fr.json
+++ b/src/assets/i18n/fr.json
@@ -112,6 +112,46 @@
"openAIVersionSaved": {
"title": "Sauvegardé",
"message": "Votre version OpenAI a été enregistrée."
- }
+ },
+ "newChatFromPrompt": "Nouvelle conversattion à partir du prompt",
+ "copied": "Copié !",
+ "copy": "Copier",
+ "words": "mots",
+ "editPrompt": "Modifier le prompt",
+ "promptUpdated": {
+ "title": "Sauvegardé",
+ "message": "Prompt enregistré"
+ },
+ "editChat": "Modifier la conversation",
+ "chatUpdated": {
+ "title": "Sauvegardé",
+ "message": "Conversation enregistrée"
+ },
+ "name": "Nom",
+ "deleteAllData": "Supprimer toutes les données",
+ "confirmDeleteAllData": "Êtes-vous sûr de vouloir effacer toutes vos données ?",
+ "messages": "Messages",
+ "exportingData" : {
+ "title": "Exportation de données",
+ "message": "Vos données sont en cours d'exportation."
+ },
+ "exportData": "Exporter les données",
+ "importingData" : {
+ "title": "Importation de données",
+ "message": "Vos données sont en cours d'importation."
+ },
+ "importData": "Importer les données",
+ "selectedFileError": {
+ "title": "Erreur",
+ "message": "Le fichier sélectionné n'est pas valide"
+ },
+ "edit": "Modifier",
+ "promptDeleted": "Prompt supprimée.",
+ "removePromptError": {
+ "title": "Erreur",
+ "message": "Impossible de supprimer le prompt. Veuillez rafraîchir la page et réessayer."
+ },
+ "deletePrompt": "Supprimer le prompt",
+ "confirmDeletePrompt": "Êtes-vous sûr de vouloir supprimer ce prompt ?"
}
}
\ No newline at end of file
diff --git a/src/components/Chats.tsx b/src/components/Chats.tsx
index 5f15bf0..d6b927d 100644
--- a/src/components/Chats.tsx
+++ b/src/components/Chats.tsx
@@ -8,6 +8,8 @@ import { useChatId } from "../hooks/useChatId";
import { DeleteChatModal } from "./DeleteChatModal";
import { EditChatModal } from "./EditChatModal";
import { MainLink } from "./MainLink";
+import '../i18n'
+import {t} from "i18next";
export function Chats({ search }: { search: string }) {
const chatId = useChatId();
@@ -55,10 +57,10 @@ export function Chats({ search }: { search: string }) {
- Edit
+ {t('edit')}
- Delete
+ {t('delete')}
diff --git a/src/components/DatabaseModal.tsx b/src/components/DatabaseModal.tsx
index 513e641..7411064 100644
--- a/src/components/DatabaseModal.tsx
+++ b/src/components/DatabaseModal.tsx
@@ -8,6 +8,8 @@ import { cloneElement, ReactElement } from "react";
import { db } from "../db";
import { DeleteAllDataModal } from "./DeleteAllDataModal";
import { DeleteChatsModal } from "./DeleteChatsModal";
+import '../i18n'
+import {t} from "i18next";
export function DatabaseModal({ children }: { children: ReactElement }) {
const [opened, { open, close }] = useDisclosure(false);
@@ -27,7 +29,7 @@ export function DatabaseModal({ children }: { children: ReactElement }) {
- Chats
+ {t('chats')}
@@ -59,7 +61,7 @@ export function DatabaseModal({ children }: { children: ReactElement }) {
tt="uppercase"
fw={700}
>
- Messages
+ {t('messages')}
@@ -73,7 +75,7 @@ export function DatabaseModal({ children }: { children: ReactElement }) {
tt="uppercase"
fw={700}
>
- Prompts
+ {t('prompts')}
@@ -89,12 +91,12 @@ export function DatabaseModal({ children }: { children: ReactElement }) {
"application/json"
);
notifications.show({
- title: "Exporting Data",
- message: "Your data is being exported.",
+ title: t('exportingData.title'),
+ message: t('exportingData.message'),
});
}}
>
- Export Data
+ {t('exportData')}
{
notifications.show({
- title: "Importing data",
- message: "Your data is being imported.",
+ title: t('importingData.title'),
+ message: t('importingData.message'),
});
})
.catch((error) => {
notifications.show({
- title: "Error",
+ title: t('selectedFileError.title'),
color: "red",
- message: "The file you selected is invalid",
+ message: t('selectedFileError.message'),
});
});
}}
@@ -131,7 +133,7 @@ export function DatabaseModal({ children }: { children: ReactElement }) {
variant="default"
leftIcon={}
>
- Import Data
+ {t('importData')}
diff --git a/src/components/DeleteAllDataModal.tsx b/src/components/DeleteAllDataModal.tsx
index 9b4cde6..c78bd20 100644
--- a/src/components/DeleteAllDataModal.tsx
+++ b/src/components/DeleteAllDataModal.tsx
@@ -2,6 +2,8 @@ import { Button, Modal, Stack, Text } from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
import { IconTrash } from "@tabler/icons-react";
import { db } from "../db";
+import '../i18n'
+import {t} from "i18next";
export function DeleteAllDataModal({ onOpen }: { onOpen: () => void }) {
const [opened, { open, close }] = useDisclosure(false, { onOpen });
@@ -14,17 +16,17 @@ export function DeleteAllDataModal({ onOpen }: { onOpen: () => void }) {
color="red"
leftIcon={}
>
- Delete All Data
+ {t('deleteAllData')}
- Are you sure you want to delete your data?
+ {t('confirmDeleteAllData')}
diff --git a/src/components/DeleteChatsModal.tsx b/src/components/DeleteChatsModal.tsx
index 893afa4..28ffc26 100644
--- a/src/components/DeleteChatsModal.tsx
+++ b/src/components/DeleteChatsModal.tsx
@@ -15,18 +15,18 @@ export function DeleteChatsModal({ onOpen }: { onOpen: () => void }) {
variant="outline"
color="red"
leftIcon={}
- >"
- {t("deleteChats")}
+ >
+ {t('deleteChats')}
- {t("confirmDeleteChats")}
+ {t('confirmDeleteChats')}
diff --git a/src/components/DeletePromptModal.tsx b/src/components/DeletePromptModal.tsx
index 31a2a5c..8252668 100644
--- a/src/components/DeletePromptModal.tsx
+++ b/src/components/DeletePromptModal.tsx
@@ -7,6 +7,9 @@ import { useEffect, useState } from "react";
import { db, Prompt } from "../db";
import { useApiKey } from "../hooks/useApiKey";
import { useChatId } from "../hooks/useChatId";
+import '../i18n'
+import {t} from "i18next";
+import * as tty from "tty";
export function DeletePromptModal({ prompt }: { prompt: Prompt }) {
const [opened, { open, close }] = useDisclosure(false);
@@ -23,7 +26,7 @@ export function DeletePromptModal({ prompt }: { prompt: Prompt }) {
return (
<>
-
+
-
+
diff --git a/src/components/EditChatModal.tsx b/src/components/EditChatModal.tsx
index d4347fa..d9bd3b2 100644
--- a/src/components/EditChatModal.tsx
+++ b/src/components/EditChatModal.tsx
@@ -3,6 +3,8 @@ import { useDisclosure } from "@mantine/hooks";
import { notifications } from "@mantine/notifications";
import { cloneElement, ReactElement, useEffect, useState } from "react";
import { Chat, db } from "../db";
+import '../i18n'
+import {t} from "i18next";
export function EditChatModal({
chat,
@@ -22,7 +24,7 @@ export function EditChatModal({
return (
<>
{cloneElement(children, { onClick: open })}
-
+
diff --git a/src/components/EditPromptModal.tsx b/src/components/EditPromptModal.tsx
index dc33961..ed1b452 100644
--- a/src/components/EditPromptModal.tsx
+++ b/src/components/EditPromptModal.tsx
@@ -12,6 +12,8 @@ import { notifications } from "@mantine/notifications";
import { IconPencil } from "@tabler/icons-react";
import { useEffect, useState } from "react";
import { db, Prompt } from "../db";
+import '../i18n'
+import {t} from "i18next";
export function EditPromptModal({ prompt }: { prompt: Prompt }) {
const [opened, { open, close }] = useDisclosure(false);
@@ -26,7 +28,7 @@ export function EditPromptModal({ prompt }: { prompt: Prompt }) {
return (
<>
-
+
-
+
diff --git a/src/components/MessageItem.tsx b/src/components/MessageItem.tsx
index f3d5bc3..b5137ce 100644
--- a/src/components/MessageItem.tsx
+++ b/src/components/MessageItem.tsx
@@ -20,6 +20,8 @@ import "../styles/markdown.scss";
import { CreatePromptModal } from "./CreatePromptModal";
import { LogoIcon } from "./Logo";
import { ScrollIntoView } from "./ScrollIntoView";
+import '../i18n'
+import {t} from "i18next";
export function MessageItem({ message }: { message: Message }) {
const clipboard = useClipboard({ timeout: 500 });
@@ -55,7 +57,7 @@ export function MessageItem({ message }: { message: Message }) {
{({ copied, copy }) => (
- {wordCount} words
+ {wordCount} {t('words')}
)}
@@ -83,18 +85,13 @@ export function MessageItem({ message }: { message: Message }) {
{({ copied, copy }) => (
-
+
)}
- {/*
-
-
-
- */}
diff --git a/src/components/Prompts.tsx b/src/components/Prompts.tsx
index b2fa622..73b552a 100644
--- a/src/components/Prompts.tsx
+++ b/src/components/Prompts.tsx
@@ -8,6 +8,8 @@ import { db } from "../db";
import { createChatCompletion } from "../utils/openai";
import { DeletePromptModal } from "./DeletePromptModal";
import { EditPromptModal } from "./EditPromptModal";
+import '../i18n'
+import {t} from "i18next";
export function Prompts({
onPlay,
@@ -80,7 +82,7 @@ export function Prompts({
-
+
{
@@ -88,7 +90,7 @@ export function Prompts({
const id = nanoid();
await db.chats.add({
id,
- description: "New Chat",
+ description: t('newChat'),
totalTokens: 0,
createdAt: new Date(),
});
@@ -105,8 +107,7 @@ export function Prompts({
const result = await createChatCompletion(apiKey, [
{
role: "system",
- content:
- "You are ChatGPT, a large language model trained by OpenAI.",
+ content: t('youAreChatGPT'),
},
{ role: "user", content: prompt.content },
]);