Merge pull request #1381 from crim50n/main

Adding Russian translation
This commit is contained in:
Yifei Zhang 2023-05-10 15:57:07 +08:00 committed by GitHub
commit c39d75b448
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 266 additions and 10 deletions

View File

@ -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: "头像",

View File

@ -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",

View File

@ -81,6 +81,7 @@ const en: LocaleType = {
jp: "日本語", jp: "日本語",
de: "Deutsch", de: "Deutsch",
vi: "Vietnamese", vi: "Vietnamese",
ru: "Русский",
}, },
}, },
Avatar: "Avatar", Avatar: "Avatar",

View File

@ -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",

View File

@ -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;

View File

@ -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",

View File

@ -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
View 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;

View File

@ -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",

View File

@ -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: "大頭貼",

View File

@ -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",