mirror of
https://github.com/LCE-Hub/LCE-Emerald-Launcher.git
synced 2026-09-24 09:03:44 +00:00
feat: russian translation!
This commit is contained in:
@@ -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
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Copyright © 2004-2012, BOGDAN Software
|
||||
Executable
BIN
Binary file not shown.
@@ -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>
|
||||
)}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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")}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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%" }}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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")}
|
||||
|
||||
@@ -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 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">
|
||||
|
||||
@@ -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
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 };
|
||||
@@ -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
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user