Feat/missing localizations (#3881)

* Update Brazilian Portuguese locale (pt_BR)

* Add missing localizations in chat window

* normalize translations

* lint

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>
This commit is contained in:
JairoMarques 2025-05-27 18:09:06 -03:00 committed by GitHub
parent 3d5e8602a8
commit 07e5b70f13
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
28 changed files with 609 additions and 72 deletions

View File

@ -19,6 +19,7 @@ import ConfluenceLogo from "@/media/dataConnectors/confluence.png";
import DrupalWikiLogo from "@/media/dataConnectors/drupalwiki.png";
import ObsidianLogo from "@/media/dataConnectors/obsidian.png";
import { toPercentString } from "@/utils/numbers";
import { useTranslation } from "react-i18next";
import pluralize from "pluralize";
import useTextSize from "@/hooks/useTextSize";
@ -44,6 +45,7 @@ export default function Citations({ sources = [] }) {
if (sources.length === 0) return null;
const [open, setOpen] = useState(false);
const [selectedSource, setSelectedSource] = useState(null);
const { t } = useTranslation();
const { textSizeClass } = useTextSize();
return (
@ -54,7 +56,9 @@ export default function Citations({ sources = [] }) {
open ? "pb-2" : ""
} hover:text-white/75 hover:light:text-black/75 transition-all duration-300`}
>
{open ? "Hide Citations" : "Show Citations"}
{open
? t("chat_window.hide_citations")
: t("chat_window.show_citations")}
<CaretRight
weight="bold"
size={14}

View File

@ -1,7 +1,9 @@
import React, { useState, useEffect, useRef } from "react";
import { Trash, DotsThreeVertical, TreeView } from "@phosphor-icons/react";
import { useTranslation } from "react-i18next";
function ActionMenu({ chatId, forkThread, isEditing, role }) {
const { t } = useTranslation();
const [open, setOpen] = useState(false);
const menuRef = useRef(null);
@ -40,8 +42,8 @@ function ActionMenu({ chatId, forkThread, isEditing, role }) {
onClick={toggleMenu}
className="border-none text-[var(--theme-sidebar-footer-icon-fill)] hover:text-[var(--theme-sidebar-footer-icon-fill)] transition-colors duration-200"
data-tooltip-id="action-menu"
data-tooltip-content="More actions"
aria-label="More actions"
data-tooltip-content={t("chat_window.more_actions")}
aria-label={t("chat_window.more_actions")}
>
<DotsThreeVertical size={24} weight="bold" />
</button>
@ -52,14 +54,14 @@ function ActionMenu({ chatId, forkThread, isEditing, role }) {
className="border-none rounded-t-lg flex items-center text-white gap-x-2 hover:bg-theme-action-menu-item-hover py-1.5 px-2 transition-colors duration-200 w-full text-left"
>
<TreeView size={18} />
<span className="text-sm">Fork</span>
<span className="text-sm">{t("chat_window.fork")}</span>
</button>
<button
onClick={handleDelete}
className="border-none flex rounded-b-lg items-center text-white gap-x-2 hover:bg-theme-action-menu-item-hover py-1.5 px-2 transition-colors duration-200 w-full text-left"
>
<Trash size={18} />
<span className="text-sm">Delete</span>
<span className="text-sm">{t("chat_window.delete")}</span>
</button>
</div>
)}

View File

@ -1,6 +1,7 @@
import { Pencil } from "@phosphor-icons/react";
import { useState, useEffect, useRef } from "react";
import Appearance from "@/models/appearance";
import { useTranslation } from "react-i18next";
const EDIT_EVENT = "toggle-message-edit";
@ -30,6 +31,7 @@ export function useEditMessage({ chatId, role }) {
}
export function EditMessageAction({ chatId = null, role, isEditing }) {
const { t } = useTranslation();
function handleEditClick() {
window.dispatchEvent(
new CustomEvent(EDIT_EVENT, { detail: { chatId, role } })
@ -46,11 +48,13 @@ export function EditMessageAction({ chatId = null, role, isEditing }) {
<button
onClick={handleEditClick}
data-tooltip-id="edit-input-text"
data-tooltip-content={`Edit ${
role === "user" ? "Prompt" : "Response"
data-tooltip-content={`${
role === "user"
? t("chat_window.edit_prompt")
: t("chat_window.edit_response")
} `}
className="border-none text-zinc-300"
aria-label={`Edit ${role === "user" ? "Prompt" : "Response"}`}
aria-label={`Edit ${role === "user" ? t("chat_window.edit_prompt") : t("chat_window.edit_response")}`}
>
<Pencil
color="var(--theme-sidebar-footer-icon-fill)"
@ -71,6 +75,7 @@ export function EditMessageForm({
saveChanges,
}) {
const formRef = useRef(null);
const { t } = useTranslation();
function handleSaveMessage(e) {
e.preventDefault();
const form = new FormData(e.target);
@ -109,14 +114,14 @@ export function EditMessageForm({
type="submit"
className="border-none px-2 py-1 bg-gray-200 text-gray-700 font-medium rounded-md mr-2 hover:bg-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
>
Save & Submit
{t("chat_window.save_submit")}
</button>
<button
type="button"
className="border-none px-2 py-1 bg-historical-msg-system text-white font-medium rounded-md hover:bg-historical-msg-user/90 light:hover:text-white focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2"
onClick={cancelEdits}
>
Cancel
{t("chat_window.cancel")}
</button>
</div>
</form>

View File

@ -2,12 +2,14 @@ import { useEffect, useState, useRef } from "react";
import { SpeakerHigh, PauseCircle, CircleNotch } from "@phosphor-icons/react";
import Workspace from "@/models/workspace";
import showToast from "@/utils/toast";
import { useTranslation } from "react-i18next";
export default function AsyncTTSMessage({ slug, chatId }) {
const playerRef = useRef(null);
const [speaking, setSpeaking] = useState(false);
const [loading, setLoading] = useState(false);
const [audioSrc, setAudioSrc] = useState(null);
const { t } = useTranslation();
function speakMessage() {
if (speaking) {
@ -59,7 +61,9 @@ export default function AsyncTTSMessage({ slug, chatId }) {
data-auto-play-chat-id={chatId}
data-tooltip-id="message-to-speech"
data-tooltip-content={
speaking ? "Pause TTS speech of message" : "TTS Speak message"
speaking
? t("pause_tts_speech_message")
: t("chat_window.tts_speak_message")
}
className="border-none text-[var(--theme-sidebar-footer-icon-fill)]"
aria-label={speaking ? "Pause speech" : "Speak message"}

View File

@ -5,6 +5,7 @@ import Workspace from "@/models/workspace";
import { EditMessageAction } from "./EditMessage";
import RenderMetrics from "./RenderMetrics";
import ActionMenu from "./ActionMenu";
import { useTranslation } from "react-i18next";
const Actions = ({
message,
@ -19,6 +20,7 @@ const Actions = ({
metrics = {},
alignmentCls = "",
}) => {
const { t } = useTranslation();
const [selectedFeedback, setSelectedFeedback] = useState(feedbackScore);
const handleFeedback = async (newFeedback) => {
const updatedFeedback =
@ -49,7 +51,7 @@ const Actions = ({
isSelected={selectedFeedback === true}
handleFeedback={() => handleFeedback(true)}
tooltipId="feedback-button"
tooltipContent="Good response"
tooltipContent={t("chat_window.good_response")}
IconComponent={ThumbsUp}
/>
)}
@ -94,6 +96,7 @@ function FeedbackButton({
function CopyMessage({ message }) {
const { copied, copyText } = useCopyText();
const { t } = useTranslation();
return (
<>
@ -101,9 +104,9 @@ function CopyMessage({ message }) {
<button
onClick={() => copyText(message)}
data-tooltip-id="copy-assistant-text"
data-tooltip-content="Copy"
data-tooltip-content={t("chat_window.copy")}
className="text-zinc-300"
aria-label="Copy"
aria-label={t("chat_window.copy")}
>
{copied ? (
<Check
@ -126,14 +129,15 @@ function CopyMessage({ message }) {
function RegenerateMessage({ regenerateMessage, chatId }) {
if (!chatId) return null;
const { t } = useTranslation();
return (
<div className="mt-3 relative">
<button
onClick={() => regenerateMessage(chatId)}
data-tooltip-id="regenerate-assistant-text"
data-tooltip-content="Regenerate response"
data-tooltip-content={t("chat_window.regenerate_response")}
className="border-none text-zinc-300"
aria-label="Regenerate"
aria-label={t("chat_window.regenerate")}
>
<ArrowsClockwise
color="var(--theme-sidebar-footer-icon-fill)"

View File

@ -51,6 +51,7 @@ export function AvailableAgents({
const formRef = useRef(null);
const agentSessionActive = useIsAgentSessionActive();
const [searchParams] = useSearchParams();
const { t } = useTranslation();
/*
* @checklist-item
@ -98,7 +99,8 @@ export function AvailableAgents({
>
<div className="w-full flex-col text-left flex pointer-events-none">
<div className="text-theme-text-primary text-sm">
<b>@agent</b> - the default agent for this workspace.
<b>{t("chat_window.at_agent")}</b>
{t("chat_window.default_agent_description")}
</div>
<div className="flex flex-wrap gap-2 mt-2">
<AbilityTag text="rag-search" />
@ -118,7 +120,7 @@ export function AvailableAgents({
>
<div className="w-full flex-col text-center flex pointer-events-none">
<div className="text-theme-text-secondary text-xs italic">
custom agents are coming soon!
{t("chat_window.custom_agents_coming_soon")}
</div>
</div>
</button>

View File

@ -2,9 +2,11 @@ import { useState } from "react";
import { X } from "@phosphor-icons/react";
import ModalWrapper from "@/components/ModalWrapper";
import { CMD_REGEX } from ".";
import { useTranslation } from "react-i18next";
export default function AddPresetModal({ isOpen, onClose, onSave }) {
const [command, setCommand] = useState("");
const { t } = useTranslation();
const handleSubmit = async (e) => {
e.preventDefault();
@ -29,7 +31,7 @@ export default function AddPresetModal({ isOpen, onClose, onSave }) {
<div className="relative p-6 border-b rounded-t border-theme-modal-border">
<div className="w-full flex gap-x-2 items-center">
<h3 className="text-xl font-semibold text-white overflow-hidden overflow-ellipsis whitespace-nowrap">
Add New Preset
{t("chat_window.add_new_preset")}
</h3>
</div>
<button
@ -52,7 +54,7 @@ export default function AddPresetModal({ isOpen, onClose, onSave }) {
htmlFor="command"
className="block mb-2 text-sm font-medium text-white"
>
Command
{t("chat_window.command")}
</label>
<div className="flex items-center">
<span className="text-white text-sm mr-2 font-bold">/</span>
@ -60,7 +62,7 @@ export default function AddPresetModal({ isOpen, onClose, onSave }) {
name="command"
type="text"
id="command"
placeholder="your-command"
placeholder={t("chat_window.your_command")}
value={command}
onChange={handleCommandChange}
maxLength={25}
@ -81,7 +83,7 @@ export default function AddPresetModal({ isOpen, onClose, onSave }) {
name="prompt"
id="prompt"
autoComplete="off"
placeholder="This is the content that will be injected in front of your prompt."
placeholder={t("chat_window.placeholder_prompt")}
required={true}
className="border-none bg-theme-settings-input-bg w-full text-white placeholder:text-theme-settings-input-placeholder text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5"
></textarea>
@ -91,13 +93,13 @@ export default function AddPresetModal({ isOpen, onClose, onSave }) {
htmlFor="description"
className="block mb-2 text-sm font-medium text-white"
>
Description
{t("chat_window.description")}
</label>
<input
type="text"
name="description"
id="description"
placeholder="Responds with a poem about LLMs."
placeholder={t("chat_window.placeholder_description")}
maxLength={80}
autoComplete="off"
required={true}
@ -112,13 +114,13 @@ export default function AddPresetModal({ isOpen, onClose, onSave }) {
type="button"
className="transition-all duration-300 bg-transparent text-white hover:opacity-60 px-4 py-2 rounded-lg text-sm"
>
Cancel
{t("chat_window.cancel")}
</button>
<button
type="submit"
className="transition-all duration-300 bg-white text-black hover:opacity-60 px-4 py-2 rounded-lg text-sm"
>
Save
{t("chat_window.save")}
</button>
</div>
</form>

View File

@ -7,9 +7,11 @@ import System from "@/models/system";
import { DotsThree, Plus } from "@phosphor-icons/react";
import showToast from "@/utils/toast";
import { useSearchParams } from "react-router-dom";
import { useTranslation } from "react-i18next";
export const CMD_REGEX = new RegExp(/[^a-zA-Z0-9_-]/g);
export default function SlashPresets({ setShowing, sendCommand, promptRef }) {
const { t } = useTranslation();
const isActiveAgentSession = useIsAgentSessionActive();
const {
isOpen: isAddModalOpen,
@ -130,7 +132,7 @@ export default function SlashPresets({ setShowing, sendCommand, promptRef }) {
<div className="w-full flex-row flex pointer-events-none items-center gap-2">
<Plus size={24} weight="fill" className="text-theme-text-primary" />
<div className="text-theme-text-primary text-sm font-medium">
Add New Preset
{t("chat_window.add_new_preset")}
</div>
</div>
</button>

View File

@ -1,6 +1,8 @@
import { useIsAgentSessionActive } from "@/utils/chat/agent";
import { useTranslation } from "react-i18next";
export default function ResetCommand({ setShowing, sendCommand }) {
const { t } = useTranslation();
const isActiveAgentSession = useIsAgentSessionActive();
if (isActiveAgentSession) return null; // cannot reset during active agent chat
@ -13,9 +15,11 @@ export default function ResetCommand({ setShowing, sendCommand }) {
className="border-none w-full hover:cursor-pointer hover:bg-theme-action-menu-item-hover px-2 py-2 rounded-xl flex flex-col justify-start"
>
<div className="w-full flex-col text-left flex pointer-events-none">
<div className="text-white text-sm font-bold">/reset</div>
<div className="text-white text-sm font-bold">
{t("chat_window.slash_reset")}
</div>
<div className="text-white text-opacity-60 text-sm">
Clear your chat history and begin a new chat
{t("chat_window.preset_reset_description")}
</div>
</div>
</button>

View File

@ -43,6 +43,7 @@ export default function TextSizeButton() {
}
function TextSizeMenu({ showing, setShowing, buttonRef }) {
const { t } = useTranslation();
const formRef = useRef(null);
const [selectedSize, setSelectedSize] = useState(
window.localStorage.getItem("anythingllm_text_size") || "normal"
@ -90,7 +91,9 @@ function TextSizeMenu({ showing, setShowing, buttonRef }) {
}`}
>
<div className="w-full flex-col text-left flex pointer-events-none">
<div className="text-theme-text-primary text-xs">Small</div>
<div className="text-theme-text-primary text-xs">
{t("chat_window.small")}
</div>
</div>
</button>
@ -107,7 +110,9 @@ function TextSizeMenu({ showing, setShowing, buttonRef }) {
}`}
>
<div className="w-full flex-col text-left flex pointer-events-none">
<div className="text-theme-text-primary text-sm">Normal</div>
<div className="text-theme-text-primary text-sm">
{t("chat_window.normal")}
</div>
</div>
</button>
@ -124,7 +129,9 @@ function TextSizeMenu({ showing, setShowing, buttonRef }) {
}`}
>
<div className="w-full flex-col text-left flex pointer-events-none">
<div className="text-theme-text-primary text-[16px]">Large</div>
<div className="text-theme-text-primary text-[16px]">
{t("chat_window.large")}
</div>
</div>
</button>
</div>

View File

@ -668,6 +668,36 @@ const TRANSLATIONS = {
microphone: null,
send: null,
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: null,

View File

@ -706,6 +706,36 @@ const TRANSLATIONS = {
microphone: "Tal din prompt.",
send: "Send promptbesked til arbejdsområdet",
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: "Rediger konto",

View File

@ -704,6 +704,36 @@ const TRANSLATIONS = {
microphone: "Spreche deinen Prompt ein.",
send: "Versende den Prompt an den Arbeitsbereich.",
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: "Account bearbeiten",

View File

@ -934,6 +934,37 @@ const TRANSLATIONS = {
text_size: "Change text size.",
microphone: "Speak your prompt.",
send: "Send prompt message to workspace",
tts_speak_message: "TTS Speak message",
copy: "Copy",
regenerate: "Regenerate",
regenerate_response: "Regenerate response",
good_response: "Good response",
more_actions: "More actions",
hide_citations: "Hide citations",
show_citations: "Show citations",
pause_tts_speech_message: "Pause TTS speech of message",
fork: "Fork",
delete: "Delete",
save_submit: "Save & Submit",
cancel: "Cancel",
edit_prompt: "Edit prompt",
edit_response: "Edit response",
at_agent: "@agent",
default_agent_description: " - the default agent for this workspace.",
custom_agents_coming_soon: "custom agents are coming soon!",
slash_reset: "/reset",
preset_reset_description: "Clear your chat history and begin a new chat",
add_new_preset: " Add New Preset",
command: "Command",
your_command: "your-command",
placeholder_prompt:
"This is the content that will be injected in front of your prompt.",
description: "Description",
placeholder_description: "Responds with a poem about LLMs.",
save: "Save",
small: "Small",
normal: "Normal",
large: "Large",
},
profile_settings: {

View File

@ -667,6 +667,36 @@ const TRANSLATIONS = {
microphone: null,
send: null,
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: null,

View File

@ -660,6 +660,36 @@ const TRANSLATIONS = {
microphone: null,
send: null,
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: null,

View File

@ -668,6 +668,36 @@ const TRANSLATIONS = {
microphone: null,
send: null,
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: null,

View File

@ -653,6 +653,36 @@ const TRANSLATIONS = {
microphone: null,
send: null,
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: null,

View File

@ -666,6 +666,36 @@ const TRANSLATIONS = {
microphone: null,
send: null,
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: null,

View File

@ -698,6 +698,36 @@ const TRANSLATIONS = {
microphone: "プロンプトを音声入力",
send: "ワークスペースにプロンプトメッセージを送信",
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: "アカウントを編集",

View File

@ -653,6 +653,36 @@ const TRANSLATIONS = {
microphone: null,
send: null,
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: null,

View File

@ -663,6 +663,36 @@ const TRANSLATIONS = {
microphone: null,
send: null,
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: null,

View File

@ -20,7 +20,6 @@ const TRANSLATIONS = {
passwordReq: "Senhas devem ter pelo menos 8 caracteres.",
passwordWarn:
"É importante salvar esta senha pois não há método de recuperação.",
adminUsername: "Nome de usuário admin",
adminUsernameReq:
"O nome deve ter pelo menos 6 caracteres e conter apenas letras minúsculas, números, sublinhados e hífens, sem espaços.",
@ -39,7 +38,6 @@ const TRANSLATIONS = {
survey: {
title: "Bem-vindo ao AnythingLLM",
description: "Ajude-nos a melhorar o AnythingLLM. Opcional.",
email: "Qual seu email?",
useCase: "Como você usará o AnythingLLM?",
useCaseWork: "Para trabalho",
@ -70,8 +68,6 @@ const TRANSLATIONS = {
yes: "Sim",
no: "Não",
},
// Setting Sidebar menu items.
settings: {
title: "Configurações da Instância",
system: "Configurações Gerais",
@ -104,8 +100,6 @@ const TRANSLATIONS = {
contact: "Suporte",
"browser-extension": "Extensão de Navegador",
},
// Page Definitions
login: {
"multi-user": {
welcome: "Bem-vindo ao",
@ -129,7 +123,6 @@ const TRANSLATIONS = {
"back-to-login": "Voltar ao Login",
},
},
welcomeMessage: {
part1:
"Bem-vindo ao AnythingLLM, uma ferramenta de IA open-source da Mintplex Labs que transforma qualquer conteúdo em um chatbot treinado. AnythingLLM é um software BYOK (bring-your-own-keys), sem taxas ou assinaturas.",
@ -150,7 +143,6 @@ const TRANSLATIONS = {
starOnGitHub: "Estrelar no GitHub",
contact: "Contate a Mintplex Labs",
},
"main-page": {
noWorkspaceError: "Por favor, crie um workspace antes de iniciar um chat.",
checklist: {
@ -233,7 +225,6 @@ const TRANSLATIONS = {
},
},
},
"new-workspace": {
title: "Novo Workspace",
placeholder: "Meu Workspace",
@ -247,8 +238,6 @@ const TRANSLATIONS = {
members: "Membros",
agent: "Configuração de Agente",
},
// General Appearance
general: {
vector: {
title: "Contagem de Vetores",
@ -283,8 +272,6 @@ const TRANSLATIONS = {
"workspace. Isso removerá todos os vetores do banco de dados.\n\nOs arquivos originais permanecerão intactos. Esta ação é irreversível.",
},
},
// Chat Settings
chat: {
llm: {
title: "Provedor de LLM",
@ -380,8 +367,6 @@ const TRANSLATIONS = {
success: "Banco de dados resetado com sucesso!",
},
},
// Agent Configuration
agent: {
"performance-warning":
"O desempenho de LLMs sem suporte a tool-calling varia conforme as capacidades do modelo. Algumas funcionalidades podem ser limitadas.",
@ -401,7 +386,6 @@ const TRANSLATIONS = {
"O modelo LLM específico que será usado pelo agente @agent deste workspace.",
wait: "-- aguardando modelos --",
},
skill: {
title: "Habilidades padrão do agente",
description:
@ -439,8 +423,6 @@ const TRANSLATIONS = {
},
},
},
// Workspace Chats
recorded: {
title: "Chats do Workspace",
description:
@ -455,7 +437,6 @@ const TRANSLATIONS = {
at: "Enviado Em",
},
},
customization: {
interface: {
title: "Preferências de UI",
@ -549,8 +530,6 @@ const TRANSLATIONS = {
},
},
},
// API Keys
api: {
title: "Chaves API",
description: "Chaves API permitem acesso programático a esta instância.",
@ -562,14 +541,12 @@ const TRANSLATIONS = {
created: "Criado Em",
},
},
llm: {
title: "Preferência de LLM",
description:
"Credenciais e configurações do seu provedor de LLM. Essas chaves devem estar corretas para o funcionamento adequado.",
provider: "Provedor de LLM",
},
transcription: {
title: "Preferência de Transcrição",
description:
@ -581,7 +558,6 @@ const TRANSLATIONS = {
"warn-end":
"O modelo interno será baixado automaticamente no primeiro uso.",
},
embedding: {
title: "Preferência de Vínculo",
"desc-start":
@ -594,7 +570,6 @@ const TRANSLATIONS = {
"Nenhuma configuração é necessária ao usar o mecanismo nativo do AnythingLLM.",
},
},
text: {
title: "Preferências de Divisão de Texto",
"desc-start":
@ -608,15 +583,12 @@ const TRANSLATIONS = {
description: "Comprimento máximo de caracteres em um único vetor.",
recommend: "Tamanho máximo do modelo de vínculo é",
},
overlap: {
title: "Sobreposição de Trechos",
description:
"Sobreposição máxima de caracteres entre dois trechos adjacentes.",
},
},
// Vector Database
vector: {
title: "Banco de Dados Vetorial",
description:
@ -626,8 +598,6 @@ const TRANSLATIONS = {
description: "Nenhuma configuração necessária para LanceDB.",
},
},
// Embeddable Chat Widgets
embeddable: {
title: "Widgets de Chat vinculado",
description:
@ -639,7 +609,6 @@ const TRANSLATIONS = {
Active: "Domínios Ativos",
},
},
"embed-chats": {
title: "Chats Vinculados",
export: "Exportar",
@ -652,7 +621,6 @@ const TRANSLATIONS = {
at: "Enviado Em",
},
},
multi: {
title: "Modo Multi-Usuário",
description:
@ -677,8 +645,6 @@ const TRANSLATIONS = {
password: "Senha da instância",
},
},
// Event Logs
event: {
title: "Logs de Eventos",
description:
@ -690,8 +656,6 @@ const TRANSLATIONS = {
occurred: "Ocorrido Em",
},
},
// Privacy & Data-Handling
privacy: {
title: "Privacidade & Dados",
description:
@ -701,7 +665,6 @@ const TRANSLATIONS = {
vector: "Banco de Dados Vetorial",
anonymous: "Telemetria Anônima Ativa",
},
connectors: {
"search-placeholder": "Buscar conectores",
"no-connectors": "Nenhum conector encontrado.",
@ -832,7 +795,6 @@ const TRANSLATIONS = {
task_explained:
"Após conclusão, o conteúdo da página estará disponível para vínculo.",
},
manage: {
documents: "Documentos",
"data-connectors": "Conectores de Dados",
@ -898,7 +860,6 @@ const TRANSLATIONS = {
accept: "Ok, entendi",
},
},
chat_window: {
welcome: "Bem-vindo ao novo workspace.",
get_started: "Para começar,",
@ -914,8 +875,37 @@ const TRANSLATIONS = {
text_size: "Alterar tamanho do texto.",
microphone: "Fale seu prompt.",
send: "Enviar prompt para o workspace",
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: "Editar conta",
profile_picture: "Foto de perfil",

View File

@ -707,6 +707,36 @@ const TRANSLATIONS = {
microphone: "Произнесите ваш запрос.",
send: "Отправить запрос в рабочее пространство",
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: "Редактировать учётную запись",

View File

@ -663,6 +663,36 @@ const TRANSLATIONS = {
microphone: null,
send: null,
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: null,

View File

@ -662,6 +662,36 @@ const TRANSLATIONS = {
microphone: null,
send: null,
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: null,

View File

@ -832,6 +832,36 @@ const TRANSLATIONS = {
microphone: "语音输入你的提示。",
send: "将提示消息发送到工作区",
attachments_processing: "附件正在处理,请稍候……",
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: "编辑帐户",

View File

@ -665,6 +665,36 @@ const TRANSLATIONS = {
microphone: "語音輸入提示。",
send: "將提示訊息發送到工作區",
attachments_processing: null,
tts_speak_message: null,
copy: null,
regenerate: null,
regenerate_response: null,
good_response: null,
more_actions: null,
hide_citations: null,
show_citations: null,
pause_tts_speech_message: null,
fork: null,
delete: null,
save_submit: null,
cancel: null,
edit_prompt: null,
edit_response: null,
at_agent: null,
default_agent_description: null,
custom_agents_coming_soon: null,
slash_reset: null,
preset_reset_description: null,
add_new_preset: null,
command: null,
your_command: null,
placeholder_prompt: null,
description: null,
placeholder_description: null,
save: null,
small: null,
normal: null,
large: null,
},
profile_settings: {
edit_account: null,