feat: update sentry (#3326)

# Description

Please include a summary of the changes and the related issue. Please
also include relevant motivation and context.

## Checklist before requesting a review

Please delete options that are not relevant.

- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my code
- [ ] I have commented hard-to-understand areas
- [ ] I have ideally added tests that prove my fix is effective or that
my feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged

## Screenshots (if appropriate):
This commit is contained in:
Stan Girard 2024-10-05 10:55:40 +02:00 committed by GitHub
parent 306285bafa
commit 3d9cbe5cea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
123 changed files with 2752 additions and 993 deletions

3
frontend/.gitignore vendored
View File

@ -45,3 +45,6 @@ next-env.d.ts
# Sentry Config File
.sentryclirc
# Sentry Config File
.env.sentry-build-plugin

View File

@ -34,6 +34,7 @@ ARG NEXT_PUBLIC_SHOW_TOKENS
ARG NEXT_PUBLIC_PROJECT_NAME
ARG NEXT_PUBLIC_POSTHOG_KEY
ARG NEXT_PUBLIC_POSTHOG_HOST
ARG SENTRY_AUTH_TOKEN
ENV NEXT_PUBLIC_ENV=$NEXT_PUBLIC_ENV
ENV NEXT_PUBLIC_BACKEND_URL=$NEXT_PUBLIC_BACKEND_URL
@ -46,7 +47,7 @@ ENV NEXT_PUBLIC_SHOW_TOKENS=$NEXT_PUBLIC_SHOW_TOKENS
ENV NEXT_PUBLIC_PROJECT_NAME=$NEXT_PUBLIC_PROJECT_NAME
ENV NEXT_PUBLIC_POSTHOG_KEY=$NEXT_PUBLIC_POSTHOG_KEY
ENV NEXT_PUBLIC_POSTHOG_HOST=$NEXT_PUBLIC_POSTHOG_HOST
ENV SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
@ -98,6 +99,8 @@ ARG NEXT_PUBLIC_POSTHOG_KEY
ENV NEXT_PUBLIC_POSTHOG_KEY=$NEXT_PUBLIC_POSTHOG_KEY
ARG NEXT_PUBLIC_POSTHOG_HOST
ENV NEXT_PUBLIC_POSTHOG_HOST=$NEXT_PUBLIC_POSTHOG_HOST
ARG SENTRY_AUTH_TOKEN
ENV SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN
# server.js is created by next build from the standalone output
# https://nextjs.org/docs/pages/api-reference/next-config-js/output

View File

@ -1,23 +1,22 @@
version: v2
name: quivr-demo-front
services:
- name: quivr-frontend
run: ""
type: web
instances: 1
cpuCores: 0.2
ramMegabytes: 240
terminationGracePeriodSeconds: 30
port: 3000
domains:
- name: demo.quivr.app
sleep: false
- name: quivr-frontend
run: ""
type: web
instances: 1
cpuCores: 0.2
ramMegabytes: 240
terminationGracePeriodSeconds: 30
port: 3000
domains:
- name: demo.quivr.app
sleep: false
build:
context: ./frontend
method: docker
dockerfile: ./frontend/Dockerfile
envGroups:
- preview-frontend
- preview-frontend
autoRollback:
enabled: false

View File

@ -14,9 +14,9 @@ export const useAzureLogin = (): {
const signInWithAzure = async () => {
setIsPending(true);
const { error } = await supabase.auth.signInWithOAuth({
provider: 'azure',
provider: "azure",
options: {
scopes: 'email',
scopes: "email",
},
});
setIsPending(false);
@ -32,4 +32,4 @@ export const useAzureLogin = (): {
signInWithAzure,
isPending,
};
};
};

View File

@ -43,4 +43,4 @@
font-size: Typography.$tiny;
}
}
}
}

View File

@ -1,16 +1,16 @@
.ProseMirror p.is-editor-empty:first-child::before {
content: attr(data-placeholder);
float: left;
color: #adb5bd;
pointer-events: none;
height: 0;
content: attr(data-placeholder);
float: left;
color: #adb5bd;
pointer-events: none;
height: 0;
}
.ProseMirror * {
white-space: pre-wrap;
word-wrap: break-word;
white-space: pre-wrap;
word-wrap: break-word;
}
.mention {
display: none;
}
display: none;
}

View File

@ -4,21 +4,18 @@ import { LuArrowLeftFromLine } from "react-icons/lu";
import { useMenuContext } from "@/lib/context/MenuProvider/hooks/useMenuContext";
import { useDevice } from "@/lib/hooks/useDevice";
import styles from './MenuControlButton.module.scss';
import styles from "./MenuControlButton.module.scss";
export const MenuControlButton = (): JSX.Element => {
const { isOpened, setIsOpened } = useMenuContext();
const { isMobile } = useDevice();
const Icon = isOpened ? LuArrowLeftFromLine : GiHamburgerMenu;
const { isOpened, setIsOpened } = useMenuContext();
const { isMobile } = useDevice();
const Icon = isOpened ? LuArrowLeftFromLine : GiHamburgerMenu;
if (isOpened && isMobile) {
return <></>;
}
if (isOpened && isMobile) {
return <></>;
}
return (
<Icon
className={styles.menu_icon}
onClick={() => setIsOpened(!isOpened)}
/>
);
return (
<Icon className={styles.menu_icon} onClick={() => setIsOpened(!isOpened)} />
);
};

View File

@ -11,7 +11,7 @@ export const FileLine = ({
name,
selectable,
id,
icon
icon,
}: FileLineProps): JSX.Element => {
return (
<SyncElementLine
@ -19,7 +19,7 @@ export const FileLine = ({
selectable={selectable}
id={id}
isFolder={false}
icon= {icon}
icon={icon}
/>
);
};

View File

@ -1,3 +1,3 @@
* {
white-space: pre-line;
}
white-space: pre-line;
}

View File

@ -27,4 +27,4 @@
}
}
}
}
}

View File

@ -1,60 +1,60 @@
:root {
--white-0: #fcfcfc;
--white-1: #f8f8f8;
--white-2: #f4f4f4;
--white-0: #fcfcfc;
--white-1: #f8f8f8;
--white-2: #f4f4f4;
/* Black */
--black-0: #1f1f1f;
--black-1: #252525;
--black-2: #2b2b2b;
--black-3: #313131;
--black-4: #373737;
--black-5: #3d3d3d;
--black-6: #434343;
--black-7: #494949;
/* Black */
--black-0: #1f1f1f;
--black-1: #252525;
--black-2: #2b2b2b;
--black-3: #313131;
--black-4: #373737;
--black-5: #3d3d3d;
--black-6: #434343;
--black-7: #494949;
/* Grey */
--grey-O: #707070;
--grey-1: #818080;
--grey-2: #c8c8c8;
--grey-3: #cbcbcb;
--grey-4: #e7e9ec;
--grey-5: #d3d3d3;
--grey-6: #f5f5f5;
/* Grey */
--grey-O: #707070;
--grey-1: #818080;
--grey-2: #c8c8c8;
--grey-3: #cbcbcb;
--grey-4: #e7e9ec;
--grey-5: #d3d3d3;
--grey-6: #f5f5f5;
/* Primary */
--primary-0: #6142d4;
--primary-1: #d0c6f2;
--primary-2: #f5f3fd;
/* Primary */
--primary-0: #6142d4;
--primary-1: #d0c6f2;
--primary-2: #f5f3fd;
/* Accent */
--accent: #13abba;
/* Gold */
--gold: #b8860b;
--gold-lightest: #f0ebdd;;
/* Error */
--dangerous-dark: #e30c17;
--dangerous: #9b373c;
--dangerous-lightest: #eedddd;
/* Warning */
--warning: #c77d33;
--warning-lightest: #f2e9e0;
/* Success */
--success: #47a455;
--success-lightest: #d0edd4;
/* Accent */
--accent: #13abba;
/* Code */
--code-yellow: #e6db74;
--code-grey: #f8f8f2;
--code-green: #a6e22e;
--code-purple: #ae81ff;
--code-red: #f92672;
--code-dark-grey: #f8f8f2;
--code-very-dark-grey: #75715e;
--code-blue: #66d9ef;
--code-orange: #fd971f;
}
/* Gold */
--gold: #b8860b;
--gold-lightest: #f0ebdd;
/* Error */
--dangerous-dark: #e30c17;
--dangerous: #9b373c;
--dangerous-lightest: #eedddd;
/* Warning */
--warning: #c77d33;
--warning-lightest: #f2e9e0;
/* Success */
--success: #47a455;
--success-lightest: #d0edd4;
/* Code */
--code-yellow: #e6db74;
--code-grey: #f8f8f2;
--code-green: #a6e22e;
--code-purple: #ae81ff;
--code-red: #f92672;
--code-dark-grey: #f8f8f2;
--code-very-dark-grey: #75715e;
--code-blue: #66d9ef;
--code-orange: #fd971f;
}

View File

@ -1,9 +1,7 @@
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
@import './colors.css';
@import "./colors.css";
main {
@apply max-w-screen-xl mx-auto flex flex-col;
@ -101,18 +99,18 @@ body.dark_mode {
--background-success: var(--black-5);
--background-error: var(--black-5);
--background-pending: var(--black-5);
/* Borders */
--border-0: var(--black-5);
--border-1: var(--black-6);
--border-2: var(--black-7);
/* Icons */
--icon-0: var(--black-0);
--icon-1: var(--grey-0);
--icon-2: var(--grey-2);
--icon-3: var(--white-0);
/* Text */
--text-0: var(--black-0);
--text-1: var(--grey-0);
@ -142,7 +140,7 @@ body.dark_mode {
.token.constant,
.token.symbol,
.token.deleted {
color: var(--code-red);
color: var(--code-red);
}
.token.boolean,
@ -156,7 +154,7 @@ body.dark_mode {
.token.char,
.token.builtin,
.token.inserted {
color: var(--code-green);
color: var(--code-green);
}
.token.operator,
@ -165,7 +163,7 @@ body.dark_mode {
.language-css .token.string,
.style .token.string,
.token.variable {
color: var(--code-grey);
color: var(--code-grey);
}
.token.atrule,
@ -176,7 +174,7 @@ body.dark_mode {
}
.token.keyword {
color: var(--code-blue);
color: var(--code-blue);
}
.token.regex,
@ -206,7 +204,7 @@ body.dark_mode {
}
.EmojiPickerReact.epr-dark-theme {
--epr-emoji-size: 20px !important;
--epr-emoji-size: 20px !important;
--epr-hover-bg-color: var(--primary-1) !important;
--epr-category-navigation-button-size: 24px !important;
--epr-category-label-bg-color: var(--background-0) !important;
@ -231,4 +229,4 @@ body.dark_mode {
.react-colorful__saturation {
border-radius: 0 !important;
}
}

View File

@ -11,7 +11,7 @@ import { redirectToLogin } from "@/lib/router/redirectToLogin";
import { useInvitation } from "./hooks/useInvitation";
const InvitationPage = (): JSX.Element => {
const { t } = useTranslation('invitation');
const { t } = useTranslation("invitation");
const {
handleAccept,
isProcessingRequest,
@ -40,13 +40,15 @@ const InvitationPage = (): JSX.Element => {
return (
<main className="pt-10">
<PageHeading
title={t("wellcome",{brain: brainName, ns: "invitation"})}
subtitle={t("invitationMessage",{role: role, ns: "invitation"})}
title={t("wellcome", { brain: brainName, ns: "invitation" })}
subtitle={t("invitationMessage", { role: role, ns: "invitation" })}
/>
{isProcessingRequest ? (
<div className="flex flex-col items-center justify-center mt-5">
<Spinner />
<p className="text-center">{t("processingRequest",{ns: "invitation"})}</p>
<p className="text-center">
{t("processingRequest", { ns: "invitation" })}
</p>
</div>
) : (
<div className="flex flex-col items-center justify-center gap-5 mt-5">
@ -55,14 +57,14 @@ const InvitationPage = (): JSX.Element => {
variant={"secondary"}
className="py-3"
>
{t("accept",{ns: "invitation"})}
{t("accept", { ns: "invitation" })}
</Button>
<Button
onClick={() => void handleDecline()}
variant={"danger"}
className="py-3"
>
{t("reject",{ns: "invitation"})}
{t("reject", { ns: "invitation" })}
</Button>
</div>
)}

View File

@ -23,7 +23,6 @@ import styles from "./page.module.scss";
const projectName = process.env.NEXT_PUBLIC_PROJECT_NAME;
const Search = (): JSX.Element => {
const [selectedTab, setSelectedTab] = useState("Models");
const [isNewBrain, setIsNewBrain] = useState(false);
@ -113,7 +112,9 @@ const Search = (): JSX.Element => {
<QuivrLogo size={80} color={isDarkMode ? "white" : "black"} />
<div className={styles.quivr_text}>
<span>Talk to </span>
<span className={styles.quivr_text_primary}>{projectName ? projectName : "Quivr"}</span>
<span className={styles.quivr_text_primary}>
{projectName ? projectName : "Quivr"}
</span>
</div>
</div>
<div className={styles.search_bar_wrapper}>

View File

@ -10,4 +10,4 @@
.search_brain {
width: 250px;
}
}
}

View File

@ -6,4 +6,4 @@
@media (max-width: ScreenSizes.$small) {
width: 100%;
}
}
}

View File

@ -6,7 +6,7 @@ import { UserStats } from "../../../lib/types/User";
export const BrainConsumption = (userStats: UserStats): JSX.Element => {
const { current_brain_size, max_brain_size } = userStats;
const brainFilling = current_brain_size / max_brain_size;
const { t } = useTranslation(["translation","user"]);
const { t } = useTranslation(["translation", "user"]);
const backgroundIcon = (
<GiBrain
@ -42,7 +42,7 @@ export const BrainConsumption = (userStats: UserStats): JSX.Element => {
{/* Percentage of brain space left */}
{(100 - brainFilling * 100).toFixed(2)}%{" "}
</span>
<span className="text-sm opacity-50">{t("empty", {ns: "user"})}</span>
<span className="text-sm opacity-50">{t("empty", { ns: "user" })}</span>
</div>
</div>
);

View File

@ -3,4 +3,4 @@
.response_wrapper {
display: flex;
gap: Spacings.$spacing03;
}
}

View File

@ -30,4 +30,4 @@
display: flex;
justify-content: space-between;
}
}
}

View File

@ -0,0 +1,13 @@
import * as Sentry from "@sentry/nextjs";
export async function register() {
if (process.env.NEXT_RUNTIME === "nodejs") {
await import("./sentry.server.config");
}
if (process.env.NEXT_RUNTIME === "edge") {
await import("./sentry.edge.config");
}
}
export const onRequestError = Sentry.captureRequestError;

View File

@ -57,7 +57,7 @@ export const syncNotion = async (
`/sync/notion/authorize?name=${name}`
)
).data;
}
};
export const getUserSyncs = async (
axiosInstance: AxiosInstance

View File

@ -13,7 +13,7 @@ import {
syncGoogleDrive,
syncNotion,
syncSharepoint,
updateActiveSync
updateActiveSync,
} from "./sync";
import { Integration, OpenedConnection, Provider } from "./types";

View File

@ -10,13 +10,13 @@ interface ConnectionCardsProps {
export const ConnectionCards = ({
fromAddKnowledge,
}: ConnectionCardsProps): JSX.Element => {
const { syncGoogleDrive, syncSharepoint, syncDropbox } =
useSync();
const { syncGoogleDrive, syncSharepoint, syncDropbox } = useSync();
return (
<div
className={`${styles.connection_cards} ${fromAddKnowledge ? styles.spaced : ""
}`}
className={`${styles.connection_cards} ${
fromAddKnowledge ? styles.spaced : ""
}`}
>
<ConnectionSection
label="Dropbox"

View File

@ -1,6 +1,6 @@
import { MotionConfig } from "framer-motion";
import { usePathname, useRouter } from "next/navigation";
import { useFeatureFlagEnabled } from 'posthog-js/react';
import { useFeatureFlagEnabled } from "posthog-js/react";
import { useState } from "react";
import { MenuControlButton } from "@/app/chat/[chatId]/components/ActionsBar/components/ChatInput/components/MenuControlButton/MenuControlButton";
@ -24,7 +24,6 @@ import { StudioButton } from "./components/StudioButton/StudioButton";
import { ThreadsButton } from "./components/ThreadsButton/ThreadsButton";
import { UpgradeToPlusButton } from "./components/UpgradeToPlusButton/UpgradeToPlusButton";
const showUpgradeButton = process.env.NEXT_PUBLIC_SHOW_TOKENS === "true";
export const Menu = (): JSX.Element => {
@ -34,8 +33,7 @@ export const Menu = (): JSX.Element => {
const pathname = usePathname() ?? "";
const [isLogoHovered, setIsLogoHovered] = useState<boolean>(false);
const { isDarkMode } = useUserSettingsContext();
const flagEnabled = useFeatureFlagEnabled('show-quality-assistant')
const flagEnabled = useFeatureFlagEnabled("show-quality-assistant");
useChatsList();
@ -65,8 +63,9 @@ export const Menu = (): JSX.Element => {
<div>
<MotionConfig transition={{ mass: 1, damping: 10, duration: 0.1 }}>
<div
className={`${styles.menu_container} ${!isOpened ? styles.hidden : ""
}`}
className={`${styles.menu_container} ${
!isOpened ? styles.hidden : ""
}`}
>
<AnimatedDiv>
<div className={styles.menu_wrapper}>

View File

@ -42,4 +42,4 @@
border-color: var(--primary-0);
box-shadow: BoxShadow.$primary;
}
}
}

View File

@ -41,4 +41,4 @@
&:hover {
background-color: var(--background-3);
}
}
}

View File

@ -12,6 +12,7 @@ export const NotificationsButton = (): JSX.Element => {
const { supabase } = useSupabase();
useEffect(() => {
console.log("NotificationsButton");
const channel = supabase
.channel("notifications")
.on(

View File

@ -22,4 +22,4 @@
&:hover {
background-color: var(--background-3);
}
}
}

View File

@ -8,4 +8,4 @@
flex-direction: column;
gap: calc(#{Spacings.$spacing01} + #{Spacings.$spacing02});
position: relative;
}
}

View File

@ -20,4 +20,4 @@
margin-inline: Spacings.$spacing07;
}
}
}
}

View File

@ -6,4 +6,4 @@
.bold {
font-weight: 800;
}
}
}

View File

@ -5,7 +5,11 @@ import styles from "./PricingTable.module.scss";
const PRICING_TABLE_ID = process.env.NEXT_PUBLIC_STRIPE_PRICING_TABLE_ID;
const PUBLISHABLE_KEY = process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY;
export const StripePricingTable = ({ user_email }: { user_email: string }): JSX.Element => {
export const StripePricingTable = ({
user_email,
}: {
user_email: string;
}): JSX.Element => {
return (
<>
<div className={styles.info_content}>

View File

@ -19,4 +19,4 @@
justify-content: flex-end;
}
}
}
}

View File

@ -3,4 +3,4 @@
.info_displayer_container {
display: flex;
flex-direction: column;
}
}

View File

@ -12,4 +12,4 @@
transform: rotate(360deg);
}
}
}
}

View File

@ -33,4 +33,4 @@
color: var(--dangerous-0);
}
}
}
}

View File

@ -13,7 +13,7 @@ export const BrainProviderMock = ({
<BrainContextMock.Provider
value={{
allBrains: [],
publicPrompts:[],
publicPrompts: [],
currentBrain: undefined,
//@ts-ignore we are not using the functions in tests
createBrain: () => void 0,

View File

@ -27,5 +27,5 @@ export const acceptedFormats: Record<string, SupportedFileExtensionsWithDot[]> =
"application/epub+zip": [".epub"],
"application/x-ipynb+json": [".ipynb"],
"text/x-python": [".py"],
"text/bib": [".bib"]
"text/bib": [".bib"],
};

View File

@ -1,5 +1,5 @@
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { useEffect } from 'react';
import { useEffect } from "react";
import { useTranslation } from "react-i18next";
export const UpdateMetadata = () => {
@ -13,7 +13,7 @@ export const UpdateMetadata = () => {
if (metaDescription instanceof HTMLMetaElement) {
metaDescription.content = description;
}
}, [t]);
}, [t]);
return null;
};

View File

@ -21,7 +21,7 @@ export const supportedFileExtensions = [
"ipynb",
"py",
"telegram",
"bib"
"bib",
] as const;
export type SupportedFileExtensions = (typeof supportedFileExtensions)[number];

View File

@ -1,5 +1,5 @@
/** @type {import('next-sitemap').IConfig} */
module.exports = {
siteUrl: process.env.SITE_URL || 'https://quivr.app',
generateRobotsTxt: true, // (optional)
}
siteUrl: process.env.SITE_URL || "https://quivr.app",
generateRobotsTxt: true, // (optional)
};

View File

@ -201,3 +201,47 @@ if (process.env.SENTRY_DSN) {
// SENTRY_DSN does not exist, export nextConfig without Sentry
module.exports = nextConfig;
}
// Injected content via Sentry wizard below
const { withSentryConfig } = require("@sentry/nextjs");
module.exports = withSentryConfig(module.exports, {
// For all available options, see:
// https://github.com/getsentry/sentry-webpack-plugin#options
org: "quivr-brain",
project: "frontend",
// Only print logs for uploading source maps in CI
silent: !process.env.CI,
// For all available options, see:
// https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/
// Upload a larger set of source maps for prettier stack traces (increases build time)
widenClientFileUpload: true,
// Automatically annotate React components to show their full name in breadcrumbs and session replay
reactComponentAnnotation: {
enabled: true,
},
// Route browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers.
// This can increase your server load as well as your hosting bill.
// Note: Check that the configured route will not match with your Next.js middleware, otherwise reporting of client-
// side errors will fail.
tunnelRoute: "/monitoring",
// Hides source maps from generated client bundles
hideSourceMaps: true,
// Automatically tree-shake Sentry logger statements to reduce bundle size
disableLogger: true,
// Enables automatic instrumentation of Vercel Cron Monitors. (Does not yet work with App Router route handlers.)
// See the following for more information:
// https://docs.sentry.io/product/crons/
// https://vercel.com/docs/cron-jobs
automaticVercelMonitors: true,
});

View File

@ -4,6 +4,7 @@
"private": true,
"scripts": {
"dev": "next dev --turbo",
"dev-sentry": "next dev",
"build": "next build",
"postbuild": "next-sitemap",
"start": "next start",
@ -33,7 +34,7 @@
"@radix-ui/react-tabs": "1.0.4",
"@radix-ui/react-toast": "1.1.4",
"@radix-ui/react-tooltip": "1.0.6",
"@sentry/nextjs": "^7.102.1",
"@sentry/nextjs": "^8",
"@supabase/auth-helpers-nextjs": "0.6.1",
"@supabase/auth-ui-react": "0.4.2",
"@supabase/auth-ui-shared": "0.1.6",
@ -130,4 +131,4 @@
"react-icons": "4.11.0",
"vitest": "0.32.4"
}
}
}

View File

@ -1,14 +1,13 @@
/* eslint-disable */
'use client';
import type { GetStaticPaths, InferGetStaticPropsType } from 'next';
import Head from 'next/head';
"use client";
import type { GetStaticPaths, InferGetStaticPropsType } from "next";
import Head from "next/head";
import Image from "next/image";
import Link from 'next/link';
import { useEffect, useState } from 'react';
import Link from "next/link";
import { useEffect, useState } from "react";
import "@/globals.css";
type SeoAttributes = {
id: number;
metaTitle: string;
@ -54,10 +53,12 @@ export const getStaticPaths: GetStaticPaths = async () => {
try {
const response = await fetch("https://cms.quivr.app/api/blogs");
if (!response.ok) {
throw new Error('Network response was not ok');
throw new Error("Network response was not ok");
}
const data: { data: BlogPost[] } = await response.json();
const paths = data.data.map(post => ({ params: { slug: post.attributes.slug } }));
const paths = data.data.map((post) => ({
params: { slug: post.attributes.slug },
}));
return {
paths,
@ -74,14 +75,18 @@ export const getStaticPaths: GetStaticPaths = async () => {
export const getStaticProps = async (context: { params: { slug: string } }) => {
try {
const response = await fetch(`https://cms.quivr.app/api/blogs?slug=${context.params.slug}&populate=seo,seo.metaImage`);
const response = await fetch(
`https://cms.quivr.app/api/blogs?slug=${context.params.slug}&populate=seo,seo.metaImage`
);
const data: { data: BlogPost[] } = await response.json();
// Find the blog post with the exact slug match
const blogPost = data.data.find(post => post.attributes.slug === context.params.slug);
const blogPost = data.data.find(
(post) => post.attributes.slug === context.params.slug
);
if (!blogPost) {
throw new Error('No blog post found for the provided slug');
throw new Error("No blog post found for the provided slug");
}
return {
@ -97,11 +102,15 @@ export const getStaticProps = async (context: { params: { slug: string } }) => {
}
};
const BlogPostDetail = ({ post }: InferGetStaticPropsType<typeof getStaticProps>) => {
const { metaTitle, metaDescription, keywords, canonicalURL } = post.attributes.seo;
const BlogPostDetail = ({
post,
}: InferGetStaticPropsType<typeof getStaticProps>) => {
const { metaTitle, metaDescription, keywords, canonicalURL } =
post.attributes.seo;
// Extract different image formats
const { large, medium } = post.attributes.seo.metaImage.data.attributes.formats;
const { large, medium } =
post.attributes.seo.metaImage.data.attributes.formats;
const [imageUrl, setImageUrl] = useState(medium.url);
@ -119,7 +128,12 @@ const BlogPostDetail = ({ post }: InferGetStaticPropsType<typeof getStaticProps>
<div className="text-2xl font-bold cursor-pointer">Quivr</div>
</Link>
<div className="space-x-4">
<Link className="text-zinc-900 hover:text-zinc-700" href="https://quivr.app">Try Quivr</Link>
<Link
className="text-zinc-900 hover:text-zinc-700"
href="https://quivr.app"
>
Try Quivr
</Link>
</div>
</nav>
</div>
@ -137,11 +151,11 @@ const BlogPostDetail = ({ post }: InferGetStaticPropsType<typeof getStaticProps>
<h1 className="text-4xl font-extrabold tracking-tight lg:text-5xl lg:leading-[3.5rem] text-black dark:text-white">
{metaTitle}
</h1>
<p className="text-zinc-500 dark:text-zinc-400">Posted on {post.attributes.publishedAt}</p>
<p className="text-zinc-500 dark:text-zinc-400">
Posted on {post.attributes.publishedAt}
</p>
</div>
<p className="text-black dark:text-white">
{metaDescription}
</p>
<p className="text-black dark:text-white">{metaDescription}</p>
<Image
src={imageUrl}
alt={metaTitle}
@ -149,11 +163,14 @@ const BlogPostDetail = ({ post }: InferGetStaticPropsType<typeof getStaticProps>
width={1250}
height={340}
/>
<div className="text-black dark:text-white" dangerouslySetInnerHTML={{ __html: post.attributes.Article }}></div>
<div
className="text-black dark:text-white"
dangerouslySetInnerHTML={{ __html: post.attributes.Article }}
></div>
</article>
</div>
</section>
);
}
};
export default BlogPostDetail;
export default BlogPostDetail;

View File

@ -1,6 +1,6 @@
/* eslint-disable */
/* https://strapi.io/blog/how-to-create-an-ssg-static-site-generation-application-with-strapi-webhooks-and-nextjs */
import type { InferGetStaticPropsType } from 'next';
import type { InferGetStaticPropsType } from "next";
import Head from "next/head";
import Image from "next/image";
import Link from "next/link";
@ -38,11 +38,17 @@ type BlogPost = {
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export const getStaticProps = async () => {
try {
const resulting = await fetch("https://cms.quivr.app/api/blogs?populate=seo,seo.metaImage,slug");
const resulting = await fetch(
"https://cms.quivr.app/api/blogs?populate=seo,seo.metaImage,slug"
);
const data: { data: BlogPost[] } = await resulting.json();
// Sort blogs by publishedAt in descending order
const sortedBlogs = data.data.sort((a, b) => new Date(b.attributes.publishedAt).getTime() - new Date(a.attributes.publishedAt).getTime());
const sortedBlogs = data.data.sort(
(a, b) =>
new Date(b.attributes.publishedAt).getTime() -
new Date(a.attributes.publishedAt).getTime()
);
return {
props: {
@ -65,7 +71,10 @@ const Blog = ({ result }: InferGetStaticPropsType<typeof getStaticProps>) => {
<section className="w-full">
<Head>
<title>Quivr - Blog</title>
<meta name="description" content="Quivr.app - Your Generative AI second brain builder's blog" />
<meta
name="description"
content="Quivr.app - Your Generative AI second brain builder's blog"
/>
</Head>
<header className="bg-white text-zinc-900 py-4 border-b">
@ -75,7 +84,9 @@ const Blog = ({ result }: InferGetStaticPropsType<typeof getStaticProps>) => {
<div className="text-2xl font-bold cursor-pointer">Quivr</div>
</Link>
<div className="space-x-4">
<Link className="text-zinc-900 hover:text-zinc-700" href="/">Try Quivr</Link>
<Link className="text-zinc-900 hover:text-zinc-700" href="/">
Try Quivr
</Link>
</div>
</nav>
</div>
@ -84,7 +95,7 @@ const Blog = ({ result }: InferGetStaticPropsType<typeof getStaticProps>) => {
<main className="container mx-auto px-4 md:px-6 py-8">
<section className="mb-8">
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{result.map(post => (
{result.map((post) => (
<div key={post.id}>
<Link href={`/blog/${post.attributes.slug}`}>
<Image
@ -95,9 +106,16 @@ const Blog = ({ result }: InferGetStaticPropsType<typeof getStaticProps>) => {
className="w-full rounded-lg object-cover cursor-pointer"
/>
</Link>
<h3 className="text-xl font-bold mb-2 mt-4">{post.attributes.seo.metaTitle}</h3>
<p className="text-zinc-500">{post.attributes.seo.metaDescription}</p>
<Link className="text-blue-500 hover:text-blue-700 mt-4" href={`/blog/${post.attributes.slug}`}>
<h3 className="text-xl font-bold mb-2 mt-4">
{post.attributes.seo.metaTitle}
</h3>
<p className="text-zinc-500">
{post.attributes.seo.metaDescription}
</p>
<Link
className="text-blue-500 hover:text-blue-700 mt-4"
href={`/blog/${post.attributes.slug}`}
>
Read More
</Link>
</div>
@ -108,6 +126,6 @@ const Blog = ({ result }: InferGetStaticPropsType<typeof getStaticProps>) => {
</section>
</div>
);
}
};
export default Blog;
export default Blog;

View File

@ -1,7 +1,7 @@
{
"associatedApplications": [
{
"applicationId": "511dce23-02f3-4724-8684-05da226df5f3"
}
]
}
"associatedApplications": [
{
"applicationId": "511dce23-02f3-4724-8684-05da226df5f3"
}
]
}

View File

@ -1 +1,56 @@
{"accountSection":"Your Account","anthropicKeyLabel":"Anthropic API Key","anthropicKeyPlaceholder":"Anthropic API Key","apiKey":"API Key","backendSection":"Backend config","backendUrlLabel":"Backend URL","backendUrlPlaceHolder":"Backend URL","brainUpdated":"Brain updated successfully","configReset":"Config reseted","configSaved":"Config saved","customPromptSection":"Custom prompt","defaultBrainSet":"Brain set as default successfully","descriptionRequired":"Description is required","error":{"copy":"Failed to copy","createApiKey":"Error creating API Key"},"errorRemovingPrompt":"Error while removing prompt","incorrectApiKey":"Incorrect API Key","invalidApiKeyError":"Invalid API Key","invalidOpenAiKey":"Invalid OpenAI Key","keepInLocal":"Keep in local","knowledge":"Knowledge","maxTokens":"Maximum Words per Response","modelLabel":"Model","modelSection":"Model configuration of the brain","nameRequired":"Name is required","newAPIKey":"Create New Key","noUser":"No user","ohno":"Oh no!","openAiKeyLabel":"Open AI Key","openAiKeyPlaceholder":"sk-xxx","people":"People","promptContent":"Prompt content","promptContentPlaceholder":"As an AI, your...","promptFieldsRequired":"Prompt title and content are required","promptName":"Prompt title","promptNamePlaceholder":"My awesome prompt name","promptRemoved":"Prompt removed successfully","publicPrompts":"Pick in public prompts","removePrompt":"Remove prompt","requireAccess":"Please require access from the owner.","roleRequired":"You don't have the necessary role to access this tab 🧠💡🥲.","selectQuivrPersonalityBtn":"Select a Quivr Personality","settings":"Settings","signedInAs":"Signed In as","subtitle":"Manage your brain","supabaseKeyLabel":"Supabase key","supabaseKeyPlaceHolder":"Supabase key","supabaseURLLabel":"Supabase URL","supabaseURLPlaceHolder":"Supabase URL","temperature":"Temperature","title":"Configuration","updatingBrainSettings":"Updating brain settings..."}
{
"accountSection": "Your Account",
"anthropicKeyLabel": "Anthropic API Key",
"anthropicKeyPlaceholder": "Anthropic API Key",
"apiKey": "API Key",
"backendSection": "Backend config",
"backendUrlLabel": "Backend URL",
"backendUrlPlaceHolder": "Backend URL",
"brainUpdated": "Brain updated successfully",
"configReset": "Config reseted",
"configSaved": "Config saved",
"customPromptSection": "Custom prompt",
"defaultBrainSet": "Brain set as default successfully",
"descriptionRequired": "Description is required",
"error": {
"copy": "Failed to copy",
"createApiKey": "Error creating API Key"
},
"errorRemovingPrompt": "Error while removing prompt",
"incorrectApiKey": "Incorrect API Key",
"invalidApiKeyError": "Invalid API Key",
"invalidOpenAiKey": "Invalid OpenAI Key",
"keepInLocal": "Keep in local",
"knowledge": "Knowledge",
"maxTokens": "Maximum Words per Response",
"modelLabel": "Model",
"modelSection": "Model configuration of the brain",
"nameRequired": "Name is required",
"newAPIKey": "Create New Key",
"noUser": "No user",
"ohno": "Oh no!",
"openAiKeyLabel": "Open AI Key",
"openAiKeyPlaceholder": "sk-xxx",
"people": "People",
"promptContent": "Prompt content",
"promptContentPlaceholder": "As an AI, your...",
"promptFieldsRequired": "Prompt title and content are required",
"promptName": "Prompt title",
"promptNamePlaceholder": "My awesome prompt name",
"promptRemoved": "Prompt removed successfully",
"publicPrompts": "Pick in public prompts",
"removePrompt": "Remove prompt",
"requireAccess": "Please require access from the owner.",
"roleRequired": "You don't have the necessary role to access this tab 🧠💡🥲.",
"selectQuivrPersonalityBtn": "Select a Quivr Personality",
"settings": "Settings",
"signedInAs": "Signed In as",
"subtitle": "Manage your brain",
"supabaseKeyLabel": "Supabase key",
"supabaseKeyPlaceHolder": "Supabase key",
"supabaseURLLabel": "Supabase URL",
"supabaseURLPlaceHolder": "Supabase URL",
"temperature": "Temperature",
"title": "Configuration",
"updatingBrainSettings": "Updating brain settings..."
}

View File

@ -1,14 +1,14 @@
{
"speak_to": "Speak to our",
"sales_team": "Sales team",
"pricing": "Pricing",
"form": {
"email": "Work Email",
"question": "Question",
"submit": "Contact",
"placeholder_question": "How can we help you?",
"thank_you": "Thank you!",
"thank_you_text": "We will get back to you as soon as possible.",
"sending_mail_error": "There was an error sending your message. Please try again later."
}
}
"speak_to": "Speak to our",
"sales_team": "Sales team",
"pricing": "Pricing",
"form": {
"email": "Work Email",
"question": "Question",
"submit": "Contact",
"placeholder_question": "How can we help you?",
"thank_you": "Thank you!",
"thank_you_text": "We will get back to you as soon as possible.",
"sending_mail_error": "There was an error sending your message. Please try again later."
}
}

View File

@ -1,11 +1,11 @@
{
"deleteButton": "Delete Brain",
"deleteConfirmQuestion": "Are you sure you want to delete this brain? This action cannot be undone.",
"deleteConfirmYes": "Yes, delete this brain",
"returnButton": "Return",
"unsubscribeButton": "Unsubscribe from brain",
"unsubscribeConfirmQuestion": "Are you sure you want to unsubscribe from this brain?",
"unsubscribeConfirmYes": "Yes, unsubscribe from this brain",
"successfully_deleted": "Brain successfully deleted.",
"successfully_unsubscribed": "You have successfully unsubscribed from this brain."
}
"deleteButton": "Delete Brain",
"deleteConfirmQuestion": "Are you sure you want to delete this brain? This action cannot be undone.",
"deleteConfirmYes": "Yes, delete this brain",
"returnButton": "Return",
"unsubscribeButton": "Unsubscribe from brain",
"unsubscribeConfirmQuestion": "Are you sure you want to unsubscribe from this brain?",
"unsubscribeConfirmYes": "Yes, unsubscribe from this brain",
"successfully_deleted": "Brain successfully deleted.",
"successfully_unsubscribed": "You have successfully unsubscribed from this brain."
}

View File

@ -1 +1,15 @@
{"title":"Explore uploaded data","subtitle":"View, download or delete knowledge used by your brain","empty":"Oh No, Your Brain is empty.","noBrain":"Brain id not found","sessionNotFound":"User session not found","deleted":"{{fileName}} deleted from brain {{brain}}","errorDeleting":"Error deleting {{fileName}}","view":"View","chunkNumber":"No. of chunks: {{quantity}}","notAvailable":"Not Available","deleteConfirmTitle":"Confirm","deleteConfirmText":"Do you really want to delete?","feed_brain_instructions":"To add knowledge to a brain, go to chat page then click on plus button on the left of the chat input"}
{
"title": "Explore uploaded data",
"subtitle": "View, download or delete knowledge used by your brain",
"empty": "Oh No, Your Brain is empty.",
"noBrain": "Brain id not found",
"sessionNotFound": "User session not found",
"deleted": "{{fileName}} deleted from brain {{brain}}",
"errorDeleting": "Error deleting {{fileName}}",
"view": "View",
"chunkNumber": "No. of chunks: {{quantity}}",
"notAvailable": "Not Available",
"deleteConfirmTitle": "Confirm",
"deleteConfirmText": "Do you really want to delete?",
"feed_brain_instructions": "To add knowledge to a brain, go to chat page then click on plus button on the left of the chat input"
}

View File

@ -1 +1,14 @@
{"method_label":"Method","url_placeholder":"URL","searchParams":"Search Params","headers":"Headers","params":"Params","key":"Key","type":"Type (string or number)","description":"Description","secrets":"Secrets","paramsTabDescription":"These values are sent as the request body.","searchParamsTabDescription":"These values are sent as the query string.","secretsTabDescription":"These values are sent as header keys"}
{
"method_label": "Method",
"url_placeholder": "URL",
"searchParams": "Search Params",
"headers": "Headers",
"params": "Params",
"key": "Key",
"type": "Type (string or number)",
"description": "Description",
"secrets": "Secrets",
"paramsTabDescription": "These values are sent as the request body.",
"searchParamsTabDescription": "These values are sent as the query string.",
"secretsTabDescription": "These values are sent as header keys"
}

View File

@ -1,36 +1,36 @@
{
"sign_in": "Sign in",
"docs": "Docs",
"pricing": "Pricing",
"sign_up": "Sign up",
"star_us": "Star us on Github",
"blog": "Blog",
"sponsored_by": "Sponsored by",
"useCases": {
"title": "Experience it now.",
"subtitle": "Check our example on using Quivr"
},
"intro": {
"title": "Get a Second Brain with",
"subtitle": "Your productivity assistant connected to your files & favorite applications",
"try_demo": "Try free demo",
"contact_sales": "Contact sales team"
},
"demo": {
"title": "Demo video",
"start_now": "Start now"
},
"security": {
"cta": "Get started today "
},
"footer": {
"title": "Get started today",
"description_1": "Your personal assistant that acts as your Second Brain.",
"description_2": "Simply upload your files and ask questions to it.",
"start_using": "Start using Quivr",
"contact_sales": "Contact sales team"
},
"testimonials": {
"title": "What people say about"
}
}
"sign_in": "Sign in",
"docs": "Docs",
"pricing": "Pricing",
"sign_up": "Sign up",
"star_us": "Star us on Github",
"blog": "Blog",
"sponsored_by": "Sponsored by",
"useCases": {
"title": "Experience it now.",
"subtitle": "Check our example on using Quivr"
},
"intro": {
"title": "Get a Second Brain with",
"subtitle": "Your productivity assistant connected to your files & favorite applications",
"try_demo": "Try free demo",
"contact_sales": "Contact sales team"
},
"demo": {
"title": "Demo video",
"start_now": "Start now"
},
"security": {
"cta": "Get started today "
},
"footer": {
"title": "Get started today",
"description_1": "Your personal assistant that acts as your Second Brain.",
"description_2": "Simply upload your files and ask questions to it.",
"start_using": "Start using Quivr",
"contact_sales": "Contact sales team"
},
"testimonials": {
"title": "What people say about"
}
}

View File

@ -1 +1,13 @@
{"wellcome":"Welcome to {{brain}}!","invitationMessage":"You have been invited to join this brain as a {{role}} and start exploring. Do you accept this exciting journey?","processingRequest":"Processing your request...","accept":"Yes, count me in!","reject":"No, thank you.","invitationNotFound":"This invitation is not valid.","errorCheckingInvitation":"An unknown error occurred while checking the invitation","accepted":"Invitation accepted","errorAccepting":"An unknown error occurred while accepting the invitation","declined":"Invitation declined","errorDeclining":"An unknown error occurred while declining the invitation"}
{
"wellcome": "Welcome to {{brain}}!",
"invitationMessage": "You have been invited to join this brain as a {{role}} and start exploring. Do you accept this exciting journey?",
"processingRequest": "Processing your request...",
"accept": "Yes, count me in!",
"reject": "No, thank you.",
"invitationNotFound": "This invitation is not valid.",
"errorCheckingInvitation": "An unknown error occurred while checking the invitation",
"accepted": "Invitation accepted",
"errorAccepting": "An unknown error occurred while accepting the invitation",
"declined": "Invitation declined",
"errorDeclining": "An unknown error occurred while declining the invitation"
}

View File

@ -16,4 +16,4 @@
"part2": ", check your emails and follow the steps."
},
"login": "Login"
}
}

View File

@ -1 +1,8 @@
{"title":"Logout","subtitle":"See you next time","areYouSure":"Are you sure you want to sign out ?","cancel":"Cancel","error":"Error on logout {{errorMessage}}","loggedOut":"Logged out successfully"}
{
"title": "Logout",
"subtitle": "See you next time",
"areYouSure": "Are you sure you want to sign out ?",
"cancel": "Cancel",
"error": "Error on logout {{errorMessage}}",
"loggedOut": "Logged out successfully"
}

View File

@ -1 +1,38 @@
{"all":"All","and":"and","cancel":"Cancel","Chat":"Chat","chatButton":"Chat","comingSoon":"Coming soon","crawlButton":"Crawl","createButton":"Create","deleteButton":"Delete","deleteForeverButton":"Delete forever","description":"Quivr is your second brain in the cloud, designed to easily store and retrieve unstructured information.","doneButton":"Done","Editor":"Editor","email":"Email","Explore":"Explore","invalidUrl":"Invalid URL","lang":"en-US","languageSelect":"Preferred language","loading":"Loading...","logoutButton":"Logout","newChatButton":"New Chat","next":"Next","or":"or","Owner":"Owner","previous":"Previous","resetButton":"Reset","saveButton":"Save","shareButton":"Share","themeSelect":"Interface theme","title":"Quivr - Get a Second Brain with Generative AI","toastDismiss":"dismiss","updateButton":"Update","Upload":"Upload","uploadButton":"Upload","uploadingButton":"Uploading...","Viewer":"Viewer"}
{
"all": "All",
"and": "and",
"cancel": "Cancel",
"Chat": "Chat",
"chatButton": "Chat",
"comingSoon": "Coming soon",
"crawlButton": "Crawl",
"createButton": "Create",
"deleteButton": "Delete",
"deleteForeverButton": "Delete forever",
"description": "Quivr is your second brain in the cloud, designed to easily store and retrieve unstructured information.",
"doneButton": "Done",
"Editor": "Editor",
"email": "Email",
"Explore": "Explore",
"invalidUrl": "Invalid URL",
"lang": "en-US",
"languageSelect": "Preferred language",
"loading": "Loading...",
"logoutButton": "Logout",
"newChatButton": "New Chat",
"next": "Next",
"or": "or",
"Owner": "Owner",
"previous": "Previous",
"resetButton": "Reset",
"saveButton": "Save",
"shareButton": "Share",
"themeSelect": "Interface theme",
"title": "Quivr - Get a Second Brain with Generative AI",
"toastDismiss": "dismiss",
"updateButton": "Update",
"Upload": "Upload",
"uploadButton": "Upload",
"uploadingButton": "Uploading...",
"Viewer": "Viewer"
}

View File

@ -1 +1,10 @@
{"title":"{{user}}'s Brain Usage","fetching":"Fetching your data...","requestsCount":"Today's Requests: {{count}}","brainSize":"Remaining Brain size","empty":"Empty","Used":"Used","Unused":"Unused","brainUsage":"Brain Usage"}
{
"title": "{{user}}'s Brain Usage",
"fetching": "Fetching your data...",
"requestsCount": "Today's Requests: {{count}}",
"brainSize": "Remaining Brain size",
"empty": "Empty",
"Used": "Used",
"Unused": "Unused",
"brainUsage": "Brain Usage"
}

View File

@ -1,56 +1,56 @@
{
"accountSection": "Tu Cuenta",
"anthropicKeyLabel": "Clave de la API de Anthropic",
"anthropicKeyPlaceholder": "Clave de la API de Anthropic",
"apiKey": "Clave de API",
"backendSection": "Configuración de Backend",
"backendUrlLabel": "URL del Backend",
"backendUrlPlaceHolder": "URL del Backend",
"brainUpdated": "Cerebro actualizado correctamente",
"configReset": "Configuración restaurada",
"configSaved": "Configuración guardada",
"customPromptSection": "Indicadores personalizados",
"defaultBrainSet": "Cerebro asignado como predeterminado",
"descriptionRequired": "La descripción es necesaria",
"error": {
"copy": "No se pudo copiar",
"createApiKey": "No se pudo crear la clave API"
},
"errorRemovingPrompt": "Error eliminando indicador",
"incorrectApiKey": "Clave de API incorrecta",
"invalidApiKeyError": "Clave de API inválida",
"invalidOpenAiKey": "Clave de OpenAI inválida",
"keepInLocal": "Mantener localmente",
"knowledge": "Conocimiento",
"maxTokens": "Tokens máximo",
"modelLabel": "Modelo",
"modelSection": "Configuración de Modelo",
"nameRequired": "El nombre es necesario",
"newAPIKey": "Crea una nueva clave",
"noUser": "Sin usuarios",
"ohno": "¡Oh no!",
"openAiKeyLabel": "Clave de Open AI",
"openAiKeyPlaceholder": "sk-xxx",
"people": "Personas",
"promptContent": "Contenido del indicador",
"promptContentPlaceholder": "Como una IA, tu...",
"promptFieldsRequired": "Título y contenido de indicador son necesarios",
"promptName": "Título del indicador",
"promptNamePlaceholder": "El nombre de mi súper indicador",
"promptRemoved": "Indicador eliminado correctamente",
"publicPrompts": "Selecciona un indicador público",
"removePrompt": "Quitar indicador",
"requireAccess": "Por favor, solicita acceso al dueño",
"roleRequired": "No tienen el rol necesario para acceder a esta pestaña 🧠💡🥲.",
"selectQuivrPersonalityBtn": "Selecciona una Personalidad Quivr",
"settings": "Configuración",
"signedInAs": "Sesión iniciada como",
"subtitle": "Gestiona tu cerebro",
"supabaseKeyLabel": "Clave de Supabase",
"supabaseKeyPlaceHolder": "Clave de Supabase",
"supabaseURLLabel": "URL de Supabase",
"supabaseURLPlaceHolder": "URL de Supabase",
"temperature": "Temperatura",
"title": "Configuración",
"updatingBrainSettings": "Actualizando configuración del cerebro..."
}
"accountSection": "Tu Cuenta",
"anthropicKeyLabel": "Clave de la API de Anthropic",
"anthropicKeyPlaceholder": "Clave de la API de Anthropic",
"apiKey": "Clave de API",
"backendSection": "Configuración de Backend",
"backendUrlLabel": "URL del Backend",
"backendUrlPlaceHolder": "URL del Backend",
"brainUpdated": "Cerebro actualizado correctamente",
"configReset": "Configuración restaurada",
"configSaved": "Configuración guardada",
"customPromptSection": "Indicadores personalizados",
"defaultBrainSet": "Cerebro asignado como predeterminado",
"descriptionRequired": "La descripción es necesaria",
"error": {
"copy": "No se pudo copiar",
"createApiKey": "No se pudo crear la clave API"
},
"errorRemovingPrompt": "Error eliminando indicador",
"incorrectApiKey": "Clave de API incorrecta",
"invalidApiKeyError": "Clave de API inválida",
"invalidOpenAiKey": "Clave de OpenAI inválida",
"keepInLocal": "Mantener localmente",
"knowledge": "Conocimiento",
"maxTokens": "Tokens máximo",
"modelLabel": "Modelo",
"modelSection": "Configuración de Modelo",
"nameRequired": "El nombre es necesario",
"newAPIKey": "Crea una nueva clave",
"noUser": "Sin usuarios",
"ohno": "¡Oh no!",
"openAiKeyLabel": "Clave de Open AI",
"openAiKeyPlaceholder": "sk-xxx",
"people": "Personas",
"promptContent": "Contenido del indicador",
"promptContentPlaceholder": "Como una IA, tu...",
"promptFieldsRequired": "Título y contenido de indicador son necesarios",
"promptName": "Título del indicador",
"promptNamePlaceholder": "El nombre de mi súper indicador",
"promptRemoved": "Indicador eliminado correctamente",
"publicPrompts": "Selecciona un indicador público",
"removePrompt": "Quitar indicador",
"requireAccess": "Por favor, solicita acceso al dueño",
"roleRequired": "No tienen el rol necesario para acceder a esta pestaña 🧠💡🥲.",
"selectQuivrPersonalityBtn": "Selecciona una Personalidad Quivr",
"settings": "Configuración",
"signedInAs": "Sesión iniciada como",
"subtitle": "Gestiona tu cerebro",
"supabaseKeyLabel": "Clave de Supabase",
"supabaseKeyPlaceHolder": "Clave de Supabase",
"supabaseURLLabel": "URL de Supabase",
"supabaseURLPlaceHolder": "URL de Supabase",
"temperature": "Temperatura",
"title": "Configuración",
"updatingBrainSettings": "Actualizando configuración del cerebro..."
}

View File

@ -1,14 +1,14 @@
{
"speak_to": "Hable con nuestro",
"sales_team": "equipo de ventas",
"pricing": "Precios",
"form": {
"email": "Correo electrónico de trabajo",
"question": "Pregunta",
"submit": "Contactar",
"placeholder_question": "¿Cómo podemos ayudarte?",
"thank_you": "¡Gracias!",
"thank_you_text": "Nos pondremos en contacto contigo lo antes posible.",
"sending_mail_error": "Se produjo un error al enviar tu mensaje. Por favor, inténtalo de nuevo más tarde."
}
}
"speak_to": "Hable con nuestro",
"sales_team": "equipo de ventas",
"pricing": "Precios",
"form": {
"email": "Correo electrónico de trabajo",
"question": "Pregunta",
"submit": "Contactar",
"placeholder_question": "¿Cómo podemos ayudarte?",
"thank_you": "¡Gracias!",
"thank_you_text": "Nos pondremos en contacto contigo lo antes posible.",
"sending_mail_error": "Se produjo un error al enviar tu mensaje. Por favor, inténtalo de nuevo más tarde."
}
}

View File

@ -1,11 +1,11 @@
{
"deleteButton": "Borrar el cerebro",
"deleteConfirmQuestion": "¿Estás seguro de que quieres borrar el cerebro? No podrás recuperarlo.",
"deleteConfirmYes": "Sí, borrar el cerebro",
"returnButton": "Vuelta",
"unsubscribeButton": "Cancelar suscripción del cerebro",
"unsubscribeConfirmQuestion": "¿Estás seguro de que quieres darte de baja de este cerebro?",
"unsubscribeConfirmYes": "Sí, cancelar la suscripción de este cerebro",
"successfully_deleted": "Cerebro eliminado con éxito.",
"successfully_unsubscribed": "Te has desinscrito con éxito de este cerebro."
}
"deleteButton": "Borrar el cerebro",
"deleteConfirmQuestion": "¿Estás seguro de que quieres borrar el cerebro? No podrás recuperarlo.",
"deleteConfirmYes": "Sí, borrar el cerebro",
"returnButton": "Vuelta",
"unsubscribeButton": "Cancelar suscripción del cerebro",
"unsubscribeConfirmQuestion": "¿Estás seguro de que quieres darte de baja de este cerebro?",
"unsubscribeConfirmYes": "Sí, cancelar la suscripción de este cerebro",
"successfully_deleted": "Cerebro eliminado con éxito.",
"successfully_unsubscribed": "Te has desinscrito con éxito de este cerebro."
}

View File

@ -1 +1,15 @@
{"title":"Explora datos subidos","subtitle":"Visualiza, descarga o elimina el conocimiento utilizado por tu cerebro","empty":"¡Oh No!, Tu Cerebro está vacío","noBrain":"Id de Cerebro no encontrado","sessionNotFound":"Sesión no encontrada","deleted":"{{fileName}} borrado del cerebro {{brain}}","errorDeleting":"Error borrando {{fileName}}","view":"Ver","chunkNumber":"No. de partes: {{quantity}}","notAvailable":"No disponible","deleteConfirmTitle":"Confirmar","deleteConfirmText":"¿Realmente quieres eliminar?","feed_brain_instructions":"Para agregar conocimiento a un cerebro, ve a la página de chat y haz clic en el botón de más a la izquierda del campo de chat."}
{
"title": "Explora datos subidos",
"subtitle": "Visualiza, descarga o elimina el conocimiento utilizado por tu cerebro",
"empty": "¡Oh No!, Tu Cerebro está vacío",
"noBrain": "Id de Cerebro no encontrado",
"sessionNotFound": "Sesión no encontrada",
"deleted": "{{fileName}} borrado del cerebro {{brain}}",
"errorDeleting": "Error borrando {{fileName}}",
"view": "Ver",
"chunkNumber": "No. de partes: {{quantity}}",
"notAvailable": "No disponible",
"deleteConfirmTitle": "Confirmar",
"deleteConfirmText": "¿Realmente quieres eliminar?",
"feed_brain_instructions": "Para agregar conocimiento a un cerebro, ve a la página de chat y haz clic en el botón de más a la izquierda del campo de chat."
}

View File

@ -1 +1,14 @@
{"method_label":"Method","url_placeholder":"URL","searchParams":"Search Params","headers":"Headers","params":"Params","key":"Key","type":"Type (string or number)","description":"Description","secrets":"Secretos","paramsTabDescription":"Estos valores se envían como cuerpo de la solicitud.","searchParamsTabDescription":"Estos valores se envían como cadena de consulta.","secretsTabDescription":"Estos valores se envían como claves de encabezado."}
{
"method_label": "Method",
"url_placeholder": "URL",
"searchParams": "Search Params",
"headers": "Headers",
"params": "Params",
"key": "Key",
"type": "Type (string or number)",
"description": "Description",
"secrets": "Secretos",
"paramsTabDescription": "Estos valores se envían como cuerpo de la solicitud.",
"searchParamsTabDescription": "Estos valores se envían como cadena de consulta.",
"secretsTabDescription": "Estos valores se envían como claves de encabezado."
}

View File

@ -1,36 +1,36 @@
{
"sign_in": "Iniciar sesión",
"docs": "Docs",
"pricing": "Precios",
"sign_up": "Registrarse",
"star_us": "Danos una estrella en Github",
"blog": "Blog",
"sponsored_by": "Patrocinado por",
"useCases": {
"title": "Experiméntalo ahora.",
"subtitle": "Comprueba nuestro ejemplo de uso de Quivr."
},
"intro": {
"title": "Obtén un segundo cerebro con",
"subtitle": "Sube todos tus archivos y comienza a hablar con ellos.",
"try_demo": "Prueba la demostración gratuita",
"contact_sales": "Contacta al equipo de ventas"
},
"demo": {
"title": "Video de demostración",
"start_now": "Comenzar ahora"
},
"security": {
"cta": "Comienza hoy"
},
"footer": {
"title": "Comienza hoy",
"description_1": "Tu asistente personal que actúa como tu Segundo Cerebro.",
"description_2": "Simplemente carga tus archivos y hazle preguntas.",
"start_using": "Comienza a usar Quivr",
"contact_sales": "Contacta al equipo de ventas"
},
"testimonials": {
"title": "Lo que la gente dice sobre"
}
}
"sign_in": "Iniciar sesión",
"docs": "Docs",
"pricing": "Precios",
"sign_up": "Registrarse",
"star_us": "Danos una estrella en Github",
"blog": "Blog",
"sponsored_by": "Patrocinado por",
"useCases": {
"title": "Experiméntalo ahora.",
"subtitle": "Comprueba nuestro ejemplo de uso de Quivr."
},
"intro": {
"title": "Obtén un segundo cerebro con",
"subtitle": "Sube todos tus archivos y comienza a hablar con ellos.",
"try_demo": "Prueba la demostración gratuita",
"contact_sales": "Contacta al equipo de ventas"
},
"demo": {
"title": "Video de demostración",
"start_now": "Comenzar ahora"
},
"security": {
"cta": "Comienza hoy"
},
"footer": {
"title": "Comienza hoy",
"description_1": "Tu asistente personal que actúa como tu Segundo Cerebro.",
"description_2": "Simplemente carga tus archivos y hazle preguntas.",
"start_using": "Comienza a usar Quivr",
"contact_sales": "Contacta al equipo de ventas"
},
"testimonials": {
"title": "Lo que la gente dice sobre"
}
}

View File

@ -1 +1,13 @@
{"wellcome":"Bienvenido/a a {{brain}}!","invitationMessage":"Te han invitado a unirte a este cerebro como un {{role}} y empezar a explorar. ¿Aceptas este entusiasmante viaje?","processingRequest":"Procesando tu pedido...","accept":"¡Sí, cuenta conmigo!","reject":"No, gracias","invitationNotFound":"Esta invitación no es válida","errorCheckingInvitation":"Ocurrió un error durante la comprobación de la invitación","accepted":"Invitación aceptada","errorAccepting":"Ocurrió un error aceptando la invitación","declined":"Invitación rechazada","errorDeclining":"Ocurrió un error rechazando la invitación"}
{
"wellcome": "Bienvenido/a a {{brain}}!",
"invitationMessage": "Te han invitado a unirte a este cerebro como un {{role}} y empezar a explorar. ¿Aceptas este entusiasmante viaje?",
"processingRequest": "Procesando tu pedido...",
"accept": "¡Sí, cuenta conmigo!",
"reject": "No, gracias",
"invitationNotFound": "Esta invitación no es válida",
"errorCheckingInvitation": "Ocurrió un error durante la comprobación de la invitación",
"accepted": "Invitación aceptada",
"errorAccepting": "Ocurrió un error aceptando la invitación",
"declined": "Invitación rechazada",
"errorDeclining": "Ocurrió un error rechazando la invitación"
}

View File

@ -1,19 +1,19 @@
{
"password": "Contraseña",
"googleLogin": "Continuar con Google",
"azureLogin": "Continuar con Azure",
"errorPasswordMissed": "Por favor ingrese su contraseña",
"magicLink": "Continuar con correo electrónico",
"errorMailMissed": "Por favor ingrese su dirección de correo electrónico",
"talk_to": "Hablar con",
"restriction_message": "Los usuarios no pagos tienen acceso a una demostración gratuita y limitada de Quivr",
"email": "Dirección de correo electrónico",
"cant_find": "¿No puedes encontrarlo?",
"try_again": "Inténtalo de nuevo",
"check_your_email": {
"part1": "Acabamos de enviarte un ",
"magic_link": "enlace mágico",
"part2": ". Revisa tus correos electrónicos y sigue los pasos."
},
"login": "Iniciar sesión"
}
"password": "Contraseña",
"googleLogin": "Continuar con Google",
"azureLogin": "Continuar con Azure",
"errorPasswordMissed": "Por favor ingrese su contraseña",
"magicLink": "Continuar con correo electrónico",
"errorMailMissed": "Por favor ingrese su dirección de correo electrónico",
"talk_to": "Hablar con",
"restriction_message": "Los usuarios no pagos tienen acceso a una demostración gratuita y limitada de Quivr",
"email": "Dirección de correo electrónico",
"cant_find": "¿No puedes encontrarlo?",
"try_again": "Inténtalo de nuevo",
"check_your_email": {
"part1": "Acabamos de enviarte un ",
"magic_link": "enlace mágico",
"part2": ". Revisa tus correos electrónicos y sigue los pasos."
},
"login": "Iniciar sesión"
}

View File

@ -1 +1,8 @@
{"title":"Cerrar sesión","subtitle":"Hasta pronto","areYouSure":"¿Seguro que quieres cerrar la sesión?","cancel":"Cancelar","error":"Error al cerrar sesión {{errorMessage}}","loggedOut":"Sesión finalizada"}
{
"title": "Cerrar sesión",
"subtitle": "Hasta pronto",
"areYouSure": "¿Seguro que quieres cerrar la sesión?",
"cancel": "Cancelar",
"error": "Error al cerrar sesión {{errorMessage}}",
"loggedOut": "Sesión finalizada"
}

View File

@ -1 +1,38 @@
{"all":"Todos","and":"y","cancel":"Cancelar","Chat":"Conversar","chatButton":"Conversar","comingSoon":"Próximamente","crawlButton":"Rastrear","createButton":"Crear","deleteButton":"Borrar","deleteForeverButton":"Borrar para siempre","description":"Quivr es tu segundo cerebro en la nube, diseñado para facilitar el almacenamiento y obtención de información inestructurada.","doneButton":"Listo","Editor":"Editor","email":"Correo electrónico","Explore":"Explorar","invalidUrl":"URL inválida","lang":"es-ES","languageSelect":"Idioma preferido","loading":"Cargando...","logoutButton":"Cerrar sesión","newChatButton":"Nueva conversación","next":"Siguiente","or":"o","Owner":"Propietario","previous":"Anterior","resetButton":"Restaurar","saveButton":"Guardar","shareButton":"Compartir","themeSelect":"Tema de interfaz","title":"Quivr - Tu segundo cerebro con IA generativa","toastDismiss":"cerrar","updateButton":"Actualizar","Upload":"Subir","uploadButton":"Subir","uploadingButton":"Subiendo...","Viewer":"Espectador"}
{
"all": "Todos",
"and": "y",
"cancel": "Cancelar",
"Chat": "Conversar",
"chatButton": "Conversar",
"comingSoon": "Próximamente",
"crawlButton": "Rastrear",
"createButton": "Crear",
"deleteButton": "Borrar",
"deleteForeverButton": "Borrar para siempre",
"description": "Quivr es tu segundo cerebro en la nube, diseñado para facilitar el almacenamiento y obtención de información inestructurada.",
"doneButton": "Listo",
"Editor": "Editor",
"email": "Correo electrónico",
"Explore": "Explorar",
"invalidUrl": "URL inválida",
"lang": "es-ES",
"languageSelect": "Idioma preferido",
"loading": "Cargando...",
"logoutButton": "Cerrar sesión",
"newChatButton": "Nueva conversación",
"next": "Siguiente",
"or": "o",
"Owner": "Propietario",
"previous": "Anterior",
"resetButton": "Restaurar",
"saveButton": "Guardar",
"shareButton": "Compartir",
"themeSelect": "Tema de interfaz",
"title": "Quivr - Tu segundo cerebro con IA generativa",
"toastDismiss": "cerrar",
"updateButton": "Actualizar",
"Upload": "Subir",
"uploadButton": "Subir",
"uploadingButton": "Subiendo...",
"Viewer": "Espectador"
}

View File

@ -1 +1,10 @@
{"title":"Uso del cerebro de {{user}}","fetching":"Obteniendo tus datos...","requestsCount":"Peticiones de hoy: {{count}}","brainSize":"Espacio sobrante en cerebro","empty":"Vacío","Used":"Usado","Unused":"Sin usar","brainUsage":"Uso del cerebro"}
{
"title": "Uso del cerebro de {{user}}",
"fetching": "Obteniendo tus datos...",
"requestsCount": "Peticiones de hoy: {{count}}",
"brainSize": "Espacio sobrante en cerebro",
"empty": "Vacío",
"Used": "Usado",
"Unused": "Sin usar",
"brainUsage": "Uso del cerebro"
}

View File

@ -1 +1,56 @@
{"accountSection":"Votre Compte","anthropicKeyLabel":"Clé API Anthropic","anthropicKeyPlaceholder":"Clé API Anthropic","apiKey":"Clé API","backendSection":"Configuration du backend","backendUrlLabel":"URL du backend","backendUrlPlaceHolder":"URL du backend","brainUpdated":"Cerveau mis à jour avec succès","configReset":"Configuration réinitialisée","configSaved":"Configuration sauvegardée","customPromptSection":"Invite personnalisée","defaultBrainSet":"Cerveau défini par défaut avec succès","descriptionRequired":"La description est requise","error":{"copy":"Échec de la copie","createApiKey":"Erreur lors de la création de la clé API"},"errorRemovingPrompt":"Erreur lors de la suppression de l'invite","incorrectApiKey":"Clé API incorrecte","invalidApiKeyError":"Clé API invalide","invalidOpenAiKey":"Clé OpenAI invalide","keepInLocal":"Garder en local","knowledge":"Connaissances","maxTokens":"Jetons max","modelLabel":"Modèle","modelSection":"Configuration du modèle","nameRequired":"Le nom est requis","newAPIKey":"Créer une nouvelle clé","noUser":"Pas d'utilisateur","ohno":"Oh non !","openAiKeyLabel":"Clé Open AI","openAiKeyPlaceholder":"sk-xxx","people":"Personnes","promptContent":"Contenu de l'invite","promptContentPlaceholder":"En tant qu'IA, vous...","promptFieldsRequired":"Le titre et le contenu de l'invite sont requis","promptName":"Titre de l'invite","promptNamePlaceholder":"Mon super nom d'invite","promptRemoved":"Invite supprimée avec succès","publicPrompts":"Choisir dans les invites publiques","removePrompt":"Supprimer l'invite","requireAccess":"Veuillez demander l'accès au propriétaire.","roleRequired":"Vous n'avez pas le rôle nécessaire pour accéder à cet onglet 🧠💡🥲.","selectQuivrPersonalityBtn":"Sélectionnez une personnalité Quivr","settings":"Paramètres","signedInAs":"Connecté en tant que","subtitle":"Gérez votre cerveau","supabaseKeyLabel":"Clé Supabase","supabaseKeyPlaceHolder":"Clé Supabase","supabaseURLLabel":"URL Supabase","supabaseURLPlaceHolder":"URL Supabase","temperature":"Température","title":"Configuration","updatingBrainSettings":"Mise à jour des paramètres du cerveau..."}
{
"accountSection": "Votre Compte",
"anthropicKeyLabel": "Clé API Anthropic",
"anthropicKeyPlaceholder": "Clé API Anthropic",
"apiKey": "Clé API",
"backendSection": "Configuration du backend",
"backendUrlLabel": "URL du backend",
"backendUrlPlaceHolder": "URL du backend",
"brainUpdated": "Cerveau mis à jour avec succès",
"configReset": "Configuration réinitialisée",
"configSaved": "Configuration sauvegardée",
"customPromptSection": "Invite personnalisée",
"defaultBrainSet": "Cerveau défini par défaut avec succès",
"descriptionRequired": "La description est requise",
"error": {
"copy": "Échec de la copie",
"createApiKey": "Erreur lors de la création de la clé API"
},
"errorRemovingPrompt": "Erreur lors de la suppression de l'invite",
"incorrectApiKey": "Clé API incorrecte",
"invalidApiKeyError": "Clé API invalide",
"invalidOpenAiKey": "Clé OpenAI invalide",
"keepInLocal": "Garder en local",
"knowledge": "Connaissances",
"maxTokens": "Jetons max",
"modelLabel": "Modèle",
"modelSection": "Configuration du modèle",
"nameRequired": "Le nom est requis",
"newAPIKey": "Créer une nouvelle clé",
"noUser": "Pas d'utilisateur",
"ohno": "Oh non !",
"openAiKeyLabel": "Clé Open AI",
"openAiKeyPlaceholder": "sk-xxx",
"people": "Personnes",
"promptContent": "Contenu de l'invite",
"promptContentPlaceholder": "En tant qu'IA, vous...",
"promptFieldsRequired": "Le titre et le contenu de l'invite sont requis",
"promptName": "Titre de l'invite",
"promptNamePlaceholder": "Mon super nom d'invite",
"promptRemoved": "Invite supprimée avec succès",
"publicPrompts": "Choisir dans les invites publiques",
"removePrompt": "Supprimer l'invite",
"requireAccess": "Veuillez demander l'accès au propriétaire.",
"roleRequired": "Vous n'avez pas le rôle nécessaire pour accéder à cet onglet 🧠💡🥲.",
"selectQuivrPersonalityBtn": "Sélectionnez une personnalité Quivr",
"settings": "Paramètres",
"signedInAs": "Connecté en tant que",
"subtitle": "Gérez votre cerveau",
"supabaseKeyLabel": "Clé Supabase",
"supabaseKeyPlaceHolder": "Clé Supabase",
"supabaseURLLabel": "URL Supabase",
"supabaseURLPlaceHolder": "URL Supabase",
"temperature": "Température",
"title": "Configuration",
"updatingBrainSettings": "Mise à jour des paramètres du cerveau..."
}

View File

@ -1,14 +1,14 @@
{
"speak_to": "Parlez à notre",
"sales_team": "équipe de vente",
"pricing": "Tarif",
"form": {
"email": "Courriel professionnel",
"question": "Question",
"submit": "Contacter",
"placeholder_question": "Comment pouvons-nous vous aider ?",
"thank_you": "Merci !",
"thank_you_text": "Nous vous répondrons dès que possible.",
"sending_mail_error": "Une erreur s'est produite lors de l'envoi de votre message. Veuillez réessayer plus tard."
}
}
"speak_to": "Parlez à notre",
"sales_team": "équipe de vente",
"pricing": "Tarif",
"form": {
"email": "Courriel professionnel",
"question": "Question",
"submit": "Contacter",
"placeholder_question": "Comment pouvons-nous vous aider ?",
"thank_you": "Merci !",
"thank_you_text": "Nous vous répondrons dès que possible.",
"sending_mail_error": "Une erreur s'est produite lors de l'envoi de votre message. Veuillez réessayer plus tard."
}
}

View File

@ -1,11 +1,11 @@
{
"deleteButton": "Supprimer le cerveau",
"deleteConfirmQuestion": "Êtes-vous sûr de vouloir supprimer le cerveau? Cette action est irréversible!",
"deleteConfirmYes": "Oui, supprimer",
"returnButton": "Retour",
"unsubscribeButton": "Se désabonner du cerveau",
"unsubscribeConfirmQuestion": "Êtes-vous sûr de vouloir vous désabonner de ce cerveau ?",
"unsubscribeConfirmYes": "Oui, se désabonner de ce cerveau",
"successfully_deleted": "Cerveau supprimé avec succès.",
"successfully_unsubscribed": "Vous vous êtes désabonné avec succès de ce cerveau."
}
"deleteButton": "Supprimer le cerveau",
"deleteConfirmQuestion": "Êtes-vous sûr de vouloir supprimer le cerveau? Cette action est irréversible!",
"deleteConfirmYes": "Oui, supprimer",
"returnButton": "Retour",
"unsubscribeButton": "Se désabonner du cerveau",
"unsubscribeConfirmQuestion": "Êtes-vous sûr de vouloir vous désabonner de ce cerveau ?",
"unsubscribeConfirmYes": "Oui, se désabonner de ce cerveau",
"successfully_deleted": "Cerveau supprimé avec succès.",
"successfully_unsubscribed": "Vous vous êtes désabonné avec succès de ce cerveau."
}

View File

@ -1 +1,15 @@
{"title":"Explorez les données téléchargées","subtitle":"Visualisez, téléchargez ou supprimez les connaissances utilisées par votre cerveau","empty":"Oh non, votre cerveau est vide.","noBrain":"ID du cerveau introuvable","sessionNotFound":"Session utilisateur introuvable","deleted":"{{fileName}} supprimé du cerveau {{brain}}","errorDeleting":"Erreur lors de la suppression de {{fileName}}","view":"Voir","chunkNumber":"Nombre de fragments : {{quantity}}","notAvailable":"Non disponible","deleteConfirmTitle":"Confirmer","deleteConfirmText":"Voulez-vous vraiment supprimer ?","feed_brain_instructions":"Pour ajouter des connaissances à un cerveau, allez sur la page de chat, puis cliquez sur le bouton plus à gauche de la zone de chat."}
{
"title": "Explorez les données téléchargées",
"subtitle": "Visualisez, téléchargez ou supprimez les connaissances utilisées par votre cerveau",
"empty": "Oh non, votre cerveau est vide.",
"noBrain": "ID du cerveau introuvable",
"sessionNotFound": "Session utilisateur introuvable",
"deleted": "{{fileName}} supprimé du cerveau {{brain}}",
"errorDeleting": "Erreur lors de la suppression de {{fileName}}",
"view": "Voir",
"chunkNumber": "Nombre de fragments : {{quantity}}",
"notAvailable": "Non disponible",
"deleteConfirmTitle": "Confirmer",
"deleteConfirmText": "Voulez-vous vraiment supprimer ?",
"feed_brain_instructions": "Pour ajouter des connaissances à un cerveau, allez sur la page de chat, puis cliquez sur le bouton plus à gauche de la zone de chat."
}

View File

@ -1 +1,14 @@
{"method_label":"Method","url_placeholder":"URL","searchParams":"Search Params","headers":"Headers","params":"Params","key":"Key","type":"Type (string or number)","description":"Description","secrets":"Secrets","paramsTabDescription":"Ces valeurs sont envoyées sous forme de corps de requête.","searchParamsTabDescription":"Ces valeurs sont envoyées sous forme de chaîne de requête.","secretsTabDescription":"Ces valeurs sont envoyées sous forme de clés d'en-tête."}
{
"method_label": "Method",
"url_placeholder": "URL",
"searchParams": "Search Params",
"headers": "Headers",
"params": "Params",
"key": "Key",
"type": "Type (string or number)",
"description": "Description",
"secrets": "Secrets",
"paramsTabDescription": "Ces valeurs sont envoyées sous forme de corps de requête.",
"searchParamsTabDescription": "Ces valeurs sont envoyées sous forme de chaîne de requête.",
"secretsTabDescription": "Ces valeurs sont envoyées sous forme de clés d'en-tête."
}

View File

@ -1,36 +1,36 @@
{
"sign_in": "Se connecter",
"docs": "Docs",
"pricing": "Tarif",
"sign_up": "S'inscrire",
"star_us": "Étoilez-nous sur Github",
"blog": "Blog",
"sponsored_by": "Sponsorisé par",
"useCases": {
"title": "Expérimentez-le maintenant.",
"subtitle": "Consultez notre exemple d'utilisation de Quivr."
},
"intro": {
"title": "Obtenez un deuxième cerveau avec",
"subtitle": "Téléchargez tous vos fichiers et commencez à discuter avec eux.",
"try_demo": "Essayez la démo gratuite",
"contact_sales": "Contactez l'équipe commerciale"
},
"demo": {
"title": "Vidéo de démonstration",
"start_now": "Commencer maintenant"
},
"security": {
"cta": "Commencez dès aujourd'hui"
},
"footer": {
"title": "Commencez aujourd'hui",
"description_1": "Votre assistant personnel qui agit comme votre Deuxième Cerveau.",
"description_2": "Il vous suffit de télécharger vos fichiers et de lui poser des questions.",
"start_using": "Commencez à utiliser Quivr",
"contact_sales": "Contacter l'équipe commerciale"
},
"testimonials": {
"title": "Ce que les gens disent à propos de"
}
}
"sign_in": "Se connecter",
"docs": "Docs",
"pricing": "Tarif",
"sign_up": "S'inscrire",
"star_us": "Étoilez-nous sur Github",
"blog": "Blog",
"sponsored_by": "Sponsorisé par",
"useCases": {
"title": "Expérimentez-le maintenant.",
"subtitle": "Consultez notre exemple d'utilisation de Quivr."
},
"intro": {
"title": "Obtenez un deuxième cerveau avec",
"subtitle": "Téléchargez tous vos fichiers et commencez à discuter avec eux.",
"try_demo": "Essayez la démo gratuite",
"contact_sales": "Contactez l'équipe commerciale"
},
"demo": {
"title": "Vidéo de démonstration",
"start_now": "Commencer maintenant"
},
"security": {
"cta": "Commencez dès aujourd'hui"
},
"footer": {
"title": "Commencez aujourd'hui",
"description_1": "Votre assistant personnel qui agit comme votre Deuxième Cerveau.",
"description_2": "Il vous suffit de télécharger vos fichiers et de lui poser des questions.",
"start_using": "Commencez à utiliser Quivr",
"contact_sales": "Contacter l'équipe commerciale"
},
"testimonials": {
"title": "Ce que les gens disent à propos de"
}
}

View File

@ -1 +1,13 @@
{"wellcome":"Bienvenue sur {{brain}} !","invitationMessage":"Vous avez été invité(e) à rejoindre ce cerveau en tant que {{role}} et à commencer à explorer. Acceptez-vous ce voyage passionnant ?","processingRequest":"Traitement de votre demande en cours...","accept":"Oui, je suis partant(e) !","reject":"Non, merci","invitationNotFound":"Cette invitation n'est pas valide","errorCheckingInvitation":"Une erreur s'est produite lors de la vérification de l'invitation","accepted":"Invitation acceptée","errorAccepting":"Une erreur s'est produite lors de l'acceptation de l'invitation","declined":"Invitation refusée","errorDeclining":"Une erreur s'est produite lors du refus de l'invitation"}
{
"wellcome": "Bienvenue sur {{brain}} !",
"invitationMessage": "Vous avez été invité(e) à rejoindre ce cerveau en tant que {{role}} et à commencer à explorer. Acceptez-vous ce voyage passionnant ?",
"processingRequest": "Traitement de votre demande en cours...",
"accept": "Oui, je suis partant(e) !",
"reject": "Non, merci",
"invitationNotFound": "Cette invitation n'est pas valide",
"errorCheckingInvitation": "Une erreur s'est produite lors de la vérification de l'invitation",
"accepted": "Invitation acceptée",
"errorAccepting": "Une erreur s'est produite lors de l'acceptation de l'invitation",
"declined": "Invitation refusée",
"errorDeclining": "Une erreur s'est produite lors du refus de l'invitation"
}

View File

@ -1,19 +1,19 @@
{
"password": "Mot de passe",
"googleLogin": "Continuer avec Google",
"azureLogin": "Continuer avec Azure",
"errorPasswordMissed": "Veuillez entrer votre mot de passe",
"magicLink": "Continuer avec e-mail",
"errorMailMissed": "Veuillez saisir votre adresse e-mail",
"talk_to": "Parler à",
"restriction_message": "Les utilisateurs non payants ont accès à une démonstration gratuite et limitée de Quivr",
"email": "Adresse e-mail",
"cant_find": "Vous ne le trouvez pas ?",
"try_again": "Réessayez",
"check_your_email": {
"part1": "Nous venons de vous envoyer un ",
"magic_link": "lien magique",
"part2": ". Vérifiez vos e-mails et suivez les étapes."
},
"login": "Se connecter"
}
"password": "Mot de passe",
"googleLogin": "Continuer avec Google",
"azureLogin": "Continuer avec Azure",
"errorPasswordMissed": "Veuillez entrer votre mot de passe",
"magicLink": "Continuer avec e-mail",
"errorMailMissed": "Veuillez saisir votre adresse e-mail",
"talk_to": "Parler à",
"restriction_message": "Les utilisateurs non payants ont accès à une démonstration gratuite et limitée de Quivr",
"email": "Adresse e-mail",
"cant_find": "Vous ne le trouvez pas ?",
"try_again": "Réessayez",
"check_your_email": {
"part1": "Nous venons de vous envoyer un ",
"magic_link": "lien magique",
"part2": ". Vérifiez vos e-mails et suivez les étapes."
},
"login": "Se connecter"
}

View File

@ -1 +1,8 @@
{"title":"Déconnexion","subtitle":"À la prochaine","areYouSure":"Êtes-vous sûr de vouloir vous déconnecter ?","cancel":"Annuler","error":"Erreur lors de la déconnexion {{errorMessage}}","loggedOut":"Déconnexion réussie"}
{
"title": "Déconnexion",
"subtitle": "À la prochaine",
"areYouSure": "Êtes-vous sûr de vouloir vous déconnecter ?",
"cancel": "Annuler",
"error": "Erreur lors de la déconnexion {{errorMessage}}",
"loggedOut": "Déconnexion réussie"
}

View File

@ -1 +1,38 @@
{"all":"Tout","and":"et","cancel":"Annuler","Chat":"Chat","chatButton":"Chat","comingSoon":"Bientôt disponible","crawlButton":"Crawler","createButton":"Créer","deleteButton":"Supprimer","deleteForeverButton":"Supprimer définitivement","description":"Quivr est votre deuxième cerveau dans le nuage, conçu pour stocker et récupérer facilement des informations non structurées.","doneButton":"Fait","Editor":"Éditeur","email":"Email","Explore":"Explorer","invalidUrl":"URL invalide","lang":"fr-FR","languageSelect":"Langue préférée","loading":"Chargement...","logoutButton":"Déconnexion","newChatButton":"Nouveau chat","next":"Suivant","or":"ou","Owner":"Propriétaire","previous":"Précédent","resetButton":"Réinitialiser","saveButton":"Sauvegarder","shareButton":"Partager","themeSelect":"Thème de l'interface","title":"Quivr - Obtenez un deuxième cerveau avec l'IA générative","toastDismiss":"ignorer","updateButton":"Mettre à jour","Upload":"Télécharger","uploadButton":"Télécharger","uploadingButton":"Téléchargement...","Viewer":"Visualiseur"}
{
"all": "Tout",
"and": "et",
"cancel": "Annuler",
"Chat": "Chat",
"chatButton": "Chat",
"comingSoon": "Bientôt disponible",
"crawlButton": "Crawler",
"createButton": "Créer",
"deleteButton": "Supprimer",
"deleteForeverButton": "Supprimer définitivement",
"description": "Quivr est votre deuxième cerveau dans le nuage, conçu pour stocker et récupérer facilement des informations non structurées.",
"doneButton": "Fait",
"Editor": "Éditeur",
"email": "Email",
"Explore": "Explorer",
"invalidUrl": "URL invalide",
"lang": "fr-FR",
"languageSelect": "Langue préférée",
"loading": "Chargement...",
"logoutButton": "Déconnexion",
"newChatButton": "Nouveau chat",
"next": "Suivant",
"or": "ou",
"Owner": "Propriétaire",
"previous": "Précédent",
"resetButton": "Réinitialiser",
"saveButton": "Sauvegarder",
"shareButton": "Partager",
"themeSelect": "Thème de l'interface",
"title": "Quivr - Obtenez un deuxième cerveau avec l'IA générative",
"toastDismiss": "ignorer",
"updateButton": "Mettre à jour",
"Upload": "Télécharger",
"uploadButton": "Télécharger",
"uploadingButton": "Téléchargement...",
"Viewer": "Visualiseur"
}

View File

@ -1 +1,10 @@
{"title":"Utilisation du cerveau de {{user}}","fetching":"Récupération de vos données...","requestsCount":"Requêtes d'aujourd'hui : {{count}}","brainSize":"Taille du cerveau restante","empty":"Vide","Used":"Utilisé","Unused":"Inutilisé","brainUsage":"Utilisation du cerveau"}
{
"title": "Utilisation du cerveau de {{user}}",
"fetching": "Récupération de vos données...",
"requestsCount": "Requêtes d'aujourd'hui : {{count}}",
"brainSize": "Taille du cerveau restante",
"empty": "Vide",
"Used": "Utilisé",
"Unused": "Inutilisé",
"brainUsage": "Utilisation du cerveau"
}

View File

@ -1 +1,56 @@
{"accountSection":"Sua Conta","anthropicKeyLabel":"Chave da API Anthropic","anthropicKeyPlaceholder":"Chave da API Anthropic","apiKey":"Chave de API","backendSection":"Configuração do backend","backendUrlLabel":"URL do Backend","backendUrlPlaceHolder":"URL do Backend","brainUpdated":"Cérebro atualizado com sucesso","configReset":"Configuração redefinida","configSaved":"Configuração salva","customPromptSection":"Prompt personalizado","defaultBrainSet":"Cérebro definido como padrão com sucesso","descriptionRequired":"A descrição é obrigatória","error":{"copy":"Falha ao copiar","createApiKey":"Erro ao criar a chave de API"},"errorRemovingPrompt":"Erro ao remover o prompt","incorrectApiKey":"Chave de API incorreta","invalidApiKeyError":"Chave de API inválida","invalidOpenAiKey":"Chave OpenAI inválida","keepInLocal":"Manter localmente","knowledge":"Conhecimento","maxTokens":"Máximo de tokens","modelLabel":"Modelo","modelSection":"Configuração do modelo","nameRequired":"O nome é obrigatório","newAPIKey":"Criar Nova Chave","noUser":"Nenhum usuário","ohno":"Oh, não!","openAiKeyLabel":"Chave Open AI","openAiKeyPlaceholder":"sk-xxx","people":"Pessoas","promptContent":"Conteúdo do Prompt","promptContentPlaceholder":"Como uma IA, você...","promptFieldsRequired":"Título e conteúdo do prompt são obrigatórios","promptName":"Título do Prompt","promptNamePlaceholder":"Nome incrível para meu prompt","promptRemoved":"Prompt removido com sucesso","publicPrompts":"Escolher em prompts públicos","removePrompt":"Remover prompt","requireAccess":"Por favor, solicite acesso ao proprietário.","roleRequired":"Você não possui a função necessária para acessar esta aba 🧠💡🥲.","selectQuivrPersonalityBtn":"Selecione uma personalidade Quivr","settings":"Configurações","signedInAs":"Logado como","subtitle":"Gerencie o seu cérebro","supabaseKeyLabel":"Chave do Supabase","supabaseKeyPlaceHolder":"Chave do Supabase","supabaseURLLabel":"URL do Supabase","supabaseURLPlaceHolder":"URL do Supabase","temperature":"Temperatura","title":"Configuração","updatingBrainSettings":"Atualizando configurações do cérebro..."}
{
"accountSection": "Sua Conta",
"anthropicKeyLabel": "Chave da API Anthropic",
"anthropicKeyPlaceholder": "Chave da API Anthropic",
"apiKey": "Chave de API",
"backendSection": "Configuração do backend",
"backendUrlLabel": "URL do Backend",
"backendUrlPlaceHolder": "URL do Backend",
"brainUpdated": "Cérebro atualizado com sucesso",
"configReset": "Configuração redefinida",
"configSaved": "Configuração salva",
"customPromptSection": "Prompt personalizado",
"defaultBrainSet": "Cérebro definido como padrão com sucesso",
"descriptionRequired": "A descrição é obrigatória",
"error": {
"copy": "Falha ao copiar",
"createApiKey": "Erro ao criar a chave de API"
},
"errorRemovingPrompt": "Erro ao remover o prompt",
"incorrectApiKey": "Chave de API incorreta",
"invalidApiKeyError": "Chave de API inválida",
"invalidOpenAiKey": "Chave OpenAI inválida",
"keepInLocal": "Manter localmente",
"knowledge": "Conhecimento",
"maxTokens": "Máximo de tokens",
"modelLabel": "Modelo",
"modelSection": "Configuração do modelo",
"nameRequired": "O nome é obrigatório",
"newAPIKey": "Criar Nova Chave",
"noUser": "Nenhum usuário",
"ohno": "Oh, não!",
"openAiKeyLabel": "Chave Open AI",
"openAiKeyPlaceholder": "sk-xxx",
"people": "Pessoas",
"promptContent": "Conteúdo do Prompt",
"promptContentPlaceholder": "Como uma IA, você...",
"promptFieldsRequired": "Título e conteúdo do prompt são obrigatórios",
"promptName": "Título do Prompt",
"promptNamePlaceholder": "Nome incrível para meu prompt",
"promptRemoved": "Prompt removido com sucesso",
"publicPrompts": "Escolher em prompts públicos",
"removePrompt": "Remover prompt",
"requireAccess": "Por favor, solicite acesso ao proprietário.",
"roleRequired": "Você não possui a função necessária para acessar esta aba 🧠💡🥲.",
"selectQuivrPersonalityBtn": "Selecione uma personalidade Quivr",
"settings": "Configurações",
"signedInAs": "Logado como",
"subtitle": "Gerencie o seu cérebro",
"supabaseKeyLabel": "Chave do Supabase",
"supabaseKeyPlaceHolder": "Chave do Supabase",
"supabaseURLLabel": "URL do Supabase",
"supabaseURLPlaceHolder": "URL do Supabase",
"temperature": "Temperatura",
"title": "Configuração",
"updatingBrainSettings": "Atualizando configurações do cérebro..."
}

View File

@ -1,14 +1,14 @@
{
"speak_to": "Fale com o nosso",
"sales_team": "time de vendas",
"pricing": "Preços",
"form": {
"email": "E-mail de trabalho",
"question": "Pergunta",
"submit": "Contato",
"placeholder_question": "Como podemos ajudar?",
"thank_you": "Obrigado!",
"thank_you_text": "Entraremos em contato o mais rápido possível.",
"sending_mail_error": "Ocorreu um erro ao enviar sua mensagem. Por favor, tente novamente mais tarde."
}
}
"speak_to": "Fale com o nosso",
"sales_team": "time de vendas",
"pricing": "Preços",
"form": {
"email": "E-mail de trabalho",
"question": "Pergunta",
"submit": "Contato",
"placeholder_question": "Como podemos ajudar?",
"thank_you": "Obrigado!",
"thank_you_text": "Entraremos em contato o mais rápido possível.",
"sending_mail_error": "Ocorreu um erro ao enviar sua mensagem. Por favor, tente novamente mais tarde."
}
}

View File

@ -1,11 +1,11 @@
{
"deleteButton": "Excluir Cérebro",
"deleteConfirmQuestion": "Você tem certeza de que deseja excluir este cérebro? Essa ação não pode ser desfeita.",
"deleteConfirmYes": "Sim, excluir este cérebro",
"returnButton": "Retornar",
"unsubscribeButton": "Cancelar inscrição do cérebro",
"unsubscribeConfirmQuestion": "Você tem certeza de que deseja cancelar a inscrição deste cérebro?",
"unsubscribeConfirmYes": "Sim, cancelar a inscrição deste cérebro",
"successfully_deleted": "Cérebro excluído com sucesso.",
"successfully_unsubscribed": "Você se desinscreveu com sucesso deste cérebro."
}
"deleteButton": "Excluir Cérebro",
"deleteConfirmQuestion": "Você tem certeza de que deseja excluir este cérebro? Essa ação não pode ser desfeita.",
"deleteConfirmYes": "Sim, excluir este cérebro",
"returnButton": "Retornar",
"unsubscribeButton": "Cancelar inscrição do cérebro",
"unsubscribeConfirmQuestion": "Você tem certeza de que deseja cancelar a inscrição deste cérebro?",
"unsubscribeConfirmYes": "Sim, cancelar a inscrição deste cérebro",
"successfully_deleted": "Cérebro excluído com sucesso.",
"successfully_unsubscribed": "Você se desinscreveu com sucesso deste cérebro."
}

View File

@ -1 +1,15 @@
{"title":"Explorar dados enviados","subtitle":"Visualize, baixe ou exclua o conhecimento usado pelo seu cérebro","empty":"Oh, não! Seu Cérebro está vazio.","noBrain":"Cérebro não encontrado","sessionNotFound":"Sessão do usuário não encontrada","deleted":"{{fileName}} excluído do cérebro {{brain}}","errorDeleting":"Erro ao excluir {{fileName}}","view":"Visualizar","chunkNumber":"Número de partes: {{quantity}}","notAvailable":"Indisponível","deleteConfirmTitle":"Confirmar","deleteConfirmText":"Você realmente deseja excluir?","feed_brain_instructions":"Para adicionar conhecimento a um cérebro, vá para a página de chat e clique no botão de adição à esquerda da entrada de chat."}
{
"title": "Explorar dados enviados",
"subtitle": "Visualize, baixe ou exclua o conhecimento usado pelo seu cérebro",
"empty": "Oh, não! Seu Cérebro está vazio.",
"noBrain": "Cérebro não encontrado",
"sessionNotFound": "Sessão do usuário não encontrada",
"deleted": "{{fileName}} excluído do cérebro {{brain}}",
"errorDeleting": "Erro ao excluir {{fileName}}",
"view": "Visualizar",
"chunkNumber": "Número de partes: {{quantity}}",
"notAvailable": "Indisponível",
"deleteConfirmTitle": "Confirmar",
"deleteConfirmText": "Você realmente deseja excluir?",
"feed_brain_instructions": "Para adicionar conhecimento a um cérebro, vá para a página de chat e clique no botão de adição à esquerda da entrada de chat."
}

View File

@ -1 +1,14 @@
{"method_label":"Method","url_placeholder":"URL","searchParams":"Search Params","headers":"Headers","params":"Params","key":"Key","type":"Type (string or number)","description":"Description","secrets":"Secrets","paramsTabDescription":"Estes valores são enviados como corpo da solicitação.","searchParamsTabDescription":"Estes valores são enviados como string de consulta.","secretsTabDescription":"Estes valores são enviados como chaves de cabeçalho"}
{
"method_label": "Method",
"url_placeholder": "URL",
"searchParams": "Search Params",
"headers": "Headers",
"params": "Params",
"key": "Key",
"type": "Type (string or number)",
"description": "Description",
"secrets": "Secrets",
"paramsTabDescription": "Estes valores são enviados como corpo da solicitação.",
"searchParamsTabDescription": "Estes valores são enviados como string de consulta.",
"secretsTabDescription": "Estes valores são enviados como chaves de cabeçalho"
}

View File

@ -1,36 +1,36 @@
{
"sign_in": "Entrar",
"docs": "Documentação",
"pricing": "Preços",
"sign_up": "Cadastrar",
"star_us": "Nos avalie no Github",
"blog": "Blog",
"sponsored_by": "Patrocinado por",
"useCases": {
"title": "Experimente agora.",
"subtitle": "Confira nosso exemplo de uso do Quivr."
},
"intro": {
"title": "Obtenha um segundo cérebro com",
"subtitle": "Faça o upload de todos os seus arquivos e comece a conversar com eles.",
"try_demo": "Experimente a demonstração gratuita",
"contact_sales": "Entre em contato com a equipe de vendas"
},
"demo": {
"title": "Vídeo de demonstração",
"start_now": "Iniciar agora"
},
"security": {
"cta": "¡Comienza hoy!"
},
"footer": {
"title": "Comece hoje",
"description_1": "Seu assistente pessoal que age como seu Segundo Cérebro.",
"description_2": "Basta fazer upload de seus arquivos e fazer perguntas a ele.",
"start_using": "Comece a usar o Quivr",
"contact_sales": "Entre em contato com a equipe de vendas"
},
"testimonials": {
"title": "O que as pessoas dizem sobre"
}
}
"sign_in": "Entrar",
"docs": "Documentação",
"pricing": "Preços",
"sign_up": "Cadastrar",
"star_us": "Nos avalie no Github",
"blog": "Blog",
"sponsored_by": "Patrocinado por",
"useCases": {
"title": "Experimente agora.",
"subtitle": "Confira nosso exemplo de uso do Quivr."
},
"intro": {
"title": "Obtenha um segundo cérebro com",
"subtitle": "Faça o upload de todos os seus arquivos e comece a conversar com eles.",
"try_demo": "Experimente a demonstração gratuita",
"contact_sales": "Entre em contato com a equipe de vendas"
},
"demo": {
"title": "Vídeo de demonstração",
"start_now": "Iniciar agora"
},
"security": {
"cta": "¡Comienza hoy!"
},
"footer": {
"title": "Comece hoje",
"description_1": "Seu assistente pessoal que age como seu Segundo Cérebro.",
"description_2": "Basta fazer upload de seus arquivos e fazer perguntas a ele.",
"start_using": "Comece a usar o Quivr",
"contact_sales": "Entre em contato com a equipe de vendas"
},
"testimonials": {
"title": "O que as pessoas dizem sobre"
}
}

View File

@ -1 +1,13 @@
{"wellcome":"Bem-vindo(a) ao {{brain}}!","invitationMessage":"Você foi convidado(a) a se juntar a este cérebro como {{role}} e começar a explorar. Você aceita esta jornada emocionante?","processingRequest":"Processando o seu pedido...","accept":"Sim, estou dentro!","reject":"Não, obrigado(a).","invitationNotFound":"Este convite não é válido.","errorCheckingInvitation":"Ocorreu um erro desconhecido ao verificar o convite","accepted":"Convite aceito","errorAccepting":"Ocorreu um erro desconhecido ao aceitar o convite","declined":"Convite recusado","errorDeclining":"Ocorreu um erro desconhecido ao recusar o convite"}
{
"wellcome": "Bem-vindo(a) ao {{brain}}!",
"invitationMessage": "Você foi convidado(a) a se juntar a este cérebro como {{role}} e começar a explorar. Você aceita esta jornada emocionante?",
"processingRequest": "Processando o seu pedido...",
"accept": "Sim, estou dentro!",
"reject": "Não, obrigado(a).",
"invitationNotFound": "Este convite não é válido.",
"errorCheckingInvitation": "Ocorreu um erro desconhecido ao verificar o convite",
"accepted": "Convite aceito",
"errorAccepting": "Ocorreu um erro desconhecido ao aceitar o convite",
"declined": "Convite recusado",
"errorDeclining": "Ocorreu um erro desconhecido ao recusar o convite"
}

View File

@ -1,19 +1,19 @@
{
"password": "Senha",
"googleLogin": "Continuar com o Google",
"azureLogin": "Continuar com o Azure",
"errorPasswordMissed": "Por favor, digite sua senha",
"magicLink": "Continuar com e-mail",
"errorMailMissed": "Por favor, digite seu endereço de e-mail",
"talk_to": "Conversar com",
"restriction_message": "Usuários não pagos têm acesso a uma demonstração gratuita e limitada do Quivr",
"email": "Endereço de e-mail",
"cant_find": "Não consegue encontrar?",
"try_again": "Tente novamente",
"check_your_email": {
"part1": "Acabamos de enviar um ",
"magic_link": "link mágico",
"part2": ", verifique seus e-mails e siga as etapas."
},
"login": "Entrar"
}
"password": "Senha",
"googleLogin": "Continuar com o Google",
"azureLogin": "Continuar com o Azure",
"errorPasswordMissed": "Por favor, digite sua senha",
"magicLink": "Continuar com e-mail",
"errorMailMissed": "Por favor, digite seu endereço de e-mail",
"talk_to": "Conversar com",
"restriction_message": "Usuários não pagos têm acesso a uma demonstração gratuita e limitada do Quivr",
"email": "Endereço de e-mail",
"cant_find": "Não consegue encontrar?",
"try_again": "Tente novamente",
"check_your_email": {
"part1": "Acabamos de enviar um ",
"magic_link": "link mágico",
"part2": ", verifique seus e-mails e siga as etapas."
},
"login": "Entrar"
}

View File

@ -1 +1,8 @@
{"title":"Sair","subtitle":"Até a próxima vez","areYouSure":"Você tem certeza de que deseja sair?","cancel":"Cancelar","error":"Erro ao fazer logout {{errorMessage}}","loggedOut":"Saiu com sucesso"}
{
"title": "Sair",
"subtitle": "Até a próxima vez",
"areYouSure": "Você tem certeza de que deseja sair?",
"cancel": "Cancelar",
"error": "Erro ao fazer logout {{errorMessage}}",
"loggedOut": "Saiu com sucesso"
}

View File

@ -1 +1,38 @@
{"all":"Todos","and":"e","cancel":"Cancelar","Chat":"Chat","chatButton":"Chat","comingSoon":"Em breve","crawlButton":"Rastrear","createButton":"Criar","deleteButton":"Excluir","deleteForeverButton":"Excluir permanentemente","description":"Quivr é o seu segundo cérebro na nuvem, projetado para armazenar e recuperar facilmente informações não estruturadas.","doneButton":"Concluído","Editor":"Editor","email":"Email","Explore":"Explorar","invalidUrl":"URL inválida","lang":"pt-BR","languageSelect":"Língua preferida","loading":"Carregando...","logoutButton":"Sair","newChatButton":"Novo Chat","next":"Próximo","or":"ou","Owner":"Proprietário","previous":"Anterior","resetButton":"Redefinir","saveButton":"Salvar","shareButton":"Compartilhar","themeSelect":"Tema de interface","title":"Quivr - Tenha um Segundo Cérebro com IA Generativa","toastDismiss":"fechar","updateButton":"Atualizar","Upload":"Enviar","uploadButton":"Enviar","uploadingButton":"Enviando...","Viewer":"Visualizador"}
{
"all": "Todos",
"and": "e",
"cancel": "Cancelar",
"Chat": "Chat",
"chatButton": "Chat",
"comingSoon": "Em breve",
"crawlButton": "Rastrear",
"createButton": "Criar",
"deleteButton": "Excluir",
"deleteForeverButton": "Excluir permanentemente",
"description": "Quivr é o seu segundo cérebro na nuvem, projetado para armazenar e recuperar facilmente informações não estruturadas.",
"doneButton": "Concluído",
"Editor": "Editor",
"email": "Email",
"Explore": "Explorar",
"invalidUrl": "URL inválida",
"lang": "pt-BR",
"languageSelect": "Língua preferida",
"loading": "Carregando...",
"logoutButton": "Sair",
"newChatButton": "Novo Chat",
"next": "Próximo",
"or": "ou",
"Owner": "Proprietário",
"previous": "Anterior",
"resetButton": "Redefinir",
"saveButton": "Salvar",
"shareButton": "Compartilhar",
"themeSelect": "Tema de interface",
"title": "Quivr - Tenha um Segundo Cérebro com IA Generativa",
"toastDismiss": "fechar",
"updateButton": "Atualizar",
"Upload": "Enviar",
"uploadButton": "Enviar",
"uploadingButton": "Enviando...",
"Viewer": "Visualizador"
}

View File

@ -1 +1,10 @@
{"title":"Uso do Cérebro de {{user}}","fetching":"Buscando seus dados...","requestsCount":"Requisições de Hoje: {{count}}","brainSize":"Tamanho Restante do Cérebro","empty":"Vazio","Used":"Usado","Unused":"Não Usado","brainUsage":"Uso do Cérebro"}
{
"title": "Uso do Cérebro de {{user}}",
"fetching": "Buscando seus dados...",
"requestsCount": "Requisições de Hoje: {{count}}",
"brainSize": "Tamanho Restante do Cérebro",
"empty": "Vazio",
"Used": "Usado",
"Unused": "Não Usado",
"brainUsage": "Uso do Cérebro"
}

View File

@ -1 +1,56 @@
{"accountSection":"Ваш аккаунт","anthropicKeyLabel":"Ключ Anthropic API","anthropicKeyPlaceholder":"Ключ Anthropic API","apiKey":"ключ API","backendSection":"Настройки бэкенда","backendUrlLabel":"URL бэкенда","backendUrlPlaceHolder":"URL бэкенда","brainUpdated":"Мозг успешно обновлен","configReset":"Настройки сброшены","configSaved":"Настройки сохранены","customPromptSection":"Пользовательский запрос","defaultBrainSet":"Мозг успешно установлен по умолчанию","descriptionRequired":"Описание обязательно","error":{"copy":"Не удалось скопировать","createApiKey":"Ошибка при создании API ключа"},"errorRemovingPrompt":"Ошибка при удалении запроса","incorrectApiKey":"Неверный ключ API","invalidApiKeyError":"Недействительный ключ API","invalidOpenAiKey":"Недействительный ключ OpenAI","keepInLocal":"Сохранить локально","knowledge":"Знания","maxTokens":"Максимальное количество токенов","modelLabel":"Модель","modelSection":"Настройки модели","nameRequired":"Имя обязательно","newAPIKey":"Создать новый ключ","noUser":"Пользователь не найден","ohno":"О нет!","openAiKeyLabel":"Ключ Open AI","openAiKeyPlaceholder":"sk-xxx","people":"Люди","promptContent":"Содержание запроса","promptContentPlaceholder":"Как искусственный интеллект, ваше...","promptFieldsRequired":"Название и содержание запроса обязательны","promptName":"Название запроса","promptNamePlaceholder":"Название моего потрясающего запроса","promptRemoved":"Запрос успешно удален","publicPrompts":"Выбрать из публичных запросов","removePrompt":"Удалить запрос","requireAccess":"Пожалуйста, запросите доступ у владельца.","roleRequired":"У вас нет необходимой роли для доступа к этой вкладке 🧠💡🥲.","selectQuivrPersonalityBtn":"Выберите личность Quivr","settings":"Настройки","signedInAs":"Вы вошли как","subtitle":"Управление вашим мозгом","supabaseKeyLabel":"Ключ Supabase","supabaseKeyPlaceHolder":"Ключ Supabase","supabaseURLLabel":"URL Supabase","supabaseURLPlaceHolder":"URL Supabase","temperature":"Температура","title":"Настройки","updatingBrainSettings":"Обновление настроек мозга..."}
{
"accountSection": "Ваш аккаунт",
"anthropicKeyLabel": "Ключ Anthropic API",
"anthropicKeyPlaceholder": "Ключ Anthropic API",
"apiKey": "ключ API",
"backendSection": "Настройки бэкенда",
"backendUrlLabel": "URL бэкенда",
"backendUrlPlaceHolder": "URL бэкенда",
"brainUpdated": "Мозг успешно обновлен",
"configReset": "Настройки сброшены",
"configSaved": "Настройки сохранены",
"customPromptSection": "Пользовательский запрос",
"defaultBrainSet": "Мозг успешно установлен по умолчанию",
"descriptionRequired": "Описание обязательно",
"error": {
"copy": "Не удалось скопировать",
"createApiKey": "Ошибка при создании API ключа"
},
"errorRemovingPrompt": "Ошибка при удалении запроса",
"incorrectApiKey": "Неверный ключ API",
"invalidApiKeyError": "Недействительный ключ API",
"invalidOpenAiKey": "Недействительный ключ OpenAI",
"keepInLocal": "Сохранить локально",
"knowledge": "Знания",
"maxTokens": "Максимальное количество токенов",
"modelLabel": "Модель",
"modelSection": "Настройки модели",
"nameRequired": "Имя обязательно",
"newAPIKey": "Создать новый ключ",
"noUser": "Пользователь не найден",
"ohno": "О нет!",
"openAiKeyLabel": "Ключ Open AI",
"openAiKeyPlaceholder": "sk-xxx",
"people": "Люди",
"promptContent": "Содержание запроса",
"promptContentPlaceholder": "Как искусственный интеллект, ваше...",
"promptFieldsRequired": "Название и содержание запроса обязательны",
"promptName": "Название запроса",
"promptNamePlaceholder": "Название моего потрясающего запроса",
"promptRemoved": "Запрос успешно удален",
"publicPrompts": "Выбрать из публичных запросов",
"removePrompt": "Удалить запрос",
"requireAccess": "Пожалуйста, запросите доступ у владельца.",
"roleRequired": "У вас нет необходимой роли для доступа к этой вкладке 🧠💡🥲.",
"selectQuivrPersonalityBtn": "Выберите личность Quivr",
"settings": "Настройки",
"signedInAs": "Вы вошли как",
"subtitle": "Управление вашим мозгом",
"supabaseKeyLabel": "Ключ Supabase",
"supabaseKeyPlaceHolder": "Ключ Supabase",
"supabaseURLLabel": "URL Supabase",
"supabaseURLPlaceHolder": "URL Supabase",
"temperature": "Температура",
"title": "Настройки",
"updatingBrainSettings": "Обновление настроек мозга..."
}

View File

@ -1,14 +1,14 @@
{
"speak_to": "Говорите с нашим",
"sales_team": "коммерческим отделом",
"pricing": "Цены",
"form": {
"email": "Рабочий электронный адрес",
"question": "Вопрос",
"submit": "Контакт",
"placeholder_question": "Как мы можем вам помочь?",
"thank_you": "Спасибо!",
"thank_you_text": "Мы свяжемся с вами как можно скорее.",
"sending_mail_error": "При отправке вашего сообщения произошла ошибка. Пожалуйста, попробуйте еще раз позже."
}
}
"speak_to": "Говорите с нашим",
"sales_team": "коммерческим отделом",
"pricing": "Цены",
"form": {
"email": "Рабочий электронный адрес",
"question": "Вопрос",
"submit": "Контакт",
"placeholder_question": "Как мы можем вам помочь?",
"thank_you": "Спасибо!",
"thank_you_text": "Мы свяжемся с вами как можно скорее.",
"sending_mail_error": "При отправке вашего сообщения произошла ошибка. Пожалуйста, попробуйте еще раз позже."
}
}

View File

@ -1,11 +1,11 @@
{
"deleteButton": "Удалить мозг",
"deleteConfirmQuestion": "Вы уверены, что хотите удалить этот мозг? Это действие нельзя отменить.",
"deleteConfirmYes": "Да, удалить этот мозг",
"returnButton": "Вернуться",
"unsubscribeButton": "Отписаться от мозга",
"unsubscribeConfirmQuestion": "Вы уверены, что хотите отписаться от этого мозга?",
"unsubscribeConfirmYes": "Да, отписаться от этого сознания",
"successfully_deleted": "Мозг успешно удален.",
"successfully_unsubscribed": "Вы успешно отписались от этого мозга."
"deleteButton": "Удалить мозг",
"deleteConfirmQuestion": "Вы уверены, что хотите удалить этот мозг? Это действие нельзя отменить.",
"deleteConfirmYes": "Да, удалить этот мозг",
"returnButton": "Вернуться",
"unsubscribeButton": "Отписаться от мозга",
"unsubscribeConfirmQuestion": "Вы уверены, что хотите отписаться от этого мозга?",
"unsubscribeConfirmYes": "Да, отписаться от этого сознания",
"successfully_deleted": "Мозг успешно удален.",
"successfully_unsubscribed": "Вы успешно отписались от этого мозга."
}

View File

@ -1 +1,15 @@
{"title":"Исследовать загруженные данные","subtitle":"Просмотрите, загрузите или удалите знания, используемые вашим мозгом","empty":"О нет, ваш мозг пуст.","noBrain":"Мозг не найден","sessionNotFound":"Сессия пользователя не найдена","deleted":"{{fileName}} удален из мозга {{brain}}","errorDeleting":"Ошибка при удалении {{fileName}}","view":"Просмотреть","chunkNumber":"Количество частей: {{quantity}}","notAvailable":"Не доступно","deleteConfirmTitle":"Подтвердите","deleteConfirmText":"Вы действительно хотите удалить?","feed_brain_instructions":"Чтобы добавить знания в мозг, перейдите на страницу чата, затем нажмите на кнопку плюс слева от поля ввода чата."}
{
"title": "Исследовать загруженные данные",
"subtitle": "Просмотрите, загрузите или удалите знания, используемые вашим мозгом",
"empty": "О нет, ваш мозг пуст.",
"noBrain": "Мозг не найден",
"sessionNotFound": "Сессия пользователя не найдена",
"deleted": "{{fileName}} удален из мозга {{brain}}",
"errorDeleting": "Ошибка при удалении {{fileName}}",
"view": "Просмотреть",
"chunkNumber": "Количество частей: {{quantity}}",
"notAvailable": "Не доступно",
"deleteConfirmTitle": "Подтвердите",
"deleteConfirmText": "Вы действительно хотите удалить?",
"feed_brain_instructions": "Чтобы добавить знания в мозг, перейдите на страницу чата, затем нажмите на кнопку плюс слева от поля ввода чата."
}

View File

@ -1 +1,14 @@
{"method_label":"Method","url_placeholder":"URL","searchParams":"Search Params","headers":"Headers","params":"Params","key":"Key","type":"Type (string or number)","description":"Description","secrets":"секреты","paramsTabDescription":"Эти значения отправляются в теле запроса.","searchParamsTabDescription":"Эти значения отправляются в виде строки запроса.","secretsTabDescription":"Эти значения отправляются в виде ключей заголовка."}
{
"method_label": "Method",
"url_placeholder": "URL",
"searchParams": "Search Params",
"headers": "Headers",
"params": "Params",
"key": "Key",
"type": "Type (string or number)",
"description": "Description",
"secrets": "секреты",
"paramsTabDescription": "Эти значения отправляются в теле запроса.",
"searchParamsTabDescription": "Эти значения отправляются в виде строки запроса.",
"secretsTabDescription": "Эти значения отправляются в виде ключей заголовка."
}

View File

@ -1,36 +1,36 @@
{
"sign_in": "Войти",
"sign_up": "Зарегистрироваться",
"docs": "Документация",
"pricing": "Цены",
"star_us": "Поставьте звезду на Github",
"blog": "Блог",
"sponsored_by": "Спонсируется",
"useCases": {
"title": "Попробуйте сейчас.",
"subtitle": "Посмотрите наш пример использования Quivr."
},
"intro": {
"title": "Получите второй мозг с",
"subtitle": "Загрузите все ваши файлы и начните с ними общаться.",
"try_demo": "Попробовать бесплатную демонстрацию",
"contact_sales": "Свяжитесь с отделом продаж"
},
"demo": {
"title": "Видео-демонстрация",
"start_now": "Начать сейчас"
},
"security": {
"cta": "Начните сегодня"
},
"footer": {
"title": "Начните сегодня",
"description_1": "Ваш личный помощник, действующий как ваш Второй Мозг.",
"description_2": "Просто загрузите свои файлы и задайте ему вопросы.",
"start_using": "Начать использовать Quivr",
"contact_sales": "Свяжитесь с отделом продаж"
},
"testimonials": {
"title": "Что люди говорят о"
}
}
"sign_in": "Войти",
"sign_up": "Зарегистрироваться",
"docs": "Документация",
"pricing": "Цены",
"star_us": "Поставьте звезду на Github",
"blog": "Блог",
"sponsored_by": "Спонсируется",
"useCases": {
"title": "Попробуйте сейчас.",
"subtitle": "Посмотрите наш пример использования Quivr."
},
"intro": {
"title": "Получите второй мозг с",
"subtitle": "Загрузите все ваши файлы и начните с ними общаться.",
"try_demo": "Попробовать бесплатную демонстрацию",
"contact_sales": "Свяжитесь с отделом продаж"
},
"demo": {
"title": "Видео-демонстрация",
"start_now": "Начать сейчас"
},
"security": {
"cta": "Начните сегодня"
},
"footer": {
"title": "Начните сегодня",
"description_1": "Ваш личный помощник, действующий как ваш Второй Мозг.",
"description_2": "Просто загрузите свои файлы и задайте ему вопросы.",
"start_using": "Начать использовать Quivr",
"contact_sales": "Свяжитесь с отделом продаж"
},
"testimonials": {
"title": "Что люди говорят о"
}
}

Some files were not shown because too many files have changed in this diff Show More