mirror of
https://github.com/LCE-Hub/LCE-Emerald-Launcher.git
synced 2026-09-24 17:11:00 +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
|
- **The LCE Community** - Research and foundations for LCE on PC
|
||||||
- **Str1k3r** - Original creator of LCEOnline
|
- **Str1k3r** - Original creator of LCEOnline
|
||||||
- **DTention** - Original creator of [LCE-Save-Converter](https://github.com/dtentiion/LCE-Save-Converter)
|
- **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();
|
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>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ export default function CustomTUModal({
|
|||||||
onChange={(e) => setName(e.target.value)}
|
onChange={(e) => setName(e.target.value)}
|
||||||
onFocus={() => setFocusIndex(0)}
|
onFocus={() => setFocusIndex(0)}
|
||||||
placeholder={t("modals.customTu.namePlaceholder")}
|
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" }}
|
style={{ imageRendering: "pixelated" }}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -165,7 +165,7 @@ export default function CustomTUModal({
|
|||||||
onChange={(e) => setDesc(e.target.value)}
|
onChange={(e) => setDesc(e.target.value)}
|
||||||
onFocus={() => setFocusIndex(1)}
|
onFocus={() => setFocusIndex(1)}
|
||||||
placeholder={t("modals.customTu.descPlaceholder")}
|
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" }}
|
style={{ imageRendering: "pixelated" }}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -180,7 +180,7 @@ export default function CustomTUModal({
|
|||||||
onChange={(e) => setUrl(e.target.value)}
|
onChange={(e) => setUrl(e.target.value)}
|
||||||
onFocus={() => setFocusIndex(2)}
|
onFocus={() => setFocusIndex(2)}
|
||||||
placeholder={t("modals.customTu.urlPlaceholder")}
|
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" }}
|
style={{ imageRendering: "pixelated" }}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -194,7 +194,7 @@ export default function CustomTUModal({
|
|||||||
type="text"
|
type="text"
|
||||||
readOnly
|
readOnly
|
||||||
value={path}
|
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" }}
|
style={{ imageRendering: "pixelated" }}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ export default function GameLogModal({
|
|||||||
exit={{ y: 20, opacity: 0 }}
|
exit={{ y: 20, opacity: 0 }}
|
||||||
transition={{ duration: 0.15 }}
|
transition={{ duration: 0.15 }}
|
||||||
onClick={(e) => e.stopPropagation()}
|
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">
|
<h3 className="text-2xl font-bold text-[#333333] mb-3 text-left w-full px-2 mc-text-shadow">
|
||||||
{t("modals.gameLog.title")}
|
{t("modals.gameLog.title")}
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ export default function OptionsModal({
|
|||||||
}));
|
}));
|
||||||
}}
|
}}
|
||||||
onFocus={() => setFocusIndex(index)}
|
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" : ""
|
disabled ? "opacity-40 cursor-not-allowed" : ""
|
||||||
}`}
|
}`}
|
||||||
style={{ imageRendering: "pixelated" }}
|
style={{ imageRendering: "pixelated" }}
|
||||||
@@ -293,7 +293,7 @@ export default function OptionsModal({
|
|||||||
setValues((prev) => ({ ...prev, [option.id]: e.target.value }));
|
setValues((prev) => ({ ...prev, [option.id]: e.target.value }));
|
||||||
}}
|
}}
|
||||||
onFocus={() => setFocusIndex(index)}
|
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" : ""
|
disabled ? "opacity-40 cursor-not-allowed" : ""
|
||||||
}`}
|
}`}
|
||||||
style={{ imageRendering: "pixelated" }}
|
style={{ imageRendering: "pixelated" }}
|
||||||
@@ -311,7 +311,7 @@ export default function OptionsModal({
|
|||||||
setValues((prev) => ({ ...prev, [option.id]: e.target.value }));
|
setValues((prev) => ({ ...prev, [option.id]: e.target.value }));
|
||||||
}}
|
}}
|
||||||
onFocus={() => setFocusIndex(index)}
|
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" : ""
|
disabled ? "opacity-40 cursor-not-allowed" : ""
|
||||||
}`}
|
}`}
|
||||||
style={{ imageRendering: "pixelated" }}
|
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">
|
<h2 className="text-xl text-black mc-text-shadow mb-1 text-center">
|
||||||
{t("modals.options.title")}
|
{t("modals.options.title")}
|
||||||
</h2>
|
</h2>
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ export default function SetUidModal({
|
|||||||
onChange={(e) => setUid(e.target.value)}
|
onChange={(e) => setUid(e.target.value)}
|
||||||
onFocus={() => setFocusIndex(2)}
|
onFocus={() => setFocusIndex(2)}
|
||||||
placeholder="0xFF02F0C87E8AC1F2"
|
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' }}
|
style={{ imageRendering: "pixelated", filter: focusIndex === 2 ? 'brightness(1.2)' : 'none' }}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -203,7 +203,7 @@ export default function SetUidModal({
|
|||||||
onClick={() => { playPressSound(); setIsDropdownOpen(!isDropdownOpen); }}
|
onClick={() => { playPressSound(); setIsDropdownOpen(!isDropdownOpen); }}
|
||||||
onFocus={() => { setFocusIndex(2); setIsDropdownOpen(false); }}
|
onFocus={() => { setFocusIndex(2); setIsDropdownOpen(false); }}
|
||||||
tabIndex={0}
|
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' }}
|
style={{ imageRendering: "pixelated", filter: focusIndex === 2 ? 'brightness(1.2)' : 'none' }}
|
||||||
>
|
>
|
||||||
<span className="truncate">
|
<span className="truncate">
|
||||||
@@ -227,7 +227,7 @@ export default function SetUidModal({
|
|||||||
setSelectedInstance(i.instanceId);
|
setSelectedInstance(i.instanceId);
|
||||||
setIsDropdownOpen(false);
|
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})` : ""}
|
{i.name} {i.selectedBranch ? `(${i.selectedBranch})` : ""}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -256,6 +256,19 @@ const CreditsView = memo(function CreditsView() {
|
|||||||
category: "SPECIAL THANKS",
|
category: "SPECIAL THANKS",
|
||||||
icon: "",
|
icon: "",
|
||||||
subcategories: [
|
subcategories: [
|
||||||
|
{
|
||||||
|
name: "Emerald Translations",
|
||||||
|
icon: "",
|
||||||
|
roles: [
|
||||||
|
{
|
||||||
|
role: "",
|
||||||
|
members: [
|
||||||
|
{ name: "dydymiku (French)", url: "#" },
|
||||||
|
{ name: "DimsMaybe/Hvrket (Russian)", url: "#" },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
...(isAndroid
|
...(isAndroid
|
||||||
? [
|
? [
|
||||||
{
|
{
|
||||||
@@ -341,7 +354,8 @@ const CreditsView = memo(function CreditsView() {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{t("credits.backToMenu")}
|
{t("credits.backToMenu")}
|
||||||
</button> )}
|
</button>
|
||||||
|
)}
|
||||||
|
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ y: "50%" }}
|
initial={{ y: "50%" }}
|
||||||
|
|||||||
@@ -443,7 +443,7 @@ const GoldMapperView = memo(function GoldMapperView() {
|
|||||||
if (e.target === e.currentTarget) closeModal();
|
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">
|
<h2 className="text-xl text-black mc-text-shadow mb-4 text-center">
|
||||||
{t("goldMapper.assign", { name: displayName(editing) })}
|
{t("goldMapper.assign", { name: displayName(editing) })}
|
||||||
</h2>
|
</h2>
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ const ScreenshotsView = memo(function ScreenshotsView() {
|
|||||||
animate={{ opacity: 1, scale: 1 }}
|
animate={{ opacity: 1, scale: 1 }}
|
||||||
exit={{ opacity: 0, scale: 0.95 }}
|
exit={{ opacity: 0, scale: 0.95 }}
|
||||||
transition={{ duration: animationsEnabled ? 0.3 : 0 }}
|
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">
|
<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")}
|
{t("screenshots.title")}
|
||||||
|
|||||||
@@ -590,6 +590,7 @@ const SettingsView = memo(function SettingsView() {
|
|||||||
//neo: here goes the list, dont ask why its here
|
//neo: here goes the list, dont ask why its here
|
||||||
{ code: "en", label: "English" },
|
{ code: "en", label: "English" },
|
||||||
{ code: "fr", label: "Français (French)" }, // by Dydymiku (thanks!!)
|
{ code: "fr", label: "Français (French)" }, // by Dydymiku (thanks!!)
|
||||||
|
{ code: "ru", label: "Pусский (Russian)" }, // by brnwvshed (thanks!!)
|
||||||
];
|
];
|
||||||
for (const lang of availableLanguages) {
|
for (const lang of availableLanguages) {
|
||||||
const isCurrent = i18n.resolvedLanguage?.startsWith(lang.code);
|
const isCurrent = i18n.resolvedLanguage?.startsWith(lang.code);
|
||||||
@@ -1122,7 +1123,7 @@ const SettingsView = memo(function SettingsView() {
|
|||||||
value={argsInput}
|
value={argsInput}
|
||||||
onChange={(e) => setArgsInput(e.target.value)}
|
onChange={(e) => setArgsInput(e.target.value)}
|
||||||
placeholder="e.g. -quitondisconnect -ip 127.0.0.1"
|
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" }}
|
style={{ imageRendering: "pixelated" }}
|
||||||
/>
|
/>
|
||||||
<div className="flex gap-4 mt-6 w-full justify-center">
|
<div className="flex gap-4 mt-6 w-full justify-center">
|
||||||
@@ -1202,7 +1203,7 @@ const SettingsView = memo(function SettingsView() {
|
|||||||
value={prefixInput}
|
value={prefixInput}
|
||||||
onChange={(e) => setPrefixInput(e.target.value)}
|
onChange={(e) => setPrefixInput(e.target.value)}
|
||||||
placeholder="e.g. gamemoderun"
|
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" }}
|
style={{ imageRendering: "pixelated" }}
|
||||||
/>
|
/>
|
||||||
<div className="flex gap-4 mt-6 w-full justify-center">
|
<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)}
|
onChange={(e) => setEnvVarsInput(e.target.value)}
|
||||||
placeholder="WINEDLLOVERRIDES=foo=n MANGOHUD=1"
|
placeholder="WINEDLLOVERRIDES=foo=n MANGOHUD=1"
|
||||||
rows={6}
|
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" }}
|
style={{ imageRendering: "pixelated" }}
|
||||||
/>
|
/>
|
||||||
<div className="flex gap-4 mt-6 w-full justify-center">
|
<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 }}
|
animate={{ opacity: 1, scale: 1 }}
|
||||||
exit={{ opacity: 0, scale: 0.95 }}
|
exit={{ opacity: 0, scale: 0.95 }}
|
||||||
transition={{ duration: config.animationsEnabled ? 0.3 : 0 }}
|
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 className="flex items-center justify-center gap-0 mb-4 w-full px-4">
|
||||||
<div
|
<div
|
||||||
@@ -873,7 +873,7 @@ const WorkshopView = memo(function WorkshopView({
|
|||||||
}
|
}
|
||||||
spellCheck={false}
|
spellCheck={false}
|
||||||
autoFocus={isSearchTab}
|
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 && (
|
{search && (
|
||||||
<button
|
<button
|
||||||
@@ -1499,7 +1499,7 @@ function PackageModal({
|
|||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
onClick={(e) => e.stopPropagation()}
|
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 ? (
|
{isPluginTab ? (
|
||||||
<div className="w-full h-[100px] flex-shrink-0 bg-black/60 flex items-center px-6 border-b border-[#444]">
|
<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 }}
|
exit={{ y: 20, opacity: 0 }}
|
||||||
transition={{ duration: 0.15 }}
|
transition={{ duration: 0.15 }}
|
||||||
onClick={(e) => e.stopPropagation()}
|
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={{
|
style={{
|
||||||
backgroundImage: "url('/images/frame_background.png')",
|
backgroundImage: "url('/images/frame_background.png')",
|
||||||
backgroundSize: "100% 100%",
|
backgroundSize: "100% 100%",
|
||||||
@@ -2265,7 +2265,7 @@ function InstallModal({
|
|||||||
exit={{ y: 20, opacity: 0 }}
|
exit={{ y: 20, opacity: 0 }}
|
||||||
transition={{ duration: 0.15 }}
|
transition={{ duration: 0.15 }}
|
||||||
onClick={(e) => e.stopPropagation()}
|
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={{
|
style={{
|
||||||
backgroundImage: "url('/images/frame_background.png')",
|
backgroundImage: "url('/images/frame_background.png')",
|
||||||
backgroundSize: "100% 100%",
|
backgroundSize: "100% 100%",
|
||||||
@@ -2543,7 +2543,7 @@ function UninstallModal({
|
|||||||
exit={{ y: 20, opacity: 0 }}
|
exit={{ y: 20, opacity: 0 }}
|
||||||
transition={{ duration: 0.15 }}
|
transition={{ duration: 0.15 }}
|
||||||
onClick={(e) => e.stopPropagation()}
|
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={{
|
style={{
|
||||||
backgroundImage: "url('/images/frame_background.png')",
|
backgroundImage: "url('/images/frame_background.png')",
|
||||||
backgroundSize: "100% 100%",
|
backgroundSize: "100% 100%",
|
||||||
|
|||||||
+4
-1
@@ -1,6 +1,9 @@
|
|||||||
@import "tailwindcss";
|
@import "tailwindcss";
|
||||||
|
|
||||||
@layer base {
|
@layer base {
|
||||||
|
:root {
|
||||||
|
--font-base: "Mojangles", monospace;
|
||||||
|
}
|
||||||
*,
|
*,
|
||||||
::before,
|
::before,
|
||||||
::after {
|
::after {
|
||||||
@@ -153,7 +156,7 @@
|
|||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
font-family: "Mojangles", monospace;
|
font-family: var(--font-base, "Mojangles", monospace);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mc-button {
|
.mc-button {
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ import { initReactI18next } from "react-i18next";
|
|||||||
import LanguageDetector from "i18next-browser-languagedetector";
|
import LanguageDetector from "i18next-browser-languagedetector";
|
||||||
import en from "./locales/en.json";
|
import en from "./locales/en.json";
|
||||||
import fr from "./locales/fr.json";
|
import fr from "./locales/fr.json";
|
||||||
|
import ru from "./locales/ru.json";
|
||||||
|
import { applyLangFont } from "./langFonts";
|
||||||
i18n
|
i18n
|
||||||
.use(LanguageDetector)
|
.use(LanguageDetector)
|
||||||
.use(initReactI18next)
|
.use(initReactI18next)
|
||||||
@@ -10,6 +12,7 @@ i18n
|
|||||||
resources: {
|
resources: {
|
||||||
en: { translation: en },
|
en: { translation: en },
|
||||||
fr: { translation: fr },
|
fr: { translation: fr },
|
||||||
|
ru: { translation: ru },
|
||||||
},
|
},
|
||||||
fallbackLng: "en",
|
fallbackLng: "en",
|
||||||
interpolation: {
|
interpolation: {
|
||||||
@@ -21,4 +24,6 @@ i18n
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
applyLangFont(i18n.resolvedLanguage ?? i18n.language);
|
||||||
|
|
||||||
export default i18n;
|
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) {
|
if (showSetup) {
|
||||||
return (
|
return (
|
||||||
<div
|
<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 && (
|
{showHeader && (
|
||||||
<AppHeader playPressSound={audio.playPressSound} uiFade={uiFade} />
|
<AppHeader playPressSound={audio.playPressSound} uiFade={uiFade} />
|
||||||
@@ -376,7 +376,7 @@ export default function App() {
|
|||||||
if (showIntro && !config.skipIntro) {
|
if (showIntro && !config.skipIntro) {
|
||||||
return (
|
return (
|
||||||
<div
|
<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
|
<CinematicIntro
|
||||||
onComplete={() => {
|
onComplete={() => {
|
||||||
@@ -391,7 +391,7 @@ export default function App() {
|
|||||||
return (
|
return (
|
||||||
<MotionConfig transition={config.animationsEnabled ? {} : { duration: 0 }}>
|
<MotionConfig transition={config.animationsEnabled ? {} : { duration: 0 }}>
|
||||||
<div
|
<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">
|
<div className="absolute inset-0">
|
||||||
<AnimatePresence>
|
<AnimatePresence>
|
||||||
@@ -638,7 +638,7 @@ export default function App() {
|
|||||||
titleImage === "/images/MenuTitle.png" && (
|
titleImage === "/images/MenuTitle.png" && (
|
||||||
<motion.div
|
<motion.div
|
||||||
{...uiFade}
|
{...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}
|
{selectedVersionName}
|
||||||
</motion.div>
|
</motion.div>
|
||||||
@@ -747,7 +747,7 @@ export default function App() {
|
|||||||
|
|
||||||
<motion.footer
|
<motion.footer
|
||||||
{...uiFade}
|
{...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" }}
|
style={{ fontWeight: "normal" }}
|
||||||
>
|
>
|
||||||
<div className="flex-1 text-left whitespace-nowrap">
|
<div className="flex-1 text-left whitespace-nowrap">
|
||||||
|
|||||||
Reference in New Issue
Block a user