forked from XiaoMo/ChatGPT-Next-Web
commit
c39d75b448
@ -67,7 +67,7 @@ const cn = {
|
|||||||
ConfirmClearAll: "确认清除所有数据?",
|
ConfirmClearAll: "确认清除所有数据?",
|
||||||
},
|
},
|
||||||
Lang: {
|
Lang: {
|
||||||
Name: "Language",
|
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
|
||||||
All: "所有语言",
|
All: "所有语言",
|
||||||
Options: {
|
Options: {
|
||||||
cn: "简体中文",
|
cn: "简体中文",
|
||||||
@ -79,6 +79,7 @@ const cn = {
|
|||||||
jp: "日本語",
|
jp: "日本語",
|
||||||
de: "Deutsch",
|
de: "Deutsch",
|
||||||
vi: "Vietnamese",
|
vi: "Vietnamese",
|
||||||
|
ru: "Русский",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Avatar: "头像",
|
Avatar: "头像",
|
||||||
|
@ -71,7 +71,7 @@ const de: LocaleType = {
|
|||||||
},
|
},
|
||||||
Lang: {
|
Lang: {
|
||||||
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
|
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
|
||||||
All: "All Languages",
|
All: "Alle Sprachen",
|
||||||
Options: {
|
Options: {
|
||||||
cn: "简体中文",
|
cn: "简体中文",
|
||||||
en: "English",
|
en: "English",
|
||||||
@ -82,6 +82,7 @@ const de: LocaleType = {
|
|||||||
jp: "日本語",
|
jp: "日本語",
|
||||||
de: "Deutsch",
|
de: "Deutsch",
|
||||||
vi: "Vietnamese",
|
vi: "Vietnamese",
|
||||||
|
ru: "Русский",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Avatar: "Avatar",
|
Avatar: "Avatar",
|
||||||
|
@ -81,6 +81,7 @@ const en: LocaleType = {
|
|||||||
jp: "日本語",
|
jp: "日本語",
|
||||||
de: "Deutsch",
|
de: "Deutsch",
|
||||||
vi: "Vietnamese",
|
vi: "Vietnamese",
|
||||||
|
ru: "Русский",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Avatar: "Avatar",
|
Avatar: "Avatar",
|
||||||
|
@ -69,11 +69,11 @@ const es: LocaleType = {
|
|||||||
ConfirmClearAll: "Are you sure you want to reset all chat?",
|
ConfirmClearAll: "Are you sure you want to reset all chat?",
|
||||||
},
|
},
|
||||||
Lang: {
|
Lang: {
|
||||||
Name: "Language",
|
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
|
||||||
All: "All Languages",
|
All: "Todos los idiomas",
|
||||||
Options: {
|
Options: {
|
||||||
cn: "简体中文",
|
cn: "简体中文",
|
||||||
en: "Inglés",
|
en: "English",
|
||||||
tw: "繁體中文",
|
tw: "繁體中文",
|
||||||
es: "Español",
|
es: "Español",
|
||||||
it: "Italiano",
|
it: "Italiano",
|
||||||
@ -81,6 +81,7 @@ const es: LocaleType = {
|
|||||||
jp: "日本語",
|
jp: "日本語",
|
||||||
de: "Deutsch",
|
de: "Deutsch",
|
||||||
vi: "Vietnamese",
|
vi: "Vietnamese",
|
||||||
|
ru: "Русский",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Avatar: "Avatar",
|
Avatar: "Avatar",
|
||||||
|
@ -7,6 +7,7 @@ import TR from "./tr";
|
|||||||
import JP from "./jp";
|
import JP from "./jp";
|
||||||
import DE from "./de";
|
import DE from "./de";
|
||||||
import VI from "./vi";
|
import VI from "./vi";
|
||||||
|
import RU from "./ru";
|
||||||
|
|
||||||
export type { LocaleType } from "./cn";
|
export type { LocaleType } from "./cn";
|
||||||
|
|
||||||
@ -20,6 +21,7 @@ export const AllLangs = [
|
|||||||
"jp",
|
"jp",
|
||||||
"de",
|
"de",
|
||||||
"vi",
|
"vi",
|
||||||
|
"ru",
|
||||||
] as const;
|
] as const;
|
||||||
export type Lang = (typeof AllLangs)[number];
|
export type Lang = (typeof AllLangs)[number];
|
||||||
|
|
||||||
@ -82,4 +84,5 @@ export default {
|
|||||||
jp: JP,
|
jp: JP,
|
||||||
de: DE,
|
de: DE,
|
||||||
vi: VI,
|
vi: VI,
|
||||||
|
ru: RU,
|
||||||
}[getLang()] as typeof CN;
|
}[getLang()] as typeof CN;
|
||||||
|
@ -69,8 +69,8 @@ const it: LocaleType = {
|
|||||||
ConfirmClearAll: "Sei sicuro vuoi cancellare tutte le chat?",
|
ConfirmClearAll: "Sei sicuro vuoi cancellare tutte le chat?",
|
||||||
},
|
},
|
||||||
Lang: {
|
Lang: {
|
||||||
Name: "Lingue",
|
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
|
||||||
All: "All Languages",
|
All: "Tutte le lingue",
|
||||||
Options: {
|
Options: {
|
||||||
cn: "简体中文",
|
cn: "简体中文",
|
||||||
en: "English",
|
en: "English",
|
||||||
@ -81,6 +81,7 @@ const it: LocaleType = {
|
|||||||
jp: "日本語",
|
jp: "日本語",
|
||||||
de: "Deutsch",
|
de: "Deutsch",
|
||||||
vi: "Vietnamese",
|
vi: "Vietnamese",
|
||||||
|
ru: "Русский",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Avatar: "Avatar",
|
Avatar: "Avatar",
|
||||||
|
@ -69,7 +69,7 @@ const jp: LocaleType = {
|
|||||||
ConfirmClearAll: "すべてのチャットをリセットしてもよろしいですか?",
|
ConfirmClearAll: "すべてのチャットをリセットしてもよろしいですか?",
|
||||||
},
|
},
|
||||||
Lang: {
|
Lang: {
|
||||||
Name: "Language",
|
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
|
||||||
All: "所有语言",
|
All: "所有语言",
|
||||||
Options: {
|
Options: {
|
||||||
cn: "简体中文",
|
cn: "简体中文",
|
||||||
@ -81,6 +81,7 @@ const jp: LocaleType = {
|
|||||||
jp: "日本語",
|
jp: "日本語",
|
||||||
de: "Deutsch",
|
de: "Deutsch",
|
||||||
vi: "Vietnamese",
|
vi: "Vietnamese",
|
||||||
|
ru: "Русский",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Avatar: "アバター",
|
Avatar: "アバター",
|
||||||
|
244
app/locales/ru.ts
Normal file
244
app/locales/ru.ts
Normal file
@ -0,0 +1,244 @@
|
|||||||
|
import { SubmitKey } from "../store/config";
|
||||||
|
import type { LocaleType } from "./index";
|
||||||
|
|
||||||
|
const ru: LocaleType = {
|
||||||
|
WIP: "Скоро...",
|
||||||
|
Error: {
|
||||||
|
Unauthorized:
|
||||||
|
"Несанкционированный доступ. Пожалуйста, введите код доступа на странице настроек.",
|
||||||
|
},
|
||||||
|
ChatItem: {
|
||||||
|
ChatItemCount: (count: number) => `${count} сообщений`,
|
||||||
|
},
|
||||||
|
Chat: {
|
||||||
|
SubTitle: (count: number) => `${count} сообщений с ChatGPT`,
|
||||||
|
Actions: {
|
||||||
|
ChatList: "Перейти к списку чатов",
|
||||||
|
CompressedHistory: "Сжатая история памяти",
|
||||||
|
Export: "Экспортировать все сообщения в формате Markdown",
|
||||||
|
Copy: "Копировать",
|
||||||
|
Stop: "Остановить",
|
||||||
|
Retry: "Повторить",
|
||||||
|
Delete: "Удалить",
|
||||||
|
},
|
||||||
|
Rename: "Переименовать чат",
|
||||||
|
Typing: "Печатает…",
|
||||||
|
Input: (submitKey: string) => {
|
||||||
|
var inputHints = `${submitKey} для отправки сообщения`;
|
||||||
|
if (submitKey === String(SubmitKey.Enter)) {
|
||||||
|
inputHints += ", Shift + Enter для переноса строки";
|
||||||
|
}
|
||||||
|
return inputHints + ", / для поиска подсказок";
|
||||||
|
},
|
||||||
|
Send: "Отправить",
|
||||||
|
Config: {
|
||||||
|
Reset: "Сбросить настройки",
|
||||||
|
SaveAs: "Сохранить как маску",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Export: {
|
||||||
|
Title: "Все сообщения",
|
||||||
|
Copy: "Копировать все",
|
||||||
|
Download: "Скачать",
|
||||||
|
MessageFromYou: "Сообщение от вас",
|
||||||
|
MessageFromChatGPT: "Сообщение от ChatGPT",
|
||||||
|
},
|
||||||
|
Memory: {
|
||||||
|
Title: "Память",
|
||||||
|
EmptyContent: "Пусто.",
|
||||||
|
Send: "Отправить память",
|
||||||
|
Copy: "Копировать память",
|
||||||
|
Reset: "Сбросить сессию",
|
||||||
|
ResetConfirm:
|
||||||
|
"При сбросе текущая история переписки и историческая память будут удалены. Вы уверены, что хотите сбросить?",
|
||||||
|
},
|
||||||
|
Home: {
|
||||||
|
NewChat: "Новый чат",
|
||||||
|
DeleteChat: "Вы действительно хотите удалить выбранный разговор?",
|
||||||
|
DeleteToast: "Чат удален",
|
||||||
|
Revert: "Отмена",
|
||||||
|
},
|
||||||
|
Settings: {
|
||||||
|
Title: "Настройки",
|
||||||
|
SubTitle: "Все настройки",
|
||||||
|
Actions: {
|
||||||
|
ClearAll: "Очистить все данные",
|
||||||
|
ResetAll: "Сбросить все настройки",
|
||||||
|
Close: "Закрыть",
|
||||||
|
ConfirmResetAll: "Вы уверены, что хотите сбросить все настройки?",
|
||||||
|
ConfirmClearAll: "Вы уверены, что хотите очистить все данные?",
|
||||||
|
},
|
||||||
|
Lang: {
|
||||||
|
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
|
||||||
|
All: "Все языки",
|
||||||
|
Options: {
|
||||||
|
cn: "简体中文",
|
||||||
|
en: "English",
|
||||||
|
tw: "繁體中文",
|
||||||
|
es: "Español",
|
||||||
|
it: "Italiano",
|
||||||
|
tr: "Türkçe",
|
||||||
|
jp: "日本語",
|
||||||
|
de: "Deutsch",
|
||||||
|
vi: "Vietnamese",
|
||||||
|
ru: "Русский",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Avatar: "Аватар",
|
||||||
|
FontSize: {
|
||||||
|
Title: "Размер шрифта",
|
||||||
|
SubTitle: "Настроить размер шрифта контента чата",
|
||||||
|
},
|
||||||
|
Update: {
|
||||||
|
Version: (x: string) => `Версия: ${x}`,
|
||||||
|
IsLatest: "Последняя версия",
|
||||||
|
CheckUpdate: "Проверить обновление",
|
||||||
|
IsChecking: "Проверка обновления...",
|
||||||
|
FoundUpdate: (x: string) => `Найдена новая версия: ${x}`,
|
||||||
|
GoToUpdate: "Обновить",
|
||||||
|
},
|
||||||
|
SendKey: "Клавиша отправки",
|
||||||
|
Theme: "Тема",
|
||||||
|
TightBorder: "Узкая граница",
|
||||||
|
SendPreviewBubble: {
|
||||||
|
Title: "Отправить предпросмотр",
|
||||||
|
SubTitle: "Предварительный просмотр markdown в пузыре",
|
||||||
|
},
|
||||||
|
Mask: {
|
||||||
|
Title: "Экран заставки маски",
|
||||||
|
SubTitle: "Показывать экран заставки маски перед началом нового чата",
|
||||||
|
},
|
||||||
|
Prompt: {
|
||||||
|
Disable: {
|
||||||
|
Title: "Отключить автозаполнение",
|
||||||
|
SubTitle: "Ввод / для запуска автозаполнения",
|
||||||
|
},
|
||||||
|
List: "Список подсказок",
|
||||||
|
ListCount: (builtin: number, custom: number) =>
|
||||||
|
`${builtin} встроенных, ${custom} пользовательских`,
|
||||||
|
Edit: "Редактировать",
|
||||||
|
Modal: {
|
||||||
|
Title: "Список подсказок",
|
||||||
|
Add: "Добавить",
|
||||||
|
Search: "Поиск подсказок",
|
||||||
|
},
|
||||||
|
EditModal: {
|
||||||
|
Title: "Редактировать подсказку",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
HistoryCount: {
|
||||||
|
Title: "Количество прикрепляемых сообщений",
|
||||||
|
SubTitle: "Количество отправляемых сообщений, прикрепляемых к каждому запросу",
|
||||||
|
},
|
||||||
|
CompressThreshold: {
|
||||||
|
Title: "Порог сжатия истории",
|
||||||
|
SubTitle:
|
||||||
|
"Будет сжимать, если длина несжатых сообщений превышает указанное значение",
|
||||||
|
},
|
||||||
|
Token: {
|
||||||
|
Title: "API ключ",
|
||||||
|
SubTitle: "Используйте свой ключ, чтобы игнорировать лимит доступа",
|
||||||
|
Placeholder: "API ключ OpenAI",
|
||||||
|
},
|
||||||
|
Usage: {
|
||||||
|
Title: "Баланс аккаунта",
|
||||||
|
SubTitle(used: any, total: any) {
|
||||||
|
return `Использовано в этом месяце $${used}, подписка $${total}`;
|
||||||
|
},
|
||||||
|
IsChecking: "Проверка...",
|
||||||
|
Check: "Проверить",
|
||||||
|
NoAccess: "Введите API ключ, чтобы проверить баланс",
|
||||||
|
},
|
||||||
|
AccessCode: {
|
||||||
|
Title: "Код доступа",
|
||||||
|
SubTitle: "Контроль доступа включен",
|
||||||
|
Placeholder: "Требуется код доступа",
|
||||||
|
},
|
||||||
|
Model: "Модель",
|
||||||
|
Temperature: {
|
||||||
|
Title: "Температура",
|
||||||
|
SubTitle: "Чем выше значение, тем более случайный вывод",
|
||||||
|
},
|
||||||
|
MaxTokens: {
|
||||||
|
Title: "Максимальное количество токенов",
|
||||||
|
SubTitle: "Максимальная длина вводных и генерируемых токенов",
|
||||||
|
},
|
||||||
|
PresencePenlty: {
|
||||||
|
Title: "Штраф за повторения",
|
||||||
|
SubTitle:
|
||||||
|
"Чем выше значение, тем больше вероятность общения на новые темы",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Store: {
|
||||||
|
DefaultTopic: "Новый разговор",
|
||||||
|
BotHello: "Здравствуйте! Как я могу вам помочь сегодня?",
|
||||||
|
Error: "Что-то пошло не так. Пожалуйста, попробуйте еще раз позже.",
|
||||||
|
Prompt: {
|
||||||
|
History: (content: string) =>
|
||||||
|
"Это краткое содержание истории чата между ИИ и пользователем: " +
|
||||||
|
content,
|
||||||
|
Topic:
|
||||||
|
"Пожалуйста, создайте заголовок из четырех или пяти слов, который кратко описывает нашу беседу, без введения, знаков пунктуации, кавычек, точек, символов или дополнительного текста. Удалите кавычки.",
|
||||||
|
Summarize:
|
||||||
|
"Кратко изложите нашу дискуссию в 200 словах или менее для использования в будущем контексте.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Copy: {
|
||||||
|
Success: "Скопировано в буфер обмена",
|
||||||
|
Failed: "Не удалось скопировать, пожалуйста, предоставьте разрешение на доступ к буферу обмена",
|
||||||
|
},
|
||||||
|
Context: {
|
||||||
|
Toast: (x: any) => `С ${x} контекстными подсказками`,
|
||||||
|
Edit: "Контекстные и памятные подсказки",
|
||||||
|
Add: "Добавить подсказку",
|
||||||
|
},
|
||||||
|
Plugin: {
|
||||||
|
Name: "Плагин",
|
||||||
|
},
|
||||||
|
Mask: {
|
||||||
|
Name: "Маска",
|
||||||
|
Page: {
|
||||||
|
Title: "Шаблон подсказки",
|
||||||
|
SubTitle: (count: number) => `${count} шаблонов подсказок`,
|
||||||
|
Search: "Поиск шаблонов",
|
||||||
|
Create: "Создать",
|
||||||
|
},
|
||||||
|
Item: {
|
||||||
|
Info: (count: number) => `${count} подсказок`,
|
||||||
|
Chat: "Чат",
|
||||||
|
View: "Просмотр",
|
||||||
|
Edit: "Редактировать",
|
||||||
|
Delete: "Удалить",
|
||||||
|
DeleteConfirm: "Подтвердить удаление?",
|
||||||
|
},
|
||||||
|
EditModal: {
|
||||||
|
Title: (readonly: boolean) =>
|
||||||
|
`Редактирование шаблона подсказки ${readonly ? "(только для чтения)" : ""}`,
|
||||||
|
Download: "Скачать",
|
||||||
|
Clone: "Клонировать",
|
||||||
|
},
|
||||||
|
Config: {
|
||||||
|
Avatar: "Аватар бота",
|
||||||
|
Name: "Имя бота",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
NewChat: {
|
||||||
|
Return: "Вернуться",
|
||||||
|
Skip: "Пропустить",
|
||||||
|
Title: "Выберите маску",
|
||||||
|
SubTitle: "Общайтесь с душой за маской",
|
||||||
|
More: "Найти еще",
|
||||||
|
NotShow: "Не показывать снова",
|
||||||
|
ConfirmNoShow: "Подтвердите отключение? Вы можете включить это позже в настройках.",
|
||||||
|
},
|
||||||
|
|
||||||
|
UI: {
|
||||||
|
Confirm: "Подтвердить",
|
||||||
|
Cancel: "Отмена",
|
||||||
|
Close: "Закрыть",
|
||||||
|
Create: "Создать",
|
||||||
|
Edit: "Редактировать",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ru;
|
@ -70,7 +70,7 @@ const tr: LocaleType = {
|
|||||||
},
|
},
|
||||||
Lang: {
|
Lang: {
|
||||||
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
|
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
|
||||||
All: "All Languages",
|
All: "Tüm Diller",
|
||||||
Options: {
|
Options: {
|
||||||
cn: "简体中文",
|
cn: "简体中文",
|
||||||
en: "English",
|
en: "English",
|
||||||
@ -81,6 +81,7 @@ const tr: LocaleType = {
|
|||||||
jp: "日本語",
|
jp: "日本語",
|
||||||
de: "Deutsch",
|
de: "Deutsch",
|
||||||
vi: "Vietnamese",
|
vi: "Vietnamese",
|
||||||
|
ru: "Русский",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Avatar: "Avatar",
|
Avatar: "Avatar",
|
||||||
|
@ -67,7 +67,7 @@ const tw: LocaleType = {
|
|||||||
ConfirmClearAll: "您確定要清除所有数据嗎?",
|
ConfirmClearAll: "您確定要清除所有数据嗎?",
|
||||||
},
|
},
|
||||||
Lang: {
|
Lang: {
|
||||||
Name: "Language",
|
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
|
||||||
All: "所有语言",
|
All: "所有语言",
|
||||||
Options: {
|
Options: {
|
||||||
cn: "简体中文",
|
cn: "简体中文",
|
||||||
@ -79,6 +79,7 @@ const tw: LocaleType = {
|
|||||||
jp: "日本語",
|
jp: "日本語",
|
||||||
de: "Deutsch",
|
de: "Deutsch",
|
||||||
vi: "Vietnamese",
|
vi: "Vietnamese",
|
||||||
|
ru: "Русский",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Avatar: "大頭貼",
|
Avatar: "大頭貼",
|
||||||
|
@ -81,6 +81,7 @@ const vi: LocaleType = {
|
|||||||
jp: "日本語",
|
jp: "日本語",
|
||||||
de: "Deutsch",
|
de: "Deutsch",
|
||||||
vi: "Vietnamese",
|
vi: "Vietnamese",
|
||||||
|
ru: "Русский",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Avatar: "Ảnh đại diện",
|
Avatar: "Ảnh đại diện",
|
||||||
|
Loading…
Reference in New Issue
Block a user