feat: russian translation!

This commit is contained in:
neoapps-dev
2026-09-01 13:40:16 +03:00
parent df1ee637ff
commit 9e3b734335
18 changed files with 865 additions and 31 deletions
+2
View File
@@ -239,6 +239,8 @@ sudo apt install --reinstall libwebkit2gtk-4.1-0
- **The LCE Community** - Research and foundations for LCE on PC
- **Str1k3r** - Original creator of LCEOnline
- **DTention** - Original creator of [LCE-Save-Converter](https://github.com/dtentiion/LCE-Save-Converter)
- **dydymiku** - French translation
- **Hvrket** - Russian translation
---
+1
View File
@@ -0,0 +1 @@
Copyright © 2004-2012, BOGDAN Software
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -703,7 +703,7 @@ const SkinViewer = memo(function SkinViewer({
e.stopPropagation();
}
}}
className="bg-transparent text-white focus:text-[#FFFF55] outline-none border-none text-center font-['Mojangles'] mc-text-shadow tracking-widest text-xl cursor-text"
className="bg-transparent text-white focus:text-[#FFFF55] outline-none border-none text-center font-[var(--font-base)] mc-text-shadow tracking-widest text-xl cursor-text"
/>
</div>
)}
+4 -4
View File
@@ -150,7 +150,7 @@ export default function CustomTUModal({
onChange={(e) => setName(e.target.value)}
onFocus={() => setFocusIndex(0)}
placeholder={t("modals.customTu.namePlaceholder")}
className="w-full h-10 px-3 bg-black/40 border-2 border-[#373737] text-white text-base outline-none font-['Mojangles']"
className="w-full h-10 px-3 bg-black/40 border-2 border-[#373737] text-white text-base outline-none font-[var(--font-base)]"
style={{ imageRendering: "pixelated" }}
/>
</div>
@@ -165,7 +165,7 @@ export default function CustomTUModal({
onChange={(e) => setDesc(e.target.value)}
onFocus={() => setFocusIndex(1)}
placeholder={t("modals.customTu.descPlaceholder")}
className="w-full h-10 px-3 bg-black/40 border-2 border-[#373737] text-white text-base outline-none font-['Mojangles']"
className="w-full h-10 px-3 bg-black/40 border-2 border-[#373737] text-white text-base outline-none font-[var(--font-base)]"
style={{ imageRendering: "pixelated" }}
/>
</div>
@@ -180,7 +180,7 @@ export default function CustomTUModal({
onChange={(e) => setUrl(e.target.value)}
onFocus={() => setFocusIndex(2)}
placeholder={t("modals.customTu.urlPlaceholder")}
className="w-full h-10 px-3 bg-black/40 border-2 border-[#373737] text-white text-base outline-none font-['Mojangles']"
className="w-full h-10 px-3 bg-black/40 border-2 border-[#373737] text-white text-base outline-none font-[var(--font-base)]"
style={{ imageRendering: "pixelated" }}
/>
</div>
@@ -194,7 +194,7 @@ export default function CustomTUModal({
type="text"
readOnly
value={path}
className="w-full h-10 px-3 bg-black/20 border-2 border-[#222] text-black text-xs outline-none font-['Mojangles'] cursor-not-allowed"
className="w-full h-10 px-3 bg-black/20 border-2 border-[#222] text-black text-xs outline-none font-[var(--font-base)] cursor-not-allowed"
style={{ imageRendering: "pixelated" }}
/>
</div>
+1 -1
View File
@@ -135,7 +135,7 @@ export default function GameLogModal({
exit={{ y: 20, opacity: 0 }}
transition={{ duration: 0.15 }}
onClick={(e) => e.stopPropagation()}
className="flex flex-col w-[640px] max-w-[92vw] max-h-[85vh] p-5 font-['Mojangles'] mc-options-bg"
className="flex flex-col w-[640px] max-w-[92vw] max-h-[85vh] p-5 font-[var(--font-base)] mc-options-bg"
>
<h3 className="text-2xl font-bold text-[#333333] mb-3 text-left w-full px-2 mc-text-shadow">
{t("modals.gameLog.title")}
+4 -4
View File
@@ -273,7 +273,7 @@ export default function OptionsModal({
}));
}}
onFocus={() => setFocusIndex(index)}
className={`w-24 h-8 bg-black/40 border-2 border-[#373737] text-white text-sm px-2 outline-none text-center font-['Mojangles'] focus:border-[#FFFF55] [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none ${
className={`w-24 h-8 bg-black/40 border-2 border-[#373737] text-white text-sm px-2 outline-none text-center font-[var(--font-base)] focus:border-[#FFFF55] [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none ${
disabled ? "opacity-40 cursor-not-allowed" : ""
}`}
style={{ imageRendering: "pixelated" }}
@@ -293,7 +293,7 @@ export default function OptionsModal({
setValues((prev) => ({ ...prev, [option.id]: e.target.value }));
}}
onFocus={() => setFocusIndex(index)}
className={`w-44 h-8 bg-black/40 border-2 border-[#373737] text-white text-sm px-2 outline-none font-['Mojangles'] focus:border-[#FFFF55] ${
className={`w-44 h-8 bg-black/40 border-2 border-[#373737] text-white text-sm px-2 outline-none font-[var(--font-base)] focus:border-[#FFFF55] ${
disabled ? "opacity-40 cursor-not-allowed" : ""
}`}
style={{ imageRendering: "pixelated" }}
@@ -311,7 +311,7 @@ export default function OptionsModal({
setValues((prev) => ({ ...prev, [option.id]: e.target.value }));
}}
onFocus={() => setFocusIndex(index)}
className={`w-44 h-8 bg-white border-2 border-[#373737] text-black text-sm px-2 outline-none font-['Mojangles'] focus:border-[#FFFF55] ${
className={`w-44 h-8 bg-white border-2 border-[#373737] text-black text-sm px-2 outline-none font-[var(--font-base)] focus:border-[#FFFF55] ${
disabled ? "opacity-40 cursor-not-allowed" : ""
}`}
style={{ imageRendering: "pixelated" }}
@@ -433,7 +433,7 @@ export default function OptionsModal({
}
}}
>
<div className="relative w-[620px] max-w-[95vw] max-h-[88vh] p-5 flex flex-col items-center font-['Mojangles'] mc-options-bg">
<div className="relative w-[620px] max-w-[95vw] max-h-[88vh] p-5 flex flex-col items-center font-[var(--font-base)] mc-options-bg">
<h2 className="text-xl text-black mc-text-shadow mb-1 text-center">
{t("modals.options.title")}
</h2>
+3 -3
View File
@@ -189,7 +189,7 @@ export default function SetUidModal({
onChange={(e) => setUid(e.target.value)}
onFocus={() => setFocusIndex(2)}
placeholder="0xFF02F0C87E8AC1F2"
className={`w-full h-10 px-3 bg-black/40 border-2 ${focusIndex === 2 ? 'border-white' : 'border-[#373737]'} text-white text-base outline-none font-['Mojangles'] text-center`}
className={`w-full h-10 px-3 bg-black/40 border-2 ${focusIndex === 2 ? 'border-white' : 'border-[#373737]'} text-white text-base outline-none font-[var(--font-base)] text-center`}
style={{ imageRendering: "pixelated", filter: focusIndex === 2 ? 'brightness(1.2)' : 'none' }}
/>
</div>
@@ -203,7 +203,7 @@ export default function SetUidModal({
onClick={() => { playPressSound(); setIsDropdownOpen(!isDropdownOpen); }}
onFocus={() => { setFocusIndex(2); setIsDropdownOpen(false); }}
tabIndex={0}
className={`w-full h-10 px-3 bg-black/40 border-2 ${focusIndex === 2 ? 'border-white' : 'border-[#373737]'} flex items-center justify-between text-white text-base outline-none font-['Mojangles'] cursor-pointer`}
className={`w-full h-10 px-3 bg-black/40 border-2 ${focusIndex === 2 ? 'border-white' : 'border-[#373737]'} flex items-center justify-between text-white text-base outline-none font-[var(--font-base)] cursor-pointer`}
style={{ imageRendering: "pixelated", filter: focusIndex === 2 ? 'brightness(1.2)' : 'none' }}
>
<span className="truncate">
@@ -227,7 +227,7 @@ export default function SetUidModal({
setSelectedInstance(i.instanceId);
setIsDropdownOpen(false);
}}
className="px-3 py-2 text-white text-sm cursor-pointer truncate font-['Mojangles']"
className="px-3 py-2 text-white text-sm cursor-pointer truncate font-[var(--font-base)]"
>
{i.name} {i.selectedBranch ? `(${i.selectedBranch})` : ""}
</div>
+15 -1
View File
@@ -256,6 +256,19 @@ const CreditsView = memo(function CreditsView() {
category: "SPECIAL THANKS",
icon: "",
subcategories: [
{
name: "Emerald Translations",
icon: "",
roles: [
{
role: "",
members: [
{ name: "dydymiku (French)", url: "#" },
{ name: "DimsMaybe/Hvrket (Russian)", url: "#" },
],
},
],
},
...(isAndroid
? [
{
@@ -341,7 +354,8 @@ const CreditsView = memo(function CreditsView() {
}}
>
{t("credits.backToMenu")}
</button> )}
</button>
)}
<motion.div
initial={{ y: "50%" }}
+1 -1
View File
@@ -443,7 +443,7 @@ const GoldMapperView = memo(function GoldMapperView() {
if (e.target === e.currentTarget) closeModal();
}}
>
<div className="relative w-[620px] max-w-[95vw] h-[580px] max-h-[88vh] p-5 flex flex-col font-['Mojangles'] mc-options-bg">
<div className="relative w-[620px] max-w-[95vw] h-[580px] max-h-[88vh] p-5 flex flex-col font-[var(--font-base)] mc-options-bg">
<h2 className="text-xl text-black mc-text-shadow mb-4 text-center">
{t("goldMapper.assign", { name: displayName(editing) })}
</h2>
+1 -1
View File
@@ -162,7 +162,7 @@ const ScreenshotsView = memo(function ScreenshotsView() {
animate={{ opacity: 1, scale: 1 }}
exit={{ opacity: 0, scale: 0.95 }}
transition={{ duration: animationsEnabled ? 0.3 : 0 }}
className="flex flex-col items-center w-full h-full max-w-6xl relative font-['Mojangles'] text-white select-none outline-none focus:outline-none"
className="flex flex-col items-center w-full h-full max-w-6xl relative font-[var(--font-base)] text-white select-none outline-none focus:outline-none"
>
<h2 className="text-2xl text-white mc-text-shadow mt-4 mb-6 border-b-2 border-[#373737] pb-2 w-[30%] max-w-[250px] text-center tracking-widest uppercase opacity-80 font-bold whitespace-nowrap px-4">
{t("screenshots.title")}
+4 -3
View File
@@ -590,6 +590,7 @@ const SettingsView = memo(function SettingsView() {
//neo: here goes the list, dont ask why its here
{ code: "en", label: "English" },
{ code: "fr", label: "Français (French)" }, // by Dydymiku (thanks!!)
{ code: "ru", label: "Pусский (Russian)" }, // by brnwvshed (thanks!!)
];
for (const lang of availableLanguages) {
const isCurrent = i18n.resolvedLanguage?.startsWith(lang.code);
@@ -1122,7 +1123,7 @@ const SettingsView = memo(function SettingsView() {
value={argsInput}
onChange={(e) => setArgsInput(e.target.value)}
placeholder="e.g. -quitondisconnect -ip 127.0.0.1"
className="w-full h-10 px-3 bg-black/40 border-2 border-[#373737] text-white text-base outline-none font-['Mojangles'] text-center"
className="w-full h-10 px-3 bg-black/40 border-2 border-[#373737] text-white text-base outline-none font-[var(--font-base)] text-center"
style={{ imageRendering: "pixelated" }}
/>
<div className="flex gap-4 mt-6 w-full justify-center">
@@ -1202,7 +1203,7 @@ const SettingsView = memo(function SettingsView() {
value={prefixInput}
onChange={(e) => setPrefixInput(e.target.value)}
placeholder="e.g. gamemoderun"
className="w-full h-10 px-3 bg-black/40 border-2 border-[#373737] text-white text-base outline-none font-['Mojangles'] text-center"
className="w-full h-10 px-3 bg-black/40 border-2 border-[#373737] text-white text-base outline-none font-[var(--font-base)] text-center"
style={{ imageRendering: "pixelated" }}
/>
<div className="flex gap-4 mt-6 w-full justify-center">
@@ -1282,7 +1283,7 @@ const SettingsView = memo(function SettingsView() {
onChange={(e) => setEnvVarsInput(e.target.value)}
placeholder="WINEDLLOVERRIDES=foo=n&#10;MANGOHUD=1"
rows={6}
className="w-full px-3 py-2 bg-black/40 border-2 border-[#373737] text-white text-sm outline-none font-['Mojangles'] resize-none"
className="w-full px-3 py-2 bg-black/40 border-2 border-[#373737] text-white text-sm outline-none font-[var(--font-base)] resize-none"
style={{ imageRendering: "pixelated" }}
/>
<div className="flex gap-4 mt-6 w-full justify-center">
+6 -6
View File
@@ -753,7 +753,7 @@ const WorkshopView = memo(function WorkshopView({
animate={{ opacity: 1, scale: 1 }}
exit={{ opacity: 0, scale: 0.95 }}
transition={{ duration: config.animationsEnabled ? 0.3 : 0 }}
className="flex flex-col items-center w-full h-full max-h-full relative font-['Mojangles'] text-white select-none outline-none focus:outline-none"
className="flex flex-col items-center w-full h-full max-h-full relative font-[var(--font-base)] text-white select-none outline-none focus:outline-none"
>
<div className="flex items-center justify-center gap-0 mb-4 w-full px-4">
<div
@@ -873,7 +873,7 @@ const WorkshopView = memo(function WorkshopView({
}
spellCheck={false}
autoFocus={isSearchTab}
className="bg-transparent border-none outline-none text-white text-lg mc-text-shadow w-full placeholder-white/40 font-['Mojangles'] tracking-widest"
className="bg-transparent border-none outline-none text-white text-lg mc-text-shadow w-full placeholder-white/40 font-[var(--font-base)] tracking-widest"
/>
{search && (
<button
@@ -1499,7 +1499,7 @@ function PackageModal({
>
<div
onClick={(e) => e.stopPropagation()}
className="flex flex-col w-[640px] max-h-[85vh] overflow-hidden font-['Mojangles'] mc-options-bg"
className="flex flex-col w-[640px] max-h-[85vh] overflow-hidden font-[var(--font-base)] mc-options-bg"
>
{isPluginTab ? (
<div className="w-full h-[100px] flex-shrink-0 bg-black/60 flex items-center px-6 border-b border-[#444]">
@@ -1926,7 +1926,7 @@ function PackageModal({
exit={{ y: 20, opacity: 0 }}
transition={{ duration: 0.15 }}
onClick={(e) => e.stopPropagation()}
className="flex flex-col w-[520px] font-['Mojangles'] text-white border-2 border-[#555] rounded-sm overflow-hidden"
className="flex flex-col w-[520px] font-[var(--font-base)] text-white border-2 border-[#555] rounded-sm overflow-hidden"
style={{
backgroundImage: "url('/images/frame_background.png')",
backgroundSize: "100% 100%",
@@ -2265,7 +2265,7 @@ function InstallModal({
exit={{ y: 20, opacity: 0 }}
transition={{ duration: 0.15 }}
onClick={(e) => e.stopPropagation()}
className="flex flex-col w-[520px] font-['Mojangles'] text-white border-2 border-[#555] rounded-sm overflow-hidden"
className="flex flex-col w-[520px] font-[var(--font-base)] text-white border-2 border-[#555] rounded-sm overflow-hidden"
style={{
backgroundImage: "url('/images/frame_background.png')",
backgroundSize: "100% 100%",
@@ -2543,7 +2543,7 @@ function UninstallModal({
exit={{ y: 20, opacity: 0 }}
transition={{ duration: 0.15 }}
onClick={(e) => e.stopPropagation()}
className="flex flex-col w-[520px] font-['Mojangles'] text-white border-2 border-[#555] rounded-sm overflow-hidden"
className="flex flex-col w-[520px] font-[var(--font-base)] text-white border-2 border-[#555] rounded-sm overflow-hidden"
style={{
backgroundImage: "url('/images/frame_background.png')",
backgroundSize: "100% 100%",
+4 -1
View File
@@ -1,6 +1,9 @@
@import "tailwindcss";
@layer base {
:root {
--font-base: "Mojangles", monospace;
}
*,
::before,
::after {
@@ -153,7 +156,7 @@
body {
margin: 0;
background-color: #000;
font-family: "Mojangles", monospace;
font-family: var(--font-base, "Mojangles", monospace);
}
.mc-button {
+5
View File
@@ -3,6 +3,8 @@ import { initReactI18next } from "react-i18next";
import LanguageDetector from "i18next-browser-languagedetector";
import en from "./locales/en.json";
import fr from "./locales/fr.json";
import ru from "./locales/ru.json";
import { applyLangFont } from "./langFonts";
i18n
.use(LanguageDetector)
.use(initReactI18next)
@@ -10,6 +12,7 @@ i18n
resources: {
en: { translation: en },
fr: { translation: fr },
ru: { translation: ru },
},
fallbackLng: "en",
interpolation: {
@@ -21,4 +24,6 @@ i18n
},
});
applyLangFont(i18n.resolvedLanguage ?? i18n.language);
export default i18n;
+35
View File
@@ -0,0 +1,35 @@
import i18n from "i18next";
const LANG_FONTS: Record<string, string> = {
ru: "/fonts/rus/minecraft.ttf",
};
const BASE_FONT = '"Mojangles", monospace';
let loadedLangKey: string | null = null;
function applyLangFont(lang: string) {
const root = document.documentElement;
const key = lang.split("-")[0];
if (loadedLangKey) {
const old = document.querySelector(
`style[data-lang-font="${loadedLangKey}"]`,
);
if (old) old.remove();
loadedLangKey = null;
}
const fontPath = LANG_FONTS[key];
if (!fontPath) {
root.style.setProperty("--font-base", BASE_FONT);
return;
}
const family = `"${key}-lang"`;
loadedLangKey = key;
const style = document.createElement("style");
style.dataset.langFont = key;
style.textContent = `@font-face { font-family: ${family}; src: url("${fontPath}") format("truetype"); font-weight: normal; font-style: normal; }`;
document.head.appendChild(style);
root.style.setProperty("--font-base", `${family}, ${BASE_FONT}`);
}
i18n.on("languageChanged", applyLangFont);
export { LANG_FONTS, applyLangFont };
+773
View File
@@ -0,0 +1,773 @@
{
"common": {
"back": "Назад",
"done": "Готово",
"cancel": "Отменить",
"save": "Сохранить",
"delete": "Удалить",
"ok": "ОК",
"next": "След.",
"finish": "Конец",
"error": "Ошибка!",
"on": "ON",
"off": "OFF",
"enabled": "Включено",
"disabled": "Выключено",
"none": "Нет",
"unknown": "Неизвестно",
"all": "Все",
"noResults": "Без результатов",
"set": "Поставить"
},
"header": {
"title": "Emerald Legacy Launcher"
},
"download": {
"title": "Загрузки",
"gameFiles": "Файлы игры",
"updateAvailable": "Доступно обновление!",
"gameUpdateAvailable": "Доступно обновление игры!",
"steamIntegration": "Интеграция Steam",
"friendRequest": "Заявки в друзья",
"gameInvite": "Приглашение в игру"
},
"app": {
"day": "День",
"night": "Ночь",
"toggleTime": "Установить время",
"swfEditor": "SWF Редактор",
"controllerConnected": "ГЕЙМПАД ПОДКЛЮЧЕН",
"welcome": "Добро пожаловать {{name}}!",
"version": "Версия: {{version}}"
},
"home": {
"installVersion": "Установить версию",
"stopGame": "Закрыть игру",
"installing": "В процессе установки...",
"playGame": "Запустить игру",
"downloadVersion": "Скачать {{name}}",
"helpAndOptions": "Помощь & Настройки",
"versions": "Версии",
"workshop": "Мастерская",
"developerTools": "Инструменты разработчика"
},
"settings": {
"audio": "Аудио",
"video": "Видео",
"launcher": "Лаунчер",
"game": "Игра",
"credits": "Титры",
"controls": "Управление",
"plugins": "Плагины",
"android": "Андроид",
"music": "Музыка: {{value}}%",
"sound": "Звук: {{value}}%",
"clickEffects": "Эффекты от нажатия",
"animations": "Анимации",
"appleSiliconPerfBoost": "Улучшение производительности на Apple Silicon",
"extraLaunchArgs": "Дополнительные арг. запуска",
"extraLaunchArgsDesc": "Арг. разделённые пробелом вписанные в зап. файл",
"launchPrefix": "Префикс запуска",
"launchPrefixDesc": "Команда для обёртки запуска (нап. gamemoderun)",
"launchEnvVars": "Переменные окружения",
"launchEnvVarsDesc": "По одной паре КЛЮЧ=ЗНАЧЕНИЕ на строку",
"startInFullscreen": "Запустить на полный экран",
"discordRpc": "Интеграция Discord",
"skipIntro": "Пропустить заставку",
"legacyMode": "Легаси-режим",
"runner": "Среда запуска",
"mangohud": "MangoHud",
"downloadRunner": "Скачать GE-Proton (Рекомендуется)",
"downloadingRunner": "Загрузка среды запуска... {{progress}}%",
"exportSettings": "Экспорт настроек",
"importSettings": "Импорт настроек",
"resetSetup": "Сбросить настройки",
"languages": "Языки",
"stopGameButton": "ЗАКРЫТЬ ИГРУ",
"noPluginsInstalled": "Плагины не установлены",
"byAuthor": "от {{author}}",
"containerSettings": "Настройки контейнера",
"openContainer": "Открыть контейнер",
"androidAudio": "Аудио: {{backend}}"
},
"reset": {
"title": "Сбросить настройку",
"confirm": "Вы уверены, что хотите сбросить настройки лаунчера?",
"confirmTitle": "ПОДТВЕРДИТЕ СБРОС",
"warning": "⚠️ Это действие:",
"clearAllSettings": "Очистит все настройки лаунчера",
"resetUsername": "Сбросит ваше имя пользователя",
"showSetupAgain": "Снова отобразит экран первичной настройки",
"requireReconfiguration": "Потребует повторной конфигурации",
"cannotBeUndone": "Это действие нельзя будет отменить!"
},
"setup": {
"letsConfigure": "Давайте настроим ваш лаунчер",
"compatibilityRuntime": "Среда совместимости",
"choosePreferredOptions": "Выберите предпочитаемые параметры и поведение",
"username": "Имя пользователя",
"enterUsername": "Введите имя пользователя",
"usernameRequired": "Для продолжения необходимо ввести имя пользователя",
"runtimeDetected": "Среда совместимости обнаружена",
"runtimeNotDetected": "Среда совместимости не обнаружена",
"gptInstalled": "Установлены Game Porting Toolkit 3 и Wine",
"mustInstallRuntime": "Вы должны установить среду совместимости перед продолжением.",
"installRuntime": "Установить среду совместимости",
"reinstallRuntime": "Переустановить среду совместимости",
"noCompatibleRunners": "Совместимые среды запуска не найдены. Пожалуйста, установите Wine или Proton.",
"changeLaterInSettings": "Вы сможете изменить это позже в настройках",
"windowsNativeSupport": "Нативная поддержка Windows",
"windowsNativeDesc": "Emerald Legacy работает на Windows нативно и не требует дополнительных компонентов.",
"diamondRuntimeSupport": "Поддержка DiamondRuntime",
"diamondRuntimeDesc": "Emerald Launcher работает на Android нативно и не требует дополнительных компонентов. Работает на базе нашего собственного DiamondRuntime.",
"setupComplete": "Emerald Launcher успешно настроен и готов к работе!",
"discordRpc": "Discord RPC",
"animations": "Анимации",
"changeTheseLater": "Вы сможете изменить это позже в настройках",
"ready": "Готово",
"installing": "Установка...",
"runtime": "Среда совместимости",
"runner": "Среда запуска",
"macosPreparing": "Подготовка к настройке среды совместимости macOS...",
"macosCompleted": "Настройка успешно завершена!",
"macosFailed": "Ошибка настройки: {{error}}"
},
"versions": {
"title": "Версии",
"custom": "Кастомные",
"updateAvailable": "Доступно обновление!",
"downloadToCustomPath": "Скачать в указанную папку",
"downloadDlc": "Скачать DLC",
"options": "Параметры",
"channel": "Канал",
"latest": "Последняя",
"openFolder": "Открыть папку",
"addToSteam": "Добавить в Steam",
"importWorld": "Импортировать мир",
"backup": "Резервная копия",
"restore": "Восстановить",
"customize": "Настроить",
"setUid": "Установить UID",
"editCustom": "Изменить кастомную",
"removeCustom": "Удалить кастомную",
"uninstall": "Удалить",
"viewPlaytime": "Время в игре",
"invalidDirectory": "Неверная папка",
"selectEmptyDirectory": "Пожалуйста, выберите пустую папку для установки.",
"deleteTitle": "Удалить {{name}}?",
"deleteWarning": "Внимание: все ваши сохранения и миры для этой версии будут удалены навсегда!"
},
"lceOnline": {
"hostGame": "Создать игру",
"stopHosting": "Закрыть игру",
"addFriend": "Добавить друга",
"signOut": "Выйти",
"awaitingAuthentication": "Ожидание авторизации...",
"friends": "Друзья",
"invites": "Приглашения",
"requests": "Запросы",
"pendingRequests": "Исходящие запросы",
"noneAvailable": "Нет доступных",
"invite": "Пригласить",
"remove": "Удалить",
"cancel": "Отмена",
"accept": "Принять",
"decline": "Отклонить",
"username": "Имя пользователя",
"send": "Отправить",
"error": "Ошибка",
"ok": "OK",
"failedToStartHosting": "Не удалось создать игру",
"anErrorOccurred": "Произошла ошибка"
},
"devtools": {
"comingSoon": "Скоро",
"tools": {
"guides": "Руководства",
"pck": "Редактор PCK",
"arc": "Редактор ARC",
"loc": "Редактор LOC",
"grf": "Редактор GRF",
"col": "Редактор COL",
"options": "Редактор параметров",
"model": "Редактор моделей"
}
},
"guides": {
"communityGuides": "Руководства сообщества",
"loadingGuide": "Загрузка руководства...",
"backToGuides": "← Назад к руководствам",
"loadingGuides": "Загрузка руководств...",
"failedToLoadGuides": "Не удалось загрузить руководства",
"noGuidesFound": "Руководства не найдены"
},
"skins": {
"skinLibrary": "Библиотека скинов",
"capeLibrary": "Библиотека плащей",
"importSkin": "Импортировать скин",
"importCape": "Импортировать плащ",
"deleteSkin": "Удалить скин",
"deleteCape": "Удалить плащ",
"editSkin": "Изменить скин",
"switchToCape": "Переключить на плащ",
"switchToSkin": "Переключить на скин",
"failedToFetch": "Не удалось загрузить данные",
"active": "Активен",
"slim": "Тонкий",
"noCape": "Без плаща",
"fromFile": "Из файла",
"fromUsername": "По имени пользователя",
"minecraftUsername": "Имя пользователя Minecraft",
"fetching": "Загрузка...",
"fetch": "Загрузить {{type}}",
"chooseModelType": "Выберите тип модели игрока для этого скина",
"normalWideArms": "Обычная (широкие руки)",
"slimThinArms": "Тонкая (узкие руки)"
},
"skinEditor": {
"title": "Редактор скинов",
"pencil": "Карандаш",
"eraser": "Ластик",
"pick": "Пипетка",
"fill": "Заливка",
"color": "Цвет",
"alpha": "Прозрачность",
"alex": "Алекс",
"steve": "Стив",
"grid": "Сетка",
"undo": "Отменить",
"save": "Сохранить",
"export": "Экспорт",
"back": "Назад",
"customSkin": "Пользовательский скин",
"exportSkin": "Экспортировать скин"
},
"goldMapper": {
"controller": "Геймпад",
"mouse": "Мышь",
"keyboard": "Клавиатура",
"leftClick": "Левый клик",
"middleClick": "Средний клик",
"rightClick": "Правый клик",
"resetToDefaults": "Сбросить по умолчанию",
"enableGoldMapper": "Включить GoldMapper",
"back": "Назад",
"assign": "Назначить {{name}}",
"typeKeyName": "Введите название клавиши и нажмите Enter",
"unknownKeyName": "Неизвестное название клавиши",
"cancel": "Отмена"
},
"locEditor": {
"title": "Редактор LOC",
"editingLoadedLoc": "редактирование загруженного файла loc",
"openLoc": "Открыть LOC",
"saveLoc": "Сохранить LOC",
"openToBegin": "Открыть файл LOC, чтобы начать редактирование",
"loaded": "Загружен {{name}}",
"failedToParse": "Не удалось прочитать LOC",
"savedSuccessfully": "Файл LOC успешно сохранён",
"stringAdded": "Строка добавлена",
"stringUpdated": "Строка обновлена",
"stringDeleted": "Строка удалена",
"static": "Статическая",
"keyed": "Именованная (Keyed)",
"searchStrings": "Поиск строк...",
"addString": "Добавить строку",
"keyOrIndex": "Ключ / Индекс",
"value": "Значение",
"actions": "Действия",
"edit": "Изменить",
"back": "Назад",
"stringTitle": "Строка",
"add": "Добавить",
"stringKey": "Ключ строки",
"staticEntry": "Статическая запись — Индекс: {{index}}",
"stringValue": "Значение строки",
"cancel": "Отмена",
"save": "Сохранить"
},
"grfEditor": {
"title": "Редактор GRF",
"editing": "редактирование:",
"newGrf": "Новый GRF",
"openGrf": "Открыть GRF",
"saveGrf": "Сохранить GRF",
"openToBegin": "Открыть файл GRF, чтобы начать редактирование",
"gameRules": "Игровые правила",
"files": "Файлы ({{count}})",
"noRulesFound": "Правила не найдены",
"addFile": "Добавить файл",
"filename": "Имя файла",
"size": "Размер",
"actions": "Действия",
"noFilesInGrf": "В файле GRF нет файлов",
"delete": "Удалить",
"back": "Назад",
"loaded": "Загружен {{name}}",
"failedToParse": "Не удалось прочитать GRF",
"newGrfCreated": "Новый GRF создан",
"added": "Добавлен {{name}}",
"removed": "Удален {{name}}",
"savedSuccessfully": "Файл GRF успешно сохранён",
"failedToSave": "Не удалось сохранить GRF",
"props": "[Свойств: {{count}}]"
},
"optionsEditor": {
"title": "Редактор параметров",
"openSettings": "Открыть settings.dat",
"saveSettings": "Сохранить settings.dat",
"openToBegin": "Открыть settings.dat, чтобы начать",
"tabSettings": "Настройки",
"tabSkins": "Скины",
"tabActions": "Действия",
"chosenSkinId": "ID выбранного скина",
"playerCapeId": "ID плаща игрока",
"favoriteSkins": "Избранные скины",
"back": "Назад",
"loaded": "Загружен options.dat",
"failedToParse": "Не удалось прочитать параметры",
"saved": "Параметры сохранены",
"failedToSave": "Не удалось сохранить"
},
"swfEditor": {
"title": "Редактор SWF",
"openSwf": "Открыть SWF",
"saveSwf": "Сохранить SWF",
"openToBegin": "Открыть файл SWF, чтобы начать редактирование",
"searchAssets": "Поиск ресурсов...",
"selectImageViewDetails": "Выберите изображение для просмотра сведений",
"characterId": "ID персонажа:",
"type": "Тип:",
"size": "Размер:",
"loadingPreview": "Загрузка предпросмотра...",
"exportBitmap": "Экспортировать растр (Bitmap)",
"replaceBitmap": "Заменить растр (Bitmap)",
"back": "Назад",
"loaded": "Загружен {{name}}",
"failedToProcess": "Не удалось обработать SWF",
"exported": "Экспортировано: {{name}}",
"imageReplaced": "Изображение заменено",
"savedSuccessfully": "Файл SWF успешно сохранён"
},
"colEditor": {
"title": "Редактор COL",
"version": "Версия:",
"openCol": "Открыть COL",
"saveCol": "Сохранить COL",
"openToBegin": "Открыть файл COL, чтобы начать редактирование",
"colors": "Цвета ({{count}})",
"worldColors": "Цвета мира ({{count}})",
"searchColors": "Поиск цветов...",
"addColor": "Добавить цвет",
"addWorldColor": "Добавить цвет мира",
"name": "Имя",
"color": "Цвет (ARGB)",
"water": "Вода (ARGB)",
"underwater": "Под водой (ARGB)",
"fog": "Туман (ARGB)",
"remove": "Удалить",
"back": "Назад",
"loaded": "Загружен {{name}}",
"failedToParse": "Не удалось прочитать COL",
"savedSuccessfully": "Файл COL успешно сохранён",
"failedToSave": "Не удалось сохранить COL",
"colorAdded": "Цвет добавлен",
"worldColorAdded": "Цвет мира добавлен"
},
"workshop": {
"tabs": {
"skin": "Скины",
"texture": "Текстуры",
"world": "Миры",
"mod": "Моды",
"dlc": "DLC",
"plugins": "Плагины",
"versions": "Версии",
"installed": "Установленные",
"search": "Поиск",
"server": "Серверы",
"serverPlugins": "Плагины сервера"
},
"filterInstalled": "ФИЛЬТР УСТАНОВЛЕННЫХ...",
"filterVersions": "ФИЛЬТР ВЕРСИЙ...",
"filterPlugins": "ФИЛЬТР ПЛАГИНОВ...",
"filterServers": "ФИЛЬТР СЕРВЕРОВ...",
"enterKeywords": "ВВЕДИТЕ КЛЮЧЕВЫЕ СЛОВА...",
"startTypingToSearch": "Начните вводить для поиска...",
"searchingArchives": "Поиск в архивах...",
"nothingInstalled": "Ничего не установлено",
"noPluginsAvailable": "Нет доступных плагинов",
"noServersAvailable": "Нет доступных серверов",
"emptyCategory": "Категория пуста",
"noImage": "Нет изображения",
"updateAll": "Обновить все ({{count}})",
"reinstallAll": "Переустановить все ({{count}})",
"update": "Обновить",
"installed": "Установлено",
"added": "Добавлено",
"install": "УСТАНОВИТЬ",
"reinstall": "ПЕРЕУСТАНОВИТЬ",
"add": "ДОБАВИТЬ",
"download": "СКАЧАТЬ",
"remove": "УДАЛИТЬ",
"byAuthor": "От {{author}}",
"updateAvailable": "Доступно обновление",
"saved": "Сохранено",
"back": "Назад",
"failedToLoadRegistry": "Не удалось загрузить реестр",
"saveServerPlugin": "Сохранить плагин сервера",
"details": "Подробнее",
"metadata": "Метаданные",
"address": "Адрес:",
"type": "Тип:",
"version": "Версия:",
"owner": "Владелец:",
"discordServer": "Сервер Discord:",
"downloads": "Скачивания:",
"likes": "Лайки:",
"serverType": "Тип сервера:",
"file": "Файл:",
"fileSize": "Размер файла:",
"github": "GitHub:",
"packageId": "ID пакета:",
"outdated": " (устарело)",
"categories": "Категории",
"requiredDependencies": "Необходимые зависимости",
"installedSuffix": " (установлено)",
"requiredEditions": "Необходимые издания",
"files": "Файлы",
"splitArchive": "Разделённый архив · {{count}} ч.",
"dependenciesRequired": "Требуются зависимости",
"dependenciesRequiredDesc": "Этот пакет требует предварительной установки следующих компонентов",
"dependenciesAutoInstall": "Они будут установлены автоматически перед основным пакетом.",
"installPluginTitle": "УСТАНОВКА ПЛАГИНА",
"installContentTitle": "УСТАНОВКА КОНТЕНТА",
"installingPackage": "Установка «{{name}}»",
"targetEdition": "Целевое издание для «{{name}}»",
"installingDependencies": "Установка зависимостей...",
"installing": "Установка...",
"downloadingPluginFiles": "Скачивание файлов плагина...",
"downloadingDependencies": "Скачивание и извлечение необходимых зависимостей...",
"downloadingAssets": "Скачивание и извлечение ресурсов...",
"requestedPermissions": "Запрошенные разрешения",
"installedSuccessfully": "Успешно установлено!",
"pressAnyKeyToContinue": "Нажмите любую клавишу или кликните для продолжения",
"installationFailed": "Ошибка установки",
"retry": "Повторить",
"noInstalledEditions": "Установленные издания не найдены",
"removePluginTitle": "УДАЛЕНИЕ ПЛАГИНА",
"removeContentTitle": "УДАЛЕНИЕ КОНТЕНТА",
"removePackage": "Удалить «{{name}}»",
"selectEditionToRemove": "Выберите издание, чтобы удалить «{{name}}»",
"removing": "Удаление...",
"deletingFiles": "Удаление установленных файлов...",
"removedSuccessfully": "Успешно удалено!",
"removalFailed": "Ошибка удаления"
},
"screenshots": {
"title": "Скриншоты",
"noScreenshots": "Скриншоты не найдены",
"takeInGameWithF2": "Сделайте парочку в игре с помощью F2",
"openFolder": "ОТКРЫТЬ ПАПКУ",
"delete": "УДАЛИТЬ",
"close": "ЗАКРЫТЬ",
"scanning": "Сканирование архивов...",
"capturedOn": "Снято: {{date}}",
"deleteConfirm": "Вы уверены, что хотите удалить этот скриншот?"
},
"pckEditor": {
"openPck": "Открыть PCK",
"newPck": "Новый PCK",
"exportAll": "Экспортировать всё",
"savePck": "Сохранить PCK",
"searchAssets": "Поиск ресурсов...",
"addAsset": "Добавить ресурс",
"selectAsset": "Выберите ресурс для просмотра сведений",
"metadataProperties": "Свойства метаданных",
"addProperty": "+ Добавить свойство",
"remove": "Удалить",
"export": "Экспорт",
"replace": "Заменить",
"renameAsset": "Переименовать ресурс (Путь)",
"deleteAsset": "Удалить этот ресурс",
"selectAssetType": "Выберите тип ресурса",
"rename": "Переименовать",
"assetRenamed": "Ресурс переименован",
"exportingAllAssets": "Экспорт всех ресурсов...",
"allAssetsExported": "Все ресурсы экспортированы",
"exportFailed": "Ошибка экспорта",
"pckSaved": "Файл PCK успешно сохранён",
"newPckCreated": "Новый PCK создан",
"title": "Редактор PCK",
"openToBegin": "Открыть файл PCK, чтобы начать редактирование",
"endianness": "Порядок байтов (Endianness):",
"xmlSupport": "Поддержка XML:",
"enabled": "Включено",
"disabled": "Выключено",
"version": "Версия:",
"exportAssetDialog": "Экспортировать ресурс",
"savePckDialog": "Сохранить PCK",
"failedToParse": "Не удалось прочитать PCK",
"exported": "Экспортировано: {{name}}",
"deleted": "Удалено: {{name}}",
"assetReplaced": "Ресурс заменён",
"assetAdded": "Ресурс добавлен",
"noMetadataProperties": "Нет свойств метаданных",
"view3dSkin": "3D-просмотр скина",
"view3dCape": "3D-просмотр плаща",
"texturePreview": "Предпросмотр текстуры",
"back": "Назад",
"renameTitle": "Переименовать ресурс",
"newAssetPath": "Новый путь к ресурсу",
"cancel": "Отмена"
},
"modelEditor": {
"title": "Редактор моделей",
"import": "Импорт",
"export": "Экспорт",
"save": "Сохранить",
"bounds": "Границы (Bounds)",
"importToBegin": "Импортируйте файл .bbmodel или .json, чтобы начать",
"startDefaultModel": "Начать с модели по умолчанию",
"models": "Модели ({{count}})",
"add": "+ Добавить",
"remove": "Удалить",
"edit": "Изменить",
"parts": "Части ({{count}})",
"boxes": "Кубы/Хитбоксы ({{count}})",
"box": "Куб {{index}}",
"textures": "Текстуры ({{count}})",
"noTextures": "Нет текстур",
"selectModel": "Выберите модель для предпросмотра",
"back": "Назад",
"editPart": "Изменить часть",
"name": "Имя",
"translation": "Смещение (Translation)",
"editBox": "Изменить куб",
"position": "Позиция",
"size": "Размер",
"uvOffset": "UV-смещение",
"inflate": "Растяжение (Inflate)",
"mirrorUv": "Отразить UV",
"cancel": "Отмена",
"save": "Сохранить",
"imported": "Импортировано: {{name}}",
"loadedModels": "Загружено моделей: {{count}}",
"failedToParse": "Не удалось прочитать",
"addedTexture": "Добавлена текстура: {{name}}",
"created": "Создано: {{name}}",
"exported": "Экспортировано: {{name}}",
"exportFailed": "Ошибка экспорта",
"modelDeleted": "Модель удалена"
},
"arcEditor": {
"openArc": "Открыть ARC",
"exportAll": "Экспортировать всё",
"saveArc": "Сохранить ARC",
"openArcFile": "Открыть файл ARC, чтобы начать редактирование",
"archive": "Архив",
"languagesLoc": "Языки (LOC)",
"searchEntries": "Поиск записей...",
"addEntry": "Добавить запись",
"entryDetails": "Сведения о записи",
"exportFile": "Экспортировать файл",
"replaceData": "Заменить данные",
"renamePath": "Переименовать / Путь",
"deleteEntry": "Удалить запись",
"zlibCompressed": "Сжато ZLIB",
"uncompressed": "Без сжатия",
"noLocFound": "Файл languages.loc не найден в архиве",
"createLoc": "Создать languages.loc",
"writeToArc": "Записать в ARC",
"addString": "Добавить строку",
"title": "Редактор ARC",
"size": "Размер",
"format": "Формат",
"compressed": "Сжато",
"raw": "Сырые данные (Raw)",
"selectEntry": "Выберите запись для просмотра сведений",
"zlib": "ZLIB",
"searchStrings": "Поиск строк...",
"keyOrIndex": "Ключ / Индекс",
"value": "Значение",
"actions": "Действия",
"edit": "Изменить",
"static": "Статическая",
"keyed": "Именованная (Keyed)",
"back": "Назад",
"saveArcDialog": "Сохранить ARC",
"exportAssetDialog": "Экспортировать ресурс",
"loaded": "Загружен {{name}}",
"failedToParse": "Не удалось прочитать ARC",
"arcSaved": "Файл ARC успешно сохранён",
"saveFailed": "Ошибка сохранения",
"extracted": "Извлечено: {{name}}",
"extractionFailed": "Ошибка извлечения",
"deleted": "Удалено: {{name}}",
"locUpdatedInArchive": "Файл languages.loc обновлён в архиве",
"locAddedToArchive": "Файл languages.loc добавлен в архив",
"entryAdded": "Запись добавлена",
"entryReplaced": "Запись заменена",
"entryRenamed": "Запись переименована",
"stringAdded": "Строка добавлена",
"stringUpdated": "Строка обновлена",
"stringDeleted": "Строка удалена",
"exportingAll": "Экспорт всех записей архива...",
"allEntriesExported": "Все записи экспортированы",
"exportFailed": "Ошибка экспорта",
"compressionEnabled": "Сжатие включено",
"compressionDisabled": "Сжатие выключено",
"createdNewLocaleStructure": "Создана новая структура локализации",
"addFileToArchive": "Добавить файл в архив",
"selectSourceFile": "Выберите исходный файл",
"cancel": "Отмена",
"replaceFileData": "Заменить данные файла",
"selectNewFile": "Выберите новый файл",
"renameEntry": "Переименовать запись",
"newArchivePath": "Новый путь в архиве",
"markAsCompressed": "Пометить как сжатый (zlib)",
"rename": "Переименовать",
"stringTitle": "Строка",
"add": "Добавить",
"stringKey": "Ключ строки",
"staticEntry": "Статическая запись — Индекс: {{index}}",
"stringValue": "Значение строки",
"save": "Сохранить"
},
"credits": {
"backToMenu": "Назад в меню"
},
"modals": {
"downloadDlc": {
"title": "Скачать DLC",
"loading": "Загрузка доступных DLC...",
"noneFound": "Папки DLC не найдены в репозитории.",
"available": "Доступно: {{count}}",
"all": "Все",
"none": "Ни одного",
"download": "Скачать ({{count}})",
"done": "Готово",
"close": "Закрыть",
"downloaded": "Скачано {{downloaded}}/{{selected}}",
"failedToDownload": "Не удалось скачать {{name}}: {{reason}}"
},
"gameLog": {
"title": "Лог вылета игры",
"saveDialog": "Сохранить лог игры",
"saveAsFile": "Сохранить как файл",
"copy": "Копировать",
"close": "Закрыть",
"saved": "Сохранено!",
"failedToSave": "Не удалось сохранить.",
"copied": "Скопировано в буфер обмена!",
"failedToCopy": "Не удалось скопировать.",
"showingLast": "Отображаются последние {{shown}} строк из {{total}}."
},
"setUid": {
"title": "Установить UID",
"manual": "Вручную",
"copy": "Копировать",
"enterUid": "Введите UID",
"selectInstance": "Выберите установленную копию",
"selectPlaceholder": "-- Выберите копию игры --",
"noInstances": "Других установленных копий игры не найдено.",
"selectToCopy": "Выберите копию, из которой нужно скопировать данные.",
"sourceNoUid": "В исходной копии отсутствует uid.dat или его не удалось прочитать.",
"uidEmpty": "UID не может быть пустым.",
"cancel": "Отмена",
"save": "Сохранить"
},
"playtime": {
"title": "Время в игре",
"loading": "Загрузка...",
"total": "Всего",
"thisWeek": "На этой неделе",
"today": "Сегодня",
"dailyBreakdown": "Статистика по дням",
"failedToLoad": "Не удалось загрузить данные о времени в игре.",
"close": "Закрыть"
},
"customize": {
"title": "Кастомизация",
"titleImage": "Логотип игры (Title Image)",
"panoramaBackground": "Панорамный фон",
"changeImage": "Изменить изображение",
"pickImage": "Выбрать изображение",
"reset": "Сбросить",
"preview": "Предпросмотр",
"selectTitleImage": "Выберите логотип игры",
"selectPanorama": "Выберите панорамный фон",
"cancel": "Отмена",
"save": "Сохранить"
},
"chooseInstance": {
"title": "Присоединиться к игре",
"joiningTitle": "Подключение к игре",
"joinPrompt": "Подключение к игре пользователя {{name}}. Выберите копию игры:",
"join": "Войти",
"cancel": "Отмена",
"noInstances": "Нет установленных копий. Сначала установите версию игры.",
"launching": "Запуск игры...",
"connectingRelay": "Подключение через ретранслятор (Relay)..."
},
"importWorld": {
"title": "Импортировать мир",
"importingTitle": "Импорт мира",
"importInto": "Импортировать в:",
"importMsPrompt": "Импортировать существующий файл сохранения .ms:",
"selectMsFile": "Выбрать файл .ms",
"convertConsolePrompt": "Конвертировать сохранение с Xbox 360 или PS3:",
"xbox360": "Xbox 360 (.bin)",
"ps3Folder": "PS3 (Папка с сохранением)",
"javaConversionPrompt": "Конвертация мира Java Edition:",
"javaToLce": "Java → LCE",
"lceToJava": "LCE → Java",
"cancel": "Cancel",
"selectingSource": "Выбор источника...",
"selectingMsFile": "Выбор файла saveData.ms...",
"copyingLceSave": "Копирование сохранения LCE...",
"worldImported": "Мир успешно импортирован в «{{name}}»!",
"selectingXboxSave": "Выбор сохранения Xbox 360 (.bin)...",
"convertingXbox": "Конвертация сохранения Xbox 360...",
"xboxConverted": "Сохранение Xbox 360 сконвертировано в «{{name}}»!",
"selectingPs3Folder": "Выбор папки с сохранением PS3...",
"convertingPs3": "Конвертация сохранения PS3...",
"ps3Converted": "Сохранение PS3 сконвертировано в «{{name}}»!",
"selectingJavaFolder": "Выбор папки мира Java...",
"convertingJava": "Конвертация мира Java в формат LCE...",
"javaConverted": "Мир Java сконвертирован в «{{name}}»!",
"selectingOutputFolder": "Выбор папки для экспорта мира Java...",
"convertingLceToJava": "Конвертация сохранения LCE в мир Java...",
"javaExported": "Мир Java успешно экспортирован в «{{path}}»!"
},
"customTu": {
"importTitle": "Импортировать кастомное TU",
"editTitle": "Изменить кастомное TU",
"tuName": "Название TU",
"description": "Описание (Необязательно)",
"downloadUrl": "Ссылка на скачивание (.zip)",
"localPath": "Локальный путь",
"namePlaceholder": "например, Мой крутой мод",
"descPlaceholder": "Краткое описание...",
"urlPlaceholder": "необязательно, если указан локальный путь",
"nameRequired": "Необходимо указать название",
"urlOrPathRequired": "Необходимо указать ссылку или локальный путь",
"invalidUrl": "Неверная ссылка",
"defaultDesc": "Пользовательское импортированное TU",
"cancel": "Отмена",
"save": "Сохранить",
"import": "Импортировать"
},
"options": {
"title": "Параметры",
"general": "Общие",
"loading": "Загрузка параметров...",
"reset": "Сбросить",
"cancel": "Отмена",
"save": "Сохранить",
"ok": "OK",
"noSchema": "Эта копия игры не предоставляет схему параметров запуска.",
"invalidSchema": "Схема параметров запуска неверна или не поддерживается."
}
}
}
+5 -5
View File
@@ -344,7 +344,7 @@ export default function App() {
if (showSetup) {
return (
<div
className={`w-screen h-screen overflow-hidden select-none flex flex-col relative bg-black text-white font-['Mojangles'] outline-none focus:outline-none ${!config.animationsEnabled ? "no-animations" : ""}`}
className={`w-screen h-screen overflow-hidden select-none flex flex-col relative bg-black text-white font-[var(--font-base)] outline-none focus:outline-none ${!config.animationsEnabled ? "no-animations" : ""}`}
>
{showHeader && (
<AppHeader playPressSound={audio.playPressSound} uiFade={uiFade} />
@@ -376,7 +376,7 @@ export default function App() {
if (showIntro && !config.skipIntro) {
return (
<div
className={`w-screen h-screen overflow-hidden select-none flex flex-col relative bg-black text-white font-['Mojangles'] outline-none focus:outline-none ${!config.animationsEnabled ? "no-animations" : ""}`}
className={`w-screen h-screen overflow-hidden select-none flex flex-col relative bg-black text-white font-[var(--font-base)] outline-none focus:outline-none ${!config.animationsEnabled ? "no-animations" : ""}`}
>
<CinematicIntro
onComplete={() => {
@@ -391,7 +391,7 @@ export default function App() {
return (
<MotionConfig transition={config.animationsEnabled ? {} : { duration: 0 }}>
<div
className={`w-screen h-screen overflow-hidden select-none flex flex-col relative bg-black text-white font-['Mojangles'] outline-none focus:outline-none ${!config.animationsEnabled ? "no-animations" : ""}`}
className={`w-screen h-screen overflow-hidden select-none flex flex-col relative bg-black text-white font-[var(--font-base)] outline-none focus:outline-none ${!config.animationsEnabled ? "no-animations" : ""}`}
>
<div className="absolute inset-0">
<AnimatePresence>
@@ -638,7 +638,7 @@ export default function App() {
titleImage === "/images/MenuTitle.png" && (
<motion.div
{...uiFade}
className="absolute -bottom-6 text-[#A0A0A0] text-sm mc-text-shadow tracking-widest uppercase opacity-80 font-['Mojangles']"
className="absolute -bottom-6 text-[#A0A0A0] text-sm mc-text-shadow tracking-widest uppercase opacity-80 font-[var(--font-base)]"
>
{selectedVersionName}
</motion.div>
@@ -747,7 +747,7 @@ export default function App() {
<motion.footer
{...uiFade}
className="shrink-0 p-4 flex justify-between items-end text-[10px] text-[#A0A0A0] mc-text-shadow bg-gradient-to-t from-black/80 to-transparent uppercase tracking-widest opacity-60 font-['Mojangles']"
className="shrink-0 p-4 flex justify-between items-end text-[10px] text-[#A0A0A0] mc-text-shadow bg-gradient-to-t from-black/80 to-transparent uppercase tracking-widest opacity-60 font-[var(--font-base)]"
style={{ fontWeight: "normal" }}
>
<div className="flex-1 text-left whitespace-nowrap">