Compare commits

...

11 Commits

Author SHA1 Message Date
MagicSweet b642d03d58
Merge 85199beb25 into 847106f1fb 2024-01-11 09:01:30 -07:00
Henry 847106f1fb
Linux XDG folder support (#518) 2024-01-02 23:23:57 +00:00
Henry 93f60488fa
Prevent Forge's Log4j configuration from being overridden (#513) 2024-01-02 21:03:06 +00:00
Henry Le Grys b5fe175650 Add support for NeoForge 2024-01-02 20:58:51 +00:00
Henry Le Grys 11808457fe Fix launcher trying to download processor outputs
Fix for forge 1.20.4; the generated client jar is specified as a library
because it goes on the classpath now.
2024-01-02 20:22:23 +00:00
Ch. König 5712eb1dfb
rewritten xdg folder fetcher.
tries old dotfolder first
2023-09-20 10:12:17 +02:00
Ch. König 9428dbbe7b
Linux XDG folder support 2023-09-13 19:50:49 +02:00
DaPorkchop_ 5668e567a1
move vanilla jar to the end of the classpath
this emulates the behavior of the vanilla launcher. it's important because if the vanilla jar is first, Log4j will always auto-detect the vanilla log4j.xml instead of Forge's.
2023-08-04 18:14:14 +02:00
DaPorkchop_ 31a13115fb
copy logging config from loader version manifest 2023-08-04 18:14:09 +02:00
MagicSweet 85199beb25
Fixed missing translation 2021-12-31 13:20:50 +03:00
MagicSweet 1659f2aaf0 Added russian localization 2021-12-31 13:15:53 +03:00
11 changed files with 301 additions and 9 deletions

View File

@ -194,9 +194,21 @@ public class Bootstrap {
String osName = System.getProperty("os.name").toLowerCase();
if (osName.contains("win")) {
return new File(getFileChooseDefaultDir(), getProperties().getProperty("homeFolderWindows"));
} else {
return new File(System.getProperty("user.home"), getProperties().getProperty("homeFolder"));
}
File dotFolder = new File(System.getProperty("user.home"), getProperties().getProperty("homeFolder"));
String xdgFolderName = getProperties().getProperty("homeFolderLinux");
if (osName.contains("linux") && !dotFolder.exists() && !xdgFolderName.isEmpty()) {
String xdgDataHome = System.getenv("XDG_DATA_HOME");
if (xdgDataHome.isEmpty()) {
xdgDataHome = System.getProperty("user.home") + "/.local/share";
}
return new File(xdgDataHome, xdgFolderName);
}
return dotFolder;
}
private static boolean isPortableMode() {

View File

@ -5,6 +5,7 @@
#
homeFolderWindows=Example Launcher
homeFolderLinux=example_launcher
homeFolder=.examplelauncher
launcherClass=com.skcraft.launcher.Launcher
latestUrl=http://update.skcraft.com/quark/launcher/latest.json
latestUrl=http://update.skcraft.com/quark/launcher/latest.json

View File

@ -0,0 +1,23 @@
#
# SK's Minecraft Launcher
# Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors
# Please see LICENSE.txt for license information.
#
# Translated by https://github.com/MagicSweet-dev
#
button.cancal=\u041e\u0442\u043c\u0435\u043d\u0430
errorTitle=\u041e\u0448\u0438\u0431\u043a\u0430
errors.failedDownloadError=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043a\u0430\u0447\u0430\u0442\u044c SKCraft launcher
errors.bootstrapError=\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430\!
errorDialog.reportError=\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435, \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435\:
downloader.title=\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u044e SKCraft Launcher...
downloader.pleaseWait=\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435...
downloader.status=\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 SKCraft Launcher...
downloader.progressStatus=\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 SKCraft Launcher (%.2f%%)...
progress.confirmCancel=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441?
progress.confirmCancelTitle=\u041e\u0442\u043c\u0435\u043d\u0430

View File

@ -164,7 +164,7 @@ public class PackageBuilder {
if (basicProfile.isLegacy()) {
processor = new OldForgeLoaderProcessor();
} else if (basicProfile.getProfile().equalsIgnoreCase("forge")) {
} else {
processor = new ModernForgeLoaderProcessor();
}
} else if (BuilderUtils.getZipEntry(jarFile, "fabric-installer.json") != null) {

View File

@ -73,6 +73,12 @@ public class ModernForgeLoaderProcessor implements ILoaderProcessor {
}
}
// Copy logging config
SidedData<VersionManifest.LoggingConfig> loggingConfig = info.getLogging();
if (loggingConfig != null) {
version.setLogging(loggingConfig);
}
// Copy main class
String mainClass = info.getMainClass();
if (mainClass != null) {
@ -150,6 +156,22 @@ public class ModernForgeLoaderProcessor implements ILoaderProcessor {
// Add loader manifest to the map
manifest.getLoaders().put(loaderName, new LoaderManifest(profile.getLibraries(), profile.getData(), extraFiles));
// Find name of final patched library and mark it as excluded from download
// TODO: we should generalize this to all process outputs, really
SidedData<String> finalJars = profile.getData().get("PATCHED");
if (finalJars != null) {
String libraryName = finalJars.getClient();
libraryName = libraryName.substring(1, libraryName.length() - 1);
for (Library lib : result.getLoaderLibraries()) {
if (lib.matches(libraryName)) {
lib.setGenerated(true);
log.info(String.format("Setting generated flag on library '%s'", lib.getName()));
break;
}
}
}
// Add processors
manifest.getTasks().addAll(profile.toProcessorEntries(loaderName));
}

View File

@ -140,7 +140,6 @@ public class Runner implements Callable<Process>, ProgressObservable {
}
progress = new DefaultProgress(0.9, SharedLocale.tr("runner.collectingArgs"));
builder.classPath(getJarPath());
builder.setMainClass(versionManifest.getMainClass());
addWindowArgs();
@ -232,6 +231,9 @@ public class Runner implements Callable<Process>, ProgressObservable {
tr("runner.missingLibrary", instance.getTitle(), library.getName()));
}
}
// The official launcher puts the vanilla jar at the end of the classpath, we'll do the same
builder.classPath(getJarPath());
}
/**
@ -307,7 +309,7 @@ public class Runner implements Callable<Process>, ProgressObservable {
}
}
if (versionManifest.getLogging() != null) {
if (versionManifest.getLogging() != null && versionManifest.getLogging().getClient() != null) {
log.info("Logging config present, log4j2 bug likely mitigated");
VersionManifest.LoggingConfig config = versionManifest.getLogging().getClient();

View File

@ -19,7 +19,7 @@ public class LoaderManifest {
public Library findLibrary(String name) {
for (Library library : getLibraries()) {
if (library.getName().equals(name)) {
if (library.matches(name)) {
return library;
}
}

View File

@ -12,6 +12,7 @@ import com.google.common.base.Splitter;
import com.skcraft.launcher.model.minecraft.GameArgument;
import com.skcraft.launcher.model.minecraft.Library;
import com.skcraft.launcher.model.minecraft.MinecraftArguments;
import com.skcraft.launcher.model.minecraft.VersionManifest;
import lombok.Data;
import java.util.List;
@ -23,6 +24,7 @@ public class VersionInfo {
private MinecraftArguments arguments;
private String mainClass;
private List<Library> libraries;
private SidedData<VersionManifest.LoggingConfig> logging;
@JsonIgnore private transient boolean overridingArguments;

View File

@ -8,6 +8,7 @@ package com.skcraft.launcher.model.minecraft;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
@ -33,7 +34,8 @@ public class Library {
private String comment;
// Custom
private boolean locallyAvailable;
@JsonInclude(value = JsonInclude.Include.NON_DEFAULT)
private boolean generated;
public boolean matches(Environment environment) {
boolean allow = false;
@ -201,6 +203,12 @@ public class Library {
}
public void setName(String name) {
int classifierPos = name.indexOf("@");
if (classifierPos != -1) {
// Take off classifiers
name = name.substring(0, classifierPos);
}
this.name = name;
// [DEEP SIGH]
@ -226,6 +234,20 @@ public class Library {
}
}
/**
* Classifier-independent library name check
* @param mavenName Maven name of a library, possibly with a classifier
* @return True if this library is named 'mavenName'.
*/
public boolean matches(String mavenName) {
int classifierPos = mavenName.indexOf('@');
if (classifierPos != -1) {
mavenName = mavenName.substring(0, classifierPos);
}
return this.name.equals(mavenName);
}
public static String mavenNameToPath(String mavenName) {
List<String> split = Splitter.on(':').splitToList(mavenName);
int size = split.size();

View File

@ -249,6 +249,8 @@ public abstract class BaseUpdater {
}
for (Library library : allLibraries) {
if (library.isGenerated()) continue; // Skip generated libraries.
if (library.matches(environment)) {
checkInterrupted();
@ -282,7 +284,7 @@ public abstract class BaseUpdater {
}
// Use our custom logging config depending on what the manifest specifies
if (versionManifest.getLogging() != null) {
if (versionManifest.getLogging() != null && versionManifest.getLogging().getClient() != null) {
VersionManifest.LoggingConfig config = versionManifest.getLogging().getClient();
VersionManifest.Artifact file = config.getFile();

View File

@ -0,0 +1,206 @@
#
# SK's Minecraft Launcher
# Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors
# Please see LICENSE.txt for license information.
#
# Translated by https://github.com/MagicSweet-dev
#
button.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
instance.openSettings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438...
instance.options.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438
instance.options.customJava=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e Java
instance.options.customMemory=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438
context.cut=\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c
context.copy=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c
context.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c
context.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
context.selectAll=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435
errors.openUrlError=\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\: {0}
errors.openDirError=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044c ''{0}''. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0430\u043a\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442?
errors.reportErrorPreface=\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435, \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435\:\n\n
errors.genericError=\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430.
errors.updateRequiredError=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u043b\u0430\u0443\u043d\u0447\u0435\u0440! \u041f\u043e\u0441\u0435\u0442\u0438\u0442\u0435 https://skcraft.com/download/2/.
errors.selfUpdateCheckError=\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430.
button.cancel=\u041e\u0442\u043c\u0435\u043d\u0430
button.ok=OK
options.title = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
options.useProxyCheck = \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f Minecraft
options.jvmPath=\u041f\u0443\u0442\u044c \u043a JVM\:
options.jvmArguments=\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 JVM\:
options.64BitJavaWarning=<html>\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 <strong>64-\u0431\u0438\u0442\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f Java</strong>, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438.
options.minMemory=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442 \u043f\u0430\u043c\u044f\u0442\u0438 (\u041c\u0411)\:
options.maxMemory=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442 \u043f\u0430\u043c\u044f\u0442\u0438 (\u041c\u0411)\:
options.permGen=PermGen (\u041c\u0411)\:
options.javaTab=Java
options.windowWidth=\u0428\u0438\u0440\u0438\u043d\u0430 \u043e\u043a\u043d\u0430\:
options.windowHeight=\u0412\u044b\u0441\u043e\u0442\u0430 \u043e\u043a\u043d\u0430\:
options.minecraftTab=Minecraft
options.proxyHost=\u0410\u0434\u0440\u0435\u0441\:
options.proxyPort=\u041f\u043e\u0440\u0442\:
options.proxyUsername=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\:
options.proxyPassword=\u041f\u0430\u0440\u043e\u043b\u044c\:
options.proxyTab=\u041f\u0440\u043e\u043a\u0441\u0438
options.gameKey=\u0418\u0433\u0440\u043e\u0432\u043e\u0439 \u0442\u043e\u043a\u0435\u043d\:
options.advancedTab=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435
options.about=\u041e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435
options.launcherConsole=\u041a\u043e\u043d\u0441\u043e\u043b\u044c
instance.launch=\u0417\u0430\u043f\u0443\u0441\u043a
instance.install=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430
instance.openFolder=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043f\u0430\u043f\u043a\u0443
instance.openSaves=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u043c \u043c\u0438\u0440\u0430\u043c
instance.openResourcePacks=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u043f\u0430\u043a\u0430\u043c
instance.openScreenshots=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430\u043c
instance.copyAsPath=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0443\u0442\u044c
instance.forceUpdate=\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435
instance.hardForceUpdate=\u0416\u0451\u0441\u0442\u043a\u043e\u0435 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435...
instance.deleteFiles=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432...
instance.confirmDelete=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0412\u0421\u0415\u0425 \u0424\u0410\u0419\u041b\u041e\u0412 (\u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u043e\u0432, \u043c\u0438\u0440\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a) ''{0}''?
instance.deletingTitle=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f...
instance.deletingStatus=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 ''{0}'' \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438...
instance.confirmHardUpdate=\u0416\u0451\u0441\u0442\u043a\u043e\u0435 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0434\u0430\u043b\u0438\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043e\u043a config/ \u0438 mods/, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c?
instance.resettingTitle=\u0421\u0431\u0440\u043e\u0441 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f...
instance.resettingStatus=\u0421\u0431\u0440\u043e\u0441 ''{0}''...
launcher.launch=\u0417\u0430\u043f\u0443\u0441\u043a...
launcher.checkForUpdates=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439
launcher.options=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438...
launcher.updateLauncher=\u041e\u0431\u043d\u0432\u0438\u0442\u044c \u043b\u0430\u0443\u043d\u0447\u0435\u0440...
launcher.downloadUpdates=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u043f\u0430\u043a\u043e\u0432
launcher.title=SKCraft Launcher (v{0})
launcher.appTitle=SKCraft Launcher
launcher.refreshList=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a
launcher.checkingTitle=\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043c\u043e\u0434\u043f\u0430\u043a\u043e\u0432...
launcher.checkingStatus=\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043c\u043e\u0434\u043f\u0430\u043a\u043e\u0432... \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435.
launcher.selfUpdatingTitle=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430...
launcher.selfUpdatingStatus=\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f...
launcher.selfUpdateComplete=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043b\u0430\u0443\u043d\u0447\u0435\u0440 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439
launcher.selfUpdateCompleteTitle=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e
launcher.updatingTitle=\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u0441\u044f...
launcher.updatingStatus=\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 ''{0}''... \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435.
launcher.noInstanceError=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435, \u043a\u0430\u043a\u043e\u0439 \u043c\u043e\u0434\u043f\u0430\u043a \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c
launcher.noInstanceTitle=\u041d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d \u043c\u043e\u0434\u043f\u0430\u043a
launcher.launchingTItle=\u0417\u0430\u043f\u0443\u0441\u043a \u0438\u0433\u0440\u044b...
launcher.launchingStatus=\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u043a ''{0}''. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435.
launcher.modpackColumn=\u041c\u043e\u0434\u043f\u0430\u043a
launcher.notInstalledHint=(\u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b.)
launcher.requiresUpdateHint=(\u0442\u0440\u0435\u0431. \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435)
launcher.updatePendingHint=(\u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435)
accounts.title=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0434\u043b\u044f \u0438\u0433\u0440\u044b
accounts.play=\u0418\u0433\u0440\u0430\u0442\u044c!
accounts.refreshingStatus=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438...
accounts.addMojang=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 Mojang
accounts.addMicrosoft=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 Microsoft
accounts.removeSelected=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0430\u043a\u043a\u0430\u0443\u043d\u0442
accounts.confirmForgetTitle=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430
accounts.confirmForget=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u043a\u043a\u0430\u0443\u043d\u0442?
login.login=\u0412\u0445\u043e\u0434...
login.recoverAccount=\u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c?
login.playOffline=\u041e\u0444\u0444\u043b\u0430\u0439\u043d-\u0430\u043a\u043a\u0430\u0443\u043d\u0442
login.title=\u0412\u0445\u043e\u0434 \u0432 Minecraft
login.defaultMessage=\u0412\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 Mojang
login.idEmail=ID/Email\:
login.password=\u041f\u0430\u0440\u043e\u043b\u044c\:
login.noPasswordError=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c.
login.noPasswordTitle=\u041d\u0435 \u0432\u0432\u0435\u0434\u0451\u043d \u043f\u0430\u0440\u043e\u043b\u044c
login.loggingInTitle=\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u0445\u043e\u0434...
login.loggingInStatus=\u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0432\u043e\u0439\u0442\u0438 \u0432 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 Minecraft...
login.noLoginError=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 ID \u0438\u043b\u0438 Email.
login.noLoginTitle=\u041d\u0435 \u0432\u0432\u0435\u0434\u0451\u043d ID/Email
login.minecraftNotOwnedError=\u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0435 \u043d\u0435 \u043a\u0443\u043f\u043b\u0435\u043d Minecraft.
login.microsoft.seeBrowser=\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435 \u0432\u0445\u043e\u0434 \u0432 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0442\u0430\u043c.
login.xbox.generic=\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u0432\u044f\u0437\u0438 \u0441 Xbox Live.
login.xbox.noXboxAccount=\u041a \u044d\u0442\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u044b Xbox!
login.xbox.isChild=\u0410\u043a\u043a\u0430\u0443\u043d\u0442\u044b, \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u043d\u044c\u0448\u0435 18 \u043b\u0435\u0442 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043d\u044f\u0442\u044b, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0441\u0435\u043c\u044c\u0438
login.xbox.unknown=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0445\u043e\u0434\u0430 \u0441 Xbox \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 (XErr {0})
login.xbox.errorMessage=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0445\u043e\u0434\u0430 \u0441 Xbox \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: {0}
login.minecraft.error=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438 Minecraft \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430: {0}
console.title=\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043e\u0448\u0431\u0438\u043a\u0438
console.launcherConsoleTitle=\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430
console.uploadLog=\u0412\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043b\u043e\u0433
console.pasteUploading=\u0412\u044b\u0433\u0440\u0443\u0437\u043a\u0430 {0} \u0431\u0430\u0439\u0442...\n
console.pasteUploaded=\u0412\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u0432 \u0431\u0443\u0444\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0430\: {0}\n
console.pasteFailed=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438\: {0}\n
console.processEndCode=\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. \u041a\u043e\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f\: {0}
console.attachedToProcess=\u0418\u0433\u0440\u0430 \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435.
console.forceClose=\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435
console.trayTooltip=SKCraft Launcher
console.trayTitle=SKCraft Launcher
console.tray.showWindow=\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u043a\u043d\u043e
console.tray.forceClose=\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435...
console.closeWindow=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u043e\u043a\u043d\u043e
console.hideWindow=\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u043a\u043d\u043e
console.confirmKill=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b? \u0412\u0441\u0435 \u043d\u0435\u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044f\u043d\u044b.
console.confirmKillTitle=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b?
console.clearLog=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c
downloader.downloadingItem=\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 {0}...
downloader.downloadingList=\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 {0} \u0444\u0430\u0439\u043b\u043e\u0432... (\u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c {1}, \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c {2})
downloader.jobProgress={1,number}%\t{0}
downloader.jobPending=...\t{0}
downloader.noDownloads=\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u043f\u0443\u0441\u0442.
downloader.failedCount=({0} \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c)
progress.details=\u0414\u0435\u0442\u0430\u043b\u0438...
progress.less=\u041c\u0435\u043d\u044c\u0448\u0435...
progress.viewLog=\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u043e\u0433
progress.confirmCancel=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441?
progress.confirmCancelTitle=\u041e\u0442\u043c\u0435\u043d\u0430
progress.defaultStatus=\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435...
progress.percentTitle=({0}%) {1}
installer.installing=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430...
installer.executing=\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435... (\u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c {0})
installer.copyingFile=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\: {0} \u0432 {1}
installer.movingFile=\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435\: {0} \u0432 {1}
installer.runningProcessor=\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 {0}: {1}
updater.updating=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430...
updater.updateRequiredButOffline=\u0414\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043e\u0439\u0442\u0438 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d-\u0430\u043a\u043a\u0430\u0443\u043d\u0442.
updater.updateRequiredButNoManifest=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u044b \u043d\u0435 \u0431\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.
instanceUpdater.preparingUpdate=\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e...
instanceUpdater.readingManifest=\u0427\u0442\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432...
instanceUpdater.readingVersion=\u0427\u0442\u0435\u043d\u0438\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u0432\u0435\u0440\u0441\u0438\u0438...
instanceUpdater.buildingDownloadList=\u0421\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043a \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044e...
instanceUpdater.collectingLibraries=\u0421\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043a \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044e...
instanceUpdater.collectingAssets=\u0421\u0431\u043e\u0440 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043a \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044e...
instanceDeleter.deleting=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 {0}...
instanceDeleter.failures=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0434\u0430\u043b\u0438\u0442\u044c {0} \u0444\u0430\u0439\u043b\u043e\u0432.
instanceResetter.resetting=\u0421\u0431\u0440\u043e\u0441 {0}...
instanceLoader.loadingLocal=\u0427\u0442\u0435\u043d\u0438\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u0441 \u0434\u0438\u0441\u043a\u0430...
instanceLoader.checkingRemote=\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u043f\u0430\u043a\u043e\u0432...
runner.preparing=\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443...
runner.collectingArgs=\u0421\u0431\u043e\u0440 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432...
runner.startingJava=\u0417\u0430\u043f\u0443\u0441\u043a java...
runner.updateRequired=\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435.
runner.missingLibrary=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c {0}, \u0442.\u043a. \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 ''{1}''.
runner.missingAssetsIndex=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c {0}, \u0442.\u043a. \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.
runner.corruptAssetsIndex=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c {0}, \u0442.\u043a. \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.
assets.expanding1=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0430 {0}... (\u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c {1})
assets.expandingN=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 {0}... (\u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c {1})
assets.missingIndex=\u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0442.\u043a. \u0444\u0430\u0439\u043b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432 ''{0}'' \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.
assets.missingObject=\u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0442.\u043a. \u0444\u0430\u0439\u043b \u0432 ''{0}'' \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.
features.nameColumn=\u041e\u043f\u0446\u0438\u044f
features.title=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u043f\u0446\u0438\u0438
features.install=OK
features.selectForInfo=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u043f\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.
features.intro=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u043f\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c.
features.starred=(\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)
features.avoid=(\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)