Compare commits

...
8 Commits
65 changed files with 1217 additions and 131 deletions

No files matched your search

-23
View File
@@ -1,23 +0,0 @@
<Configuration status="WARN">
<Appenders>
<Console name="SysOut" target="SYSTEM_OUT">
<XMLLayout/>
</Console>
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<OnStartupTriggeringPolicy/>
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="info">
<filters>
<MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL"/>
</filters>
<AppenderRef ref="SysOut"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
@@ -20,6 +20,7 @@ package org.jackhuang.hmcl;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.security.GeneralSecurityException;
@@ -32,19 +33,21 @@ import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.X509TrustManager;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.RepaintManager;
import org.jackhuang.hmcl.api.HMCLApi;
import org.jackhuang.hmcl.api.HMCLog;
import org.jackhuang.hmcl.api.ILogger;
import org.jackhuang.hmcl.api.PluginManager;
import org.jackhuang.hmcl.api.VersionNumber;
import org.jackhuang.hmcl.core.MCUtils;
import org.jackhuang.hmcl.setting.Settings;
import org.jackhuang.hmcl.ui.LogWindow;
import org.jackhuang.hmcl.ui.MainFrame;
import org.jackhuang.hmcl.util.CrashReporter;
import org.jackhuang.hmcl.util.DefaultPlugin;
import org.jackhuang.hmcl.util.MathUtils;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.StrUtils;
import org.jackhuang.hmcl.util.lang.SupportedLocales;
import org.jackhuang.hmcl.util.log.Configuration;
@@ -176,8 +179,9 @@ public final class Main {
String s = Settings.getInstance().getLocalization();
for (SupportedLocales sl : SupportedLocales.values())
if (sl.name().equals(s)) {
SupportedLocales.NOW_LOCALE = sl;
SupportedLocales.setNowLocale(sl);
Locale.setDefault(sl.self);
JOptionPane.setDefaultLocale(sl.self);
}
if (System.getProperty("java.vm.name").contains("Open")) // OpenJDK
@@ -207,6 +211,12 @@ public final class Main {
}
});
}
try {
unpackDefaultLog4jConfiguration();
} catch(IOException e) {
HMCLog.err("Failed to unpack log4j.xml, log window will not work well.", e);
}
MainFrame.showMainFrame();
}
@@ -215,6 +225,20 @@ public final class Main {
public static void invokeUpdate() {
MainFrame.INSTANCE.invokeUpdate();
}
public static final File LOG4J_FILE = new File(MCUtils.getWorkingDirectory("hmcl"), "log4j.xml");
public static void unpackDefaultLog4jConfiguration() throws IOException {
LOG4J_FILE.getParentFile().mkdirs();
if (LOG4J_FILE.exists()) return;
LOG4J_FILE.createNewFile();
try (InputStream is = Main.class.getResourceAsStream("/org/jackhuang/hmcl/log4j.xml");
FileOutputStream fos = new FileOutputStream(LOG4J_FILE)) {
int b;
while ((b = is.read()) != -1)
fos.write(b);
}
}
public static ImageIcon getIcon(String path) {
try {
@@ -112,8 +112,7 @@ public final class Profile implements IProfile {
}
public void makeVersionSettingGlobal(String id) {
HMCLMinecraftService s = (HMCLMinecraftService) service();
VersionSetting vs = s.getVersionSetting(id);
VersionSetting vs = service().getVersionSetting(id);
if (vs == null)
return;
vs.setUsesGlobal(true);
@@ -32,7 +32,7 @@ import org.jackhuang.hmcl.api.event.config.ProfileChangedEvent;
import org.jackhuang.hmcl.api.event.config.ProfileLoadingEvent;
import org.jackhuang.hmcl.laf.utils.AnimationController;
import org.jackhuang.hmcl.util.sys.FileUtils;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.UpdateChecker;
import org.jackhuang.hmcl.util.sys.IOUtils;
@@ -310,7 +310,6 @@ public class VersionSetting {
x.setFullscreen(isFullscreen());
x.setWrapper(getWrapper());
x.setGameDir(gameDir);
x.setGameDirType(getGameDirType());
x.setHeight(getHeight());
x.setJavaArgs(getJavaArgs());
x.setLaunchVersion(id);
@@ -23,7 +23,7 @@ import org.jackhuang.hmcl.api.ui.TopTabPage;
import org.jackhuang.hmcl.core.download.MinecraftRemoteVersions;
import org.jackhuang.hmcl.setting.Settings;
import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.StrUtils;
import org.jackhuang.hmcl.util.task.ProgressProviderListener;
import org.jackhuang.hmcl.util.task.Task;
@@ -370,7 +370,9 @@
</Component>
<Component class="javax.swing.JLabel" name="lblUsesGlobal">
<Properties>
<Property name="text" type="java.lang.String" value="jLabel1"/>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/jackhuang/hmcl/lang/I18N.properties" key="settings.type.none" replaceFormat="C.i18n(&quot;{key}&quot;)"/>
</Property>
<Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
<Color id="&#x624b;&#x578b;&#x5149;&#x6807;"/>
</Property>
@@ -36,7 +36,6 @@ import java.io.IOException;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
@@ -59,7 +58,7 @@ import org.jackhuang.hmcl.core.install.InstallerType;
import org.jackhuang.hmcl.api.game.GameDirType;
import org.jackhuang.hmcl.core.version.MinecraftVersion;
import org.jackhuang.hmcl.setting.VersionSetting;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.AbstractSwingWorker;
import org.jackhuang.hmcl.util.MinecraftVersionRequest;
import org.jackhuang.hmcl.util.sys.OS;
@@ -168,7 +167,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi
JMenuItem itm = new JMenuItem(C.i18n("versions.manage.rename"));
itm.addActionListener((e) -> {
if (mcVersion != null) {
String newName = JOptionPane.showInputDialog(C.i18n("versions.manage.rename.message"), mcVersion);
String newName = MessageBox.showInputDialog(C.i18n("versions.manage.rename.message"), mcVersion);
if (newName != null)
if (Settings.getLastProfile().service().version().renameVersion(mcVersion, newName))
refreshVersions();
@@ -452,7 +451,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi
}
});
lblUsesGlobal.setText("jLabel1");
lblUsesGlobal.setText(C.i18n("settings.type.none")); // NOI18N
lblUsesGlobal.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
lblUsesGlobal.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
@@ -994,7 +993,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi
fc.setFileSelectionMode(JSystemFileChooser.DIRECTORIES_ONLY);
if (fc.showOpenDialog(this) == JSystemFileChooser.APPROVE_OPTION) {
File newGameDir = fc.getSelectedFile();
String name = JOptionPane.showInputDialog(C.i18n("setupwindow.give_a_name"));
String name = MessageBox.showInputDialog(C.i18n("setupwindow.give_a_name"));
if (StrUtils.isBlank(name)) {
MessageBox.show(C.i18n("setupwindow.no_empty_name"));
return;
@@ -28,7 +28,7 @@ import org.jackhuang.hmcl.core.install.InstallerType;
import org.jackhuang.hmcl.core.install.InstallerVersionList;
import org.jackhuang.hmcl.util.task.TaskRunnable;
import org.jackhuang.hmcl.util.task.TaskWindow;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.StrUtils;
import org.jackhuang.hmcl.util.task.ProgressProviderListener;
import org.jackhuang.hmcl.util.task.Task;
@@ -27,7 +27,7 @@ import org.jackhuang.hmcl.setting.Settings;
import org.jackhuang.hmcl.core.download.DownloadType;
import org.jackhuang.hmcl.util.MathUtils;
import org.jackhuang.hmcl.util.sys.IOUtils;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.lang.SupportedLocales;
import org.jackhuang.hmcl.util.ui.JFontComboBox;
import org.jackhuang.hmcl.util.ui.JSystemFileChooser;
@@ -20,7 +20,6 @@ package org.jackhuang.hmcl.ui;
import java.io.File;
import java.io.IOException;
import java.io.PipedOutputStream;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import org.jackhuang.hmcl.api.HMCLApi;
import org.jackhuang.hmcl.api.event.process.JVMLaunchFailedEvent;
@@ -36,12 +35,13 @@ import org.jackhuang.hmcl.setting.Settings;
import org.jackhuang.hmcl.util.HMCLGameLauncher;
import org.jackhuang.hmcl.util.MinecraftCrashAdvicer;
import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.api.func.Consumer;
import org.jackhuang.hmcl.api.HMCLog;
import org.jackhuang.hmcl.api.event.launch.LaunchingState;
import org.jackhuang.hmcl.util.DefaultPlugin;
import org.jackhuang.hmcl.util.Log4jHandler;
import org.jackhuang.hmcl.util.StrUtils;
import org.jackhuang.hmcl.util.sys.FileUtils;
import org.jackhuang.hmcl.util.sys.PrintlnEvent;
import org.jackhuang.hmcl.util.sys.ProcessMonitor;
@@ -76,7 +76,11 @@ public class LaunchingUIDaemon {
PipedOutputStream os = new PipedOutputStream();
monitor.setTag(obj);
try {
Log4jHandler handler = new Log4jHandler(os);
Log4jHandler handler = new Log4jHandler(monitor, os);
handler.addForbiddenToken(obj.getLoginResult().getAccessToken(), "<access token>");
handler.addForbiddenToken(obj.getLoginResult().getSession(), "<session>");
handler.addForbiddenToken(obj.getLoginResult().getUserId(), "<uuid>");
handler.addForbiddenToken("Setting user: " + obj.getLoginResult().getUserName(), "<player>");
handler.start();
} catch(Exception e) {
HMCLog.err("", e);
@@ -240,8 +244,8 @@ public class LaunchingUIDaemon {
private static final Consumer<LaunchSucceededEvent> LAUNCH_SCRIPT_FINISHER = event -> {
try {
String s = JOptionPane.showInputDialog(C.i18n("mainwindow.enter_script_name"));
if (s != null)
String s = MessageBox.showInputDialog(C.i18n("mainwindow.enter_script_name"));
if (StrUtils.isNotBlank(s))
MessageBox.show(C.i18n("mainwindow.make_launch_succeed") + " " + ((GameLauncher) event.getSource()).makeLauncher(s, event.getValue()).getAbsolutePath());
} catch (IOException ex) {
MessageBox.show(C.i18n("mainwindow.make_launch_script_failed"));
@@ -57,7 +57,7 @@ import org.jackhuang.hmcl.api.PluginManager;
import org.jackhuang.hmcl.api.event.config.ThemeChangedEvent;
import org.jackhuang.hmcl.setting.Settings;
import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.StrUtils;
import org.jackhuang.hmcl.api.HMCLog;
import org.jackhuang.hmcl.util.ui.BasicColors;
@@ -394,6 +394,8 @@ public final class MainFrame extends DraggableFrame implements IRepaint {
}
public void reloadColor(Theme t) {
if (isShowedMessage)
return;
for (Map.Entry<String, String> entry : t.settings.entrySet()) {
if (entry.getValue().startsWith("#"))
UIManager.put(entry.getKey(), GraphicsUtils.getWebColor(entry.getValue()));
@@ -26,7 +26,6 @@ import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.KeyEvent;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileNameExtensionFilter;
import org.jackhuang.hmcl.api.HMCLApi;
@@ -55,6 +54,7 @@ import org.jackhuang.hmcl.util.ui.SwingUtils;
import org.jackhuang.hmcl.util.ui.wizard.api.WizardDisplayer;
import org.jackhuang.hmcl.api.auth.IAuthenticator;
import org.jackhuang.hmcl.laf.button.CustomButtonUI;
import org.jackhuang.hmcl.util.ui.MessageBox;
/**
*
@@ -402,7 +402,9 @@ public class MainPagePanel extends Page {
fc.showOpenDialog(this);
if (fc.getSelectedFile() == null)
return;
String suggestedModpackId = JOptionPane.showInputDialog("Please enter your favourite game name", FileUtils.getBaseName(fc.getSelectedFile().getName()));
String suggestedModpackId = MessageBox.showInputDialog(C.i18n("modpack.enter_name"), FileUtils.getBaseName(fc.getSelectedFile().getName()));
if (StrUtils.isBlank(suggestedModpackId))
return;
TaskWindow.factory().append(ModpackManager.install(MainFrame.INSTANCE, fc.getSelectedFile(), Settings.getLastProfile().service(), suggestedModpackId)).execute();
Settings.getLastProfile().service().version().refreshVersions();
}//GEN-LAST:event_btnImportModpackActionPerformed
@@ -23,7 +23,7 @@ import java.io.IOException;
import java.util.Map;
import javax.swing.JOptionPane;
import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.StrUtils;
import org.jackhuang.hmcl.util.net.WebPage;
import org.jackhuang.hmcl.util.ui.wizard.spi.WizardController;
@@ -19,7 +19,7 @@ package org.jackhuang.hmcl.util;
import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.util.StrUtils;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -41,5 +41,11 @@ public class HMCLMinecraftLoader extends MinecraftLoader {
list.add("-Dminecraft.launcher.version=" + Main.LAUNCHER_VERSION);
list.add("-Dminecraft.launcher.brand=" + Main.LAUNCHER_NAME);
boolean flag = false;
for (String s : list) if (s.contains("-Dlog4j.configurationFile=")) flag = true;
if (!flag) {
list.add("-Dlog4j.configurationFile=" + Main.LOG4J_FILE.getAbsolutePath());
}
}
}
@@ -56,7 +56,7 @@ public class HMCLMinecraftService extends IMinecraftService {
public HMCLMinecraftService(Profile p) {
this.p = p;
this.provider = new HMCLGameProvider(this);
provider.initializeMiencraft();
provider.initializeMinecraft();
HMCLApi.EVENT_BUS.channel(RefreshingVersionsEvent.class).register(versionSettings::clear);
HMCLApi.EVENT_BUS.channel(RefreshedVersionsEvent.class).registerFirst(() -> {
if (!checkingModpack) {
@@ -22,9 +22,15 @@ import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import org.jackhuang.hmcl.api.HMCLApi;
import org.jackhuang.hmcl.api.event.process.JavaProcessStoppedEvent;
import org.jackhuang.hmcl.api.func.Consumer;
import org.jackhuang.hmcl.ui.LogWindow;
import org.jackhuang.hmcl.util.log.Level;
import org.jackhuang.hmcl.util.sys.ProcessMonitor;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -36,19 +42,25 @@ import org.xml.sax.helpers.XMLReaderFactory;
*
* @author huang
*/
public class Log4jHandler extends Thread {
public class Log4jHandler extends Thread implements Consumer<JavaProcessStoppedEvent> {
XMLReader reader;
ProcessMonitor monitor;
PipedInputStream inputStream;
PipedOutputStream outputStream;
List<Pair<String, String>> forbiddenTokens = new LinkedList<>();
public Log4jHandler(PipedOutputStream outputStream) throws ParserConfigurationException, IOException, SAXException {
/*SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
.*/
public Log4jHandler(ProcessMonitor monitor, PipedOutputStream outputStream) throws ParserConfigurationException, IOException, SAXException {
reader = XMLReaderFactory.createXMLReader();
inputStream = new PipedInputStream(outputStream);
this.outputStream = outputStream;
this.monitor = monitor;
HMCLApi.EVENT_BUS.channel(JavaProcessStoppedEvent.class).register((Consumer<JavaProcessStoppedEvent>) this);
}
public void addForbiddenToken(String token, String replacement) {
forbiddenTokens.add(new Pair<>(token, replacement));
}
@Override
@@ -56,7 +68,6 @@ public class Log4jHandler extends Thread {
try {
outputStream.write("<output>".getBytes());
outputStream.flush();
//reader.parse(inputStream, new Log4jHandlerImpl());
reader.setContentHandler(new Log4jHandlerImpl());
reader.parse(new InputSource(inputStream));
} catch (SAXException | IOException e) {
@@ -64,10 +75,23 @@ public class Log4jHandler extends Thread {
}
}
@Override
public void accept(JavaProcessStoppedEvent t) {
if (t.getSource() == monitor) {
try {
outputStream.write("</output>".getBytes());
outputStream.close();
} catch (IOException ignore) { // won't happen
throw new Error(ignore);
}
}
}
class Log4jHandlerImpl extends DefaultHandler {
private final SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
String message = "", date = "", thread = "", logger = "";
String date = "", thread = "", logger = "";
StringBuilder message = null;
Level l = null;
boolean readingMessage = false;
@@ -75,7 +99,7 @@ public class Log4jHandler extends Thread {
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
switch (localName) {
case "log4j_Event":
message = "";
message = new StringBuilder();
Date d = new Date(Long.valueOf(attributes.getValue("timestamp")));
date = df.format(d);
try {
@@ -98,7 +122,7 @@ public class Log4jHandler extends Thread {
public void endElement(String uri, String localName, String qName) throws SAXException {
switch (localName) {
case "log4j_Event":
println("[" + date + "] [" + thread + "/" + l.name() + "] [" + logger + "] " + message, l);
println("[" + date + "] [" + thread + "/" + l.name() + "] [" + logger + "] " + message.toString(), l);
break;
case "log4j_Message":
readingMessage = false;
@@ -111,12 +135,14 @@ public class Log4jHandler extends Thread {
String line = new String(ch, start, length);
if (line.trim().isEmpty()) return;
if (readingMessage)
message += line + C.LINE_SEPARATOR;
message.append(line).append(C.LINE_SEPARATOR);
else
println(line, Level.guessLevel(line));
}
public void println(String message, Level l) {
for (Pair<String, String> entry : forbiddenTokens)
message = message.replace(entry.key, entry.value);
if (LogWindow.outputStream != null)
LogWindow.outputStream.log(message, l);
}
@@ -17,7 +17,6 @@
*/
package org.jackhuang.hmcl.util;
import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.util.lang.SupportedLocales;
/**
@@ -34,7 +33,7 @@ public final class MinecraftCrashAdvicer {
public static String getAdvice(String trace, boolean selfCrash) {
if (trace == null)
return C.i18n("crash.advice.no");
trace = trace.toLowerCase(SupportedLocales.NOW_LOCALE.self);
trace = trace.toLowerCase(SupportedLocales.getNowLocale().self);
if (trace.contains("pixel format not accelerated"))
return C.i18n("crash.advice.LWJGLException");
else if (trace.contains("unsupportedclassversionrrror"))
@@ -46,7 +46,7 @@ import org.jackhuang.hmcl.util.task.Task;
import org.jackhuang.hmcl.util.task.TaskWindow;
import org.jackhuang.hmcl.util.net.FileDownloadTask;
import org.jackhuang.hmcl.util.ArrayUtils;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.UpdateChecker;
import org.jackhuang.hmcl.util.Utils;
import org.jackhuang.hmcl.api.VersionNumber;
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="SysOut" target="SYSTEM_OUT">
<LegacyXMLLayout />
<XMLLayout />
</Console>
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<OnStartupTriggeringPolicy />
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="info">
<filters>
<MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL" />
</filters>
<AppenderRef ref="SysOut"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
@@ -29,7 +29,6 @@ public class LaunchOptions {
private String proxyHost, proxyPort, proxyUser, proxyPass, javaDir, launchVersion, type, precalledCommand;
private boolean fullscreen, noJVMArgs, notCheckGame;
private File gameDir;
private GameDirType gameDirType;
public String getVersionName() {
return versionName;
@@ -115,14 +114,6 @@ public class LaunchOptions {
this.fullscreen = fullscreen;
}
public GameDirType getGameDirType() {
return gameDirType;
}
public void setGameDirType(GameDirType gameDirType) {
this.gameDirType = gameDirType;
}
public String getPermSize() {
return permSize;
}
@@ -30,7 +30,7 @@ import org.jackhuang.hmcl.core.service.IMinecraftAssetService;
import org.jackhuang.hmcl.core.service.IMinecraftService;
import org.jackhuang.hmcl.core.version.AssetIndexDownloadInfo;
import org.jackhuang.hmcl.core.version.MinecraftVersion;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.api.HMCLog;
import org.jackhuang.hmcl.core.version.LoggingInfo;
import org.jackhuang.hmcl.util.task.Task;
@@ -120,6 +120,7 @@ public class MinecraftAssetService extends IMinecraftAssetService {
HMCLog.warn("Failed to make directories: " + assetsDir);
File assetsIndex = getIndexFile(assetIndex.getId());
File renamed = null;
// This is unnecessary to do such backup job, FileDownloadTask can do this.
if (assetsIndex.exists()) {
renamed = new File(assetsDir, "indexes/" + assetIndex.getId() + "-renamed.json");
if (assetsIndex.renameTo(renamed))
@@ -150,16 +151,16 @@ public class MinecraftAssetService extends IMinecraftAssetService {
@Override
public File getAssetObject(String assetId, String name) throws IOException {
try {
AssetsIndex index = (AssetsIndex) C.GSON.fromJson(FileUtils.read(getIndexFile(assetId), "UTF-8"), AssetsIndex.class);
AssetsIndex index = C.GSON.fromJson(FileUtils.read(getIndexFile(assetId), "UTF-8"), AssetsIndex.class);
if (index == null || index.getFileMap() == null || index.getFileMap().get(name) == null)
throw new IOException("Assets file format malformed.");
return getAssetObject(assetId, (AssetsObject) index.getFileMap().get(name));
return getAssetObject(assetId, index.getFileMap().get(name));
} catch (JsonSyntaxException e) {
throw new IOException("Assets file format malformed.", e);
}
}
protected boolean checkAssetsExistance(AssetIndexDownloadInfo assetIndex, LoggingInfo info) {
protected boolean checkAssetsExistence(AssetIndexDownloadInfo assetIndex, LoggingInfo info) {
String assetId = assetIndex.getId();
File indexFile = getIndexFile(assetId);
File assetDir = getAssets(assetId);
@@ -208,8 +209,8 @@ public class MinecraftAssetService extends IMinecraftAssetService {
HMCLog.log("Reconstructing virtual assets folder at " + virtualRoot);
int tot = index.getFileMap().entrySet().size();
for (Map.Entry<String, AssetsObject> entry : index.getFileMap().entrySet()) {
File target = new File(virtualRoot, (String) entry.getKey());
File original = assetObjectPath(assetsDir, (AssetsObject) entry.getValue());
File target = new File(virtualRoot, entry.getKey());
File original = assetObjectPath(assetsDir, entry.getValue());
if (original.exists()) {
cnt++;
if (!target.isFile())
@@ -240,7 +241,7 @@ public class MinecraftAssetService extends IMinecraftAssetService {
LoggingInfo logging = null;
if (t.logging != null)
logging = t.logging.get("client");
if (allow && !checkAssetsExistance(t.getAssetsIndex(), logging))
if (allow && !checkAssetsExistence(t.getAssetsIndex(), logging))
if (MessageBox.show(C.i18n("assets.no_assets"), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION)
TaskWindow.factory().execute(downloadAssets(t));
return reconstructAssets(t.getAssetsIndex()).getAbsolutePath();
@@ -23,13 +23,13 @@ import org.jackhuang.hmcl.api.auth.AuthenticationException;
import com.google.gson.GsonBuilder;
import java.net.Proxy;
import java.util.Map;
import javax.swing.JOptionPane;
import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.util.ArrayUtils;
import org.jackhuang.hmcl.core.auth.yggdrasil.GameProfile;
import org.jackhuang.hmcl.core.auth.yggdrasil.UUIDTypeAdapter;
import org.jackhuang.hmcl.core.auth.yggdrasil.PropertyMap;
import org.jackhuang.hmcl.core.auth.yggdrasil.YggdrasilAuthentication;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.ui.SwingUtils;
/**
@@ -49,7 +49,7 @@ public final class YggdrasilAuthenticator extends AbstractAuthenticator {
public UserProfileProvider login(LoginInfo info) throws AuthenticationException {
UserProfileProvider result = new UserProfileProvider();
if (ua.canPlayOnline()) {
result.setUserName(info.username)
result.setUserName(ua.getSelectedProfile().name)
.setUserId(UUIDTypeAdapter.fromUUID(ua.getSelectedProfile().id));
} else {
String usr = info.username;
@@ -77,7 +77,7 @@ public final class YggdrasilAuthenticator extends AbstractAuthenticator {
selectedProfile = profiles[sel];
username = names[sel];
} else
username = JOptionPane.showInputDialog(C.i18n("login.no_charactor"));
username = MessageBox.showInputDialog(C.i18n("login.no_charactor"));
else
username = selectedProfile.name;
if (username == null)
@@ -81,7 +81,7 @@ public class GameProfile {
if (!(json instanceof JsonObject))
throw new JsonParseException("The json element is not a JsonObject.");
JsonObject object = (JsonObject) json;
UUID id = object.has("id") ? (UUID) context.deserialize(object.get("id"), UUID.class) : null;
UUID id = object.has("id") ? context.deserialize(object.get("id"), UUID.class) : null;
String name = object.has("name") ? object.getAsJsonPrimitive("name").getAsString() : null;
return new GameProfile(id, name);
}
@@ -71,8 +71,7 @@ public class PropertyMap extends HashMap<String, Property> {
for (Map.Entry<String, JsonElement> entry : object.entrySet())
if (entry.getValue() instanceof JsonArray)
for (JsonElement element : (JsonArray) entry.getValue())
result.put(entry.getKey(),
new Property((String) entry.getKey(), element.getAsString()));
result.put(entry.getKey(), new Property(entry.getKey(), element.getAsString()));
} else if ((json instanceof JsonArray))
for (JsonElement element : (JsonArray) json)
if ((element instanceof JsonObject)) {
@@ -36,7 +36,7 @@ public enum UserType {
}
public static UserType byName(String name) {
return (UserType) BY_NAME.get(name.toLowerCase());
return BY_NAME.get(name.toLowerCase());
}
public static UserType byLegacy(boolean isLegacy) {
@@ -133,7 +133,7 @@ public class YggdrasilAuthentication {
if (StrUtils.isNotBlank(getAuthenticatedToken())) {
if (StrUtils.isBlank(getUserId()))
if (StrUtils.isBlank(username))
if (StrUtils.isNotBlank(username))
userid = username;
else
throw new AuthenticationException(C.i18n("login.invalid_uuid_and_username"));
@@ -23,7 +23,6 @@ import java.util.Arrays;
import java.util.Collection;
import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.util.net.HTTPGetTask;
import org.jackhuang.hmcl.util.net.NetUtils;
import org.jackhuang.hmcl.util.task.Task;
import org.jackhuang.hmcl.util.task.TaskWorker;
@@ -79,7 +79,7 @@ public class MojangDownloadProvider extends IDownloadProvider {
else if (str.contains("scala-swing") || str.contains("scala-xml") || str.contains("scala-parser-combinators"))
return str.replace("http://files.minecraftforge.net/maven", "http://ftb.cursecdn.com/FTB2/maven/");
else if (str.contains("typesafe") || str.contains("scala"))
if (SupportedLocales.NOW_LOCALE.self == Locale.CHINA)
if (SupportedLocales.getNowLocale().self == Locale.CHINA)
return str.replace("http://files.minecraftforge.net/maven", "http://maven.aliyun.com/nexus/content/groups/public");
else
return str.replace("http://files.minecraftforge.net/maven", "http://repo1.maven.org/maven2");
@@ -59,7 +59,7 @@ public abstract class InstallerVersionList {
*
* @return cached result.
*/
public List<InstallerVersion> getVersionsImpl(String mcVersion) {
private List<InstallerVersion> getVersionsImpl(String mcVersion) {
if (versions == null || versionMap == null)
return null;
if (StrUtils.isBlank(mcVersion))
@@ -29,7 +29,7 @@ import org.jackhuang.hmcl.core.service.IMinecraftService;
import org.jackhuang.hmcl.util.task.Task;
import org.jackhuang.hmcl.util.sys.FileUtils;
import org.jackhuang.hmcl.core.version.MinecraftLibrary;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.sys.IOUtils;
/**
@@ -78,7 +78,6 @@ public class MinecraftForgeVersionList extends InstallerVersionList {
MinecraftForgeVersion v = root.number.get(num);
InstallerVersion iv = new InstallerVersion(v.version, StrUtils.formatVersion(v.mcversion));
for (String[] f : v.files) {
String ver = v.mcversion + "-" + v.version;
if (!StrUtils.isBlank(v.branch))
ver = ver + "-" + v.branch;
@@ -105,7 +104,7 @@ public class MinecraftForgeVersionList extends InstallerVersionList {
versions.add(iv);
}
versionMap.put(StrUtils.formatVersion(mcver), al);
versionMap.put(mcver, al);
}
Collections.sort(versions, new InstallerVersionComparator());
@@ -0,0 +1,35 @@
/*
* Hello Minecraft! Launcher.
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see {http://www.gnu.org/licenses/}.
*/
package org.jackhuang.hmcl.core.install.liteloader;
import com.google.gson.annotations.SerializedName;
import java.util.List;
import java.util.Map;
import org.jackhuang.hmcl.core.version.MinecraftLibrary;
/**
*
* @author huang
*/
public class LiteLoaderBranch {
@SerializedName("libraries")
public List<MinecraftLibrary> libraries;
@SerializedName("com.mumfrey:liteloader")
public Map<String, LiteLoaderVersion> liteLoader;
}
@@ -66,7 +66,7 @@ public class LiteLoaderInstaller extends Task implements PreviousResultRegistrar
mv.libraries = new ArrayList<>(Arrays.asList(version.libraries));
MinecraftLibrary ml = new MinecraftLibrary("com.mumfrey:liteloader:" + version.selfVersion);
ml.url = "http://dl.liteloader.com/versions";
ml.url = "http://dl.liteloader.com/versions/";
mv.libraries.add(0, ml);
// We use options from the old vanilla version.
@@ -30,7 +30,7 @@ public class LiteLoaderInstallerVersion extends InstallerVersionList.InstallerVe
public MinecraftLibrary[] libraries;
public String tweakClass;
public LiteLoaderInstallerVersion(String selfVersion, String mcVersion) {
super(selfVersion, mcVersion);
}
@@ -18,14 +18,19 @@
package org.jackhuang.hmcl.core.install.liteloader;
import com.google.gson.annotations.SerializedName;
import java.util.Map;
/**
*
* @author huangyuhui
*/
public class LiteLoaderMCVersions {
@SerializedName("repo")
public LiteLoaderRepo repo;
@SerializedName("artefacts")
public Map<String, Map<String, LiteLoaderVersion>> artefacts;
public LiteLoaderBranch artefacts;
@SerializedName("snapshots")
public LiteLoaderBranch snapshots;
}
@@ -0,0 +1,35 @@
/*
* Hello Minecraft! Launcher.
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see {http://www.gnu.org/licenses/}.
*/
package org.jackhuang.hmcl.core.install.liteloader;
import com.google.gson.annotations.SerializedName;
/**
*
* @author huang
*/
public class LiteLoaderRepo {
@SerializedName("stream")
public String stream;
@SerializedName("type")
public String type;
@SerializedName("url")
public String url;
@SerializedName("classifier")
public String classifier;
}
@@ -18,6 +18,7 @@
package org.jackhuang.hmcl.core.install.liteloader;
import com.google.gson.annotations.SerializedName;
import java.util.List;
import org.jackhuang.hmcl.core.version.MinecraftLibrary;
/**
@@ -36,6 +37,8 @@ public class LiteLoaderVersion {
public String md5;
@SerializedName("timestamp")
public String timestamp;
@SerializedName("lastSuccessfulBuild")
public int lastSuccessfulBuild;
@SerializedName("libraries")
public MinecraftLibrary[] libraries;
public List<MinecraftLibrary> libraries;
}
@@ -22,11 +22,14 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import org.jackhuang.hmcl.core.download.DownloadType;
import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.core.install.InstallerVersionList;
import org.jackhuang.hmcl.core.install.InstallerVersionNewerComparator;
import org.jackhuang.hmcl.core.version.MinecraftLibrary;
import org.jackhuang.hmcl.util.StrUtils;
import org.jackhuang.hmcl.util.task.Task;
import org.jackhuang.hmcl.util.task.TaskInfo;
@@ -60,6 +63,27 @@ public class LiteLoaderVersionList extends InstallerVersionList {
return Arrays.asList(task.setTag("Official Liteloader Download Site"));
}
private void doBranch(String version, LiteLoaderRepo repo, LiteLoaderBranch branch, List<InstallerVersion> result, boolean snapshot) {
if (branch == null || branch.liteLoader == null)
return;
for (Map.Entry<String, LiteLoaderVersion> entry : branch.liteLoader.entrySet()) {
if ("latest".equals(entry.getKey()))
continue;
LiteLoaderVersion v = entry.getValue();
LiteLoaderInstallerVersion iv = new LiteLoaderInstallerVersion(v.version.replace("SNAPSHOT", "SNAPSHOT-" + v.lastSuccessfulBuild), StrUtils.formatVersion(version));
if (snapshot)
iv.universal = String.format("http://jenkins.liteloader.com/view/%s/job/LiteLoader %s/lastSuccessfulBuild/artifact/build/libs/liteloader-%s-release.jar", version, version, v.version);
else
iv.universal = DownloadType.getSuggestedDownloadType().getProvider().getParsedDownloadURL(repo.url + "com/mumfrey/liteloader/" + version + "/" + v.file);
iv.tweakClass = v.tweakClass;
HashSet<MinecraftLibrary> set = new HashSet<>();
if (v.libraries != null)
set.addAll(v.libraries);
iv.libraries = set.toArray(new MinecraftLibrary[set.size()]);
result.add(iv);
}
}
@Override
public void executeTask(boolean areDependTasksSucceeded) throws Exception {
if (!areDependTasksSucceeded)
@@ -74,21 +98,10 @@ public class LiteLoaderVersionList extends InstallerVersionList {
for (Map.Entry<String, LiteLoaderMCVersions> arr : root.versions.entrySet()) {
ArrayList<InstallerVersion> al = new ArrayList<>();
LiteLoaderMCVersions mcv = arr.getValue();
if (mcv == null || mcv.artefacts == null || mcv.artefacts.get("com.mumfrey:liteloader") == null)
continue;
for (Map.Entry<String, LiteLoaderVersion> entry : mcv.artefacts.get("com.mumfrey:liteloader").entrySet()) {
if ("latest".equals(entry.getKey()))
continue;
LiteLoaderVersion v = entry.getValue();
LiteLoaderInstallerVersion iv = new LiteLoaderInstallerVersion(v.version, StrUtils.formatVersion(arr.getKey()));
iv.universal = DownloadType.getSuggestedDownloadType().getProvider().getParsedDownloadURL("http://dl.liteloader.com/versions/com/mumfrey/liteloader/" + arr.getKey() + "/" + v.file);
iv.tweakClass = v.tweakClass;
iv.libraries = Arrays.copyOf(v.libraries, v.libraries.length);
iv.installer = "http://dl.liteloader.com/redist/" + iv.mcVersion + "/liteloader-installer-" + iv.selfVersion.replace("_", "-") + ".jar";
al.add(iv);
versions.add(iv);
}
doBranch(arr.getKey(), mcv.repo, mcv.artefacts, al, false);
doBranch(arr.getKey(), mcv.repo, mcv.snapshots, al, true);
Collections.sort(al, new InstallerVersionNewerComparator());
versions.addAll(al);
versionMap.put(StrUtils.formatVersion(arr.getKey()), al);
}
@@ -27,7 +27,7 @@ import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.api.HMCLog;
import org.jackhuang.hmcl.util.sys.JdkVersion;
import org.jackhuang.hmcl.util.MathUtils;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.sys.OS;
import org.jackhuang.hmcl.util.sys.Platform;
import org.jackhuang.hmcl.util.StrUtils;
@@ -177,7 +177,7 @@ public abstract class AbstractMinecraftLoader implements IMinecraftLoader {
if (StrUtils.isNotBlank(options.getProxyUser()) && StrUtils.isNotBlank(options.getProxyPass())) {
res.add("--proxyUser");
res.add(options.getProxyUser());
res.add("-=proxyPass");
res.add("--proxyPass");
res.add(options.getProxyPass());
}
}
@@ -25,7 +25,7 @@ import org.jackhuang.hmcl.core.download.DownloadLibraryJob;
import org.jackhuang.hmcl.api.auth.LoginInfo;
import org.jackhuang.hmcl.core.service.IMinecraftService;
import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.api.HMCLog;
import org.jackhuang.hmcl.util.sys.CompressingUtils;
import org.jackhuang.hmcl.util.task.ParallelTask;
@@ -163,7 +163,11 @@ public abstract class GameLauncher {
}
}
HMCLog.log("Starting process");
HMCLog.log(str.toString());
String s = StrUtils.makeCommand(str);
s = s.replace(result.getAccessToken(), "<access token>");
s = s.replace(result.getSession(), "<session>");
s = s.replace(result.getUserId(), "<uuid>");
HMCLog.log(s);
ProcessBuilder builder = new ProcessBuilder(str);
if (options.getLaunchVersion() == null || service.baseDirectory() == null)
throw new Error("Fucking bug!");
@@ -190,7 +194,7 @@ public abstract class GameLauncher {
boolean isWin = OS.os() == OS.WINDOWS;
File f = new File(launcherName + (isWin ? ".bat" : ".sh"));
if (!f.exists() && !f.createNewFile())
HMCLog.warn("Failed to create " + f);
throw new IOException("Script file " + f.getAbsolutePath() + " does not exist but cannot be created.");
BufferedWriter writer;
try (FileOutputStream fos = FileUtils.openOutputStream(f)) {
writer = new BufferedWriter(new OutputStreamWriter(fos, Charsets.toCharset()));
@@ -65,7 +65,7 @@ public class MinecraftLoader extends AbstractMinecraftLoader {
}
File f = version.getJar(service.baseDirectory());
if (!f.exists())
throw new GameException("Minecraft jar does not exists");
throw new GameException("Minecraft jar does not exist");
library.append(f.getAbsolutePath()).append(File.pathSeparator);
res.add("-cp");
res.add(library.toString().substring(0, library.length() - File.pathSeparator.length()));
@@ -82,7 +82,7 @@ public class MinecraftModService extends IMinecraftModService {
HMCLog.warn("Failed to make directories: " + modsFolder);
File newf = new File(modsFolder, f.getName());
FileUtils.copyFile(f, newf);
ModInfo i = ModInfo.readModInfo(f);
ModInfo i = ModInfo.readModInfo(newf);
modCache.get(id).add(i);
return true;
} catch (IOException ex) {
@@ -44,7 +44,7 @@ public abstract class IMinecraftProvider<T extends IMinecraftService> {
/**
* To download mod packs.
*/
public abstract void initializeMiencraft();
public abstract void initializeMinecraft();
/**
* Get the run directory of given version.
@@ -39,7 +39,7 @@ import org.jackhuang.hmcl.core.service.IMinecraftService;
import org.jackhuang.hmcl.util.sys.FileUtils;
import org.jackhuang.hmcl.core.MCUtils;
import org.jackhuang.hmcl.util.task.TaskWindow;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.StrUtils;
import org.jackhuang.hmcl.api.func.Consumer;
import org.jackhuang.hmcl.api.func.Predicate;
@@ -108,7 +108,7 @@ public class MinecraftVersionManager<T extends IMinecraftService> extends IMinec
if (ask) {
HMCLog.warn("Found not matched filenames version: " + id + ", json: " + jsons[0].getName());
if (MessageBox.show(String.format(C.i18n("launcher.versions_json_not_matched"), id, jsons[0].getName()), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION)
if (!jsons[0].renameTo(new File(jsons[0].getParent(), id + ".json")))
if (!jsons[0].renameTo(jsonFile))
HMCLog.warn("Failed to rename version json " + jsons[0]);
}
if (!jsonFile.exists()) {
@@ -283,6 +283,7 @@ public class MinecraftVersionManager<T extends IMinecraftService> extends IMinec
@Override
public boolean onLaunch(String id) {
// Fix bug in Minecraft 1.8
File resourcePacks = new File(getRunDirectory(id), "resourcepacks");
if (!FileUtils.makeDirectory(resourcePacks))
HMCLog.warn("Failed to make resourcePacks: " + resourcePacks);
@@ -305,6 +306,6 @@ public class MinecraftVersionManager<T extends IMinecraftService> extends IMinec
}
@Override
public void initializeMiencraft() {
public void initializeMinecraft() {
}
}
@@ -86,7 +86,7 @@ public final class ArrayUtils {
return l;
}
public static <T> int matchArray(byte[] a, byte[] b) {
public static int matchArray(byte[] a, byte[] b) {
for (int i = 0; i < a.length - b.length; i++) {
int j = 1;
for (int k = 0; k < b.length; k++) {
@@ -42,7 +42,7 @@ public final class C {
}
public static String i18n(String a, Object... format) {
return SupportedLocales.NOW_LOCALE.translate(a, format);
return SupportedLocales.getNowLocale().translate(a, format);
}
}
@@ -17,6 +17,7 @@
*/
package org.jackhuang.hmcl.util;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.api.VersionNumber;
import org.jackhuang.hmcl.api.event.EventHandler;
import org.jackhuang.hmcl.util.net.NetUtils;
@@ -24,7 +24,12 @@ import java.util.Locale;
* @author huangyuhui
*/
public enum SupportedLocales {
def(Locale.getDefault(), "lang.default"), en(Locale.ENGLISH, null), zh(Locale.TRADITIONAL_CHINESE, null), zh_CN(Locale.SIMPLIFIED_CHINESE, null), vi(new Locale("vi"), null);
def(Locale.getDefault(), "lang.default"),
en(Locale.ENGLISH, null),
zh(Locale.TRADITIONAL_CHINESE, null),
zh_CN(Locale.SIMPLIFIED_CHINESE, null),
vi(new Locale("vi"), null),
ru(new Locale("ru"), null);
public Locale self;
private String showString, customized;
@@ -48,7 +53,15 @@ public enum SupportedLocales {
return NOW_LOCALE.translate(customized);
}
public static SupportedLocales NOW_LOCALE = def;
private static SupportedLocales NOW_LOCALE = def;
public static SupportedLocales getNowLocale() {
return NOW_LOCALE;
}
public static void setNowLocale(SupportedLocales newLocale) {
NOW_LOCALE = newLocale;
}
public String translate(String key, Object... format) {
try {
@@ -103,7 +103,7 @@ public class TaskList extends Thread {
}
Invoker thread = new Invoker(t2, counter, bool);
invokers.add(thread);
if (!EXECUTOR_SERVICE.isShutdown() && !EXECUTOR_SERVICE.isTerminated())
if (!EXECUTOR_SERVICE.isShutdown())
futures.put(thread, EXECUTOR_SERVICE.submit(thread));
}
try {
@@ -24,7 +24,7 @@ import javax.swing.SwingUtilities;
import javax.swing.table.TableColumn;
import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.api.HMCLog;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.ui.MessageBox;
import org.jackhuang.hmcl.util.StrUtils;
import org.jackhuang.hmcl.util.ui.SwingUtils;
@@ -15,10 +15,11 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see {http://www.gnu.org/licenses/}.
*/
package org.jackhuang.hmcl.util;
package org.jackhuang.hmcl.util.ui;
import org.jackhuang.hmcl.util.ui.SwingUtils;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import org.jackhuang.hmcl.util.C;
/**
* @author huangyuhui
@@ -103,6 +104,18 @@ public class MessageBox {
}
return 0;
}
public static String showInputDialog(String msg) {
return showInputDialog(msg, UIManager.getString("OptionPane.inputDialogTitle"));
}
public static String showInputDialog(String msg, String title) {
return showInputDialog(msg, title, null);
}
public static String showInputDialog(String msg, String title, String init) {
return (String) JOptionPane.showInputDialog(null, msg, title, JOptionPane.QUESTION_MESSAGE, null, null, init);
}
/**
* Show MsgBox with options
@@ -130,4 +143,11 @@ public class MessageBox {
public static int showLocalized(String msg) {
return show(C.i18n(msg));
}
static {
UIManager.put("OptionPane.cancelButtonText", C.i18n("button.cancel"));
UIManager.put("OptionPane.noButtonText", C.i18n("button.no"));
UIManager.put("OptionPane.okButtonText", C.i18n("button.ok"));
UIManager.put("OptionPane.yesButtonText", C.i18n("button.yes"));
}
}
@@ -46,7 +46,6 @@ import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import org.jackhuang.hmcl.util.C;
import org.jackhuang.hmcl.api.HMCLog;
import org.jackhuang.hmcl.util.MessageBox;
import org.jackhuang.hmcl.util.StrUtils;
import org.jackhuang.hmcl.util.Utils;
import org.jackhuang.hmcl.api.func.NonFunction;
@@ -160,6 +160,8 @@ ui.button.test=Test
ui.button.preview=Preview
button.cancel=Cancel
button.ok=OK
button.yes=Yes
button.no=No
ui.label.version=Version
ui.label.password=Password
@@ -224,6 +226,7 @@ settings.choose_gamedir=Choose Game Directory
settings.failed_load=Failed to load settings file. Remove it?
settings.test_game=Test game
settings.type.none=No version here, please turn to game download tab.
settings.type.global=<html><a href="">Click here to switch to version specialized setting. Now it is global setting.</a></html>
settings.type.special=<html><a href="">Click here to switch to global setting. Not it is version specialized setting.</a></html>
@@ -160,6 +160,8 @@ ui.button.test=Test
ui.button.preview=Preview
button.cancel=Cancel
button.ok=OK
button.yes=Yes
button.no=No
ui.label.version=Version
ui.label.password=Password
@@ -224,6 +226,7 @@ settings.choose_gamedir=Choose Game Directory
settings.failed_load=Failed to load settings file. Remove it?
settings.test_game=Test game
settings.type.none=No version here, please turn to game download tab.
settings.type.global=<html><a>Click here to switch to version specialized setting. Now it is global setting.</a></html>
settings.type.special=<html><a>Click here to switch to global setting. Not it is version specialized setting.</a></html>
@@ -0,0 +1,440 @@
# Hello Minecraft! Launcher.
# Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see {http://www.gnu.org/licenses/}.
#
#author: malyha2014@yandex.ru
launch.failed=Не удалось запустить.
launch.failed_creating_process=Не удалось создать процесс, возможно, ваш путь java - указан не верно, пожалуйста, измените свой путь java.
launch.failed_sh_permission=Не удалось добавить разрешение на запуск скрипта.
launch.failed_packing_jar=Не удалось упаковать в jar.
launch.unsupported_launcher_version=Извините, Launcher не может запустить minecraft, но он повторяет попытку запуска.
launch.too_big_memory_alloc_64bit=Вы выделили слишком много памяти для 32-разрядной ОС java игра скорее всего приведет к крашу. Максимальный объем памяти 1024МБ. Лаунчер будет пытаться запустить его.
launch.too_big_memory_alloc_free_space_too_low=Вы выделили слишком много памяти, потому что размер физической памяти составляет %dMB, ваша игра скорее всего приведет к крашу. Лаунчер будет пытаться запустить его.
launch.cannot_create_jvm=Мы видим, что он не может создать java виртуальная машина. В Java аргументах могут возникнуть проблемы. Вы можете включить режим No args в настройках.
launch.circular_dependency_versions=Нашли круговой версии зависимостей, пожалуйста, проверьте, если ваш клиент был изменен.
launch.not_finished_downloading_libraries=Не закончив загрузку библиотек, продолжить запуск игры?
launch.not_finished_decompressing_natives=Не закончил распаковку библиотек, продолжить запуск игры?
launch.wrong_javadir=Неправильные каталоги java, он будет сброшен по умолчанию каталог java.
launch.exited_abnormally=Игра завершилась крашем, пожалуйста, посетите журнал, или попросить кого-то о помощи.
launch.state.logging_in=Вход
launch.state.generating_launching_codes=Генерирования стартового кода
launch.state.downloading_libraries=Загрузки зависимостей
launch.state.decompressing_natives=Туземцев распаковки
launch.state.waiting_launching=Ждем запуска игры
install.no_version=Версия не найдена.
install.no_version_if_intall=Нужная версия не найдена, вы хотите, чтобы автоматически установилась версия?
install.not_refreshed=Список установки не обновляется.
install.download_list=Скачать список
install.liteloader.get_list=Получить список LiteLoader
install.liteloader.install=Установить LiteLoader
install.forge.get_list=Получить список Forge
install.forge.install=Установить Forge
install.forge.get_changelogs=Получить список изменений Forge
install.optifine.install=Установить OptiFine
install.optifine.get_list=Получить OptiFine лист
install.optifine.get_download_link=Получить скачивание OptiFine
install.failed_forge=Не удалось установить 'Forge'.
install.failed_optifine=Не удалось установить 'OptiFine'.
install.failed_liteloader=Не удалось установить 'LiteLoader'.
install.failed_download_forge=Не удалось скачать 'Forge'.
install.failed_download_optifine=Не удалось скачать 'OptiFine'.
install.failed=Не удалось установить
install.success=Успешная установка
install.no_forge=Нету Forge
install.choose_forge=Выберите версию, которую вы хотите установить Forge
install.version=Версия
install.mcversion=Версия игры
install.time=Время
install.release_time=Время выпуска
install.type=Тип
install.please_refresh=Если вы хотите установить что-то, пожалуйста, нажмите кнопку "Обновить".
crash.launcher=Лаунчер крашнулся!
crash.minecraft=Minecraft крашнулся!
login.choose_charactor=Пожалуйста, выберите символ, который вы хотите
login.no_charactor=Нет персонажа на этом аккаунте.
login.your_password=Пароль
login.failed=Не удалось войти
login.no_Player007=Не задано имя пользователя!
login.wrong_password=Неправильный пароль или имя пользователя
login.invalid_username=Неверное имя пользователя
login.invalid_uuid_and_username=Недопустимый UUID и имя пользователя
login.invalid_password=Неверный пароль
login.invalid_access_token=Недопустимый маркер доступа
login.changed_client_token=Ответ сервера был изменен маркер клиента.
login.not_email=Имя пользователя-это адрес электронной почты.
login.type=Логин
login.username=Ник
login.account=Почта
login.invalid_token=Пожалуйста, выйдите и повторно введите пароль для входа в систему.
login.no_valid_character=Не допустимый характер, пожалуйста, посетите skinme.cc и создайте своего собственного персонажа.
proxy.username=Аккаунт
proxy.password=Пароль
proxy.host=Хост
proxy.port=Порт
login.failed.connect_authentication_server=Не удается подключиться к серверу авторизации. Проверьте вашу сеть.
login.profile.not_logged_in=Вы не вошли в систему, Вы не можете изменить профиль!
login.profile.selected=Не могу изменить профиль, выйдите и повторите.
login.methods.yggdrasil=Email и пароль
login.methods.offline=Введите ваш ник
login.methods.no_method=Нет способа входа
log.playername_null=Ник игрока пусто.
minecraft.no_selected_version=Не выбрана Minecraft версия
minecraft.wrong_path=Неправильный путь Minecraft, лаунчер не может найти путь.
operation.stopped=Операция была прервана.
operation.confirm_stop=Прекращать операции?
ui.login.password=Пароль
ui.more=Больше
crash.advice.UnsupportedClassVersionError=Может быть, ваша версия java старая, попробуйте обновить java.
crash.advice.ConcurrentModificationException=Может быть, ваш java новее, чем 1.8.0_11, вы можете понизить до версии Java 7.
crash.advice.ClassNotFoundException=Minecraft или моды, являются неполными. Повторите, если есть какие-то библиотеки, которые не скачали или обновить игру и модов! Или вы можете попробовать настройки игры -> Управление (версии) -> библиотека удалить файлы, чтобы решить проблему.
crash.advice.NoSuchFieldError=Minecraft или моды, являются неполными. Повторите, если есть какие-то библиотеки, которые не скачали или обновить игру и моды!
crash.advice.LWJGLException=Может быть, ваш видео драйвер не работает, пожалуйста, обновите ваш видео драйвер.
crash.advice.SecurityException=Может быть, вы изменили minecraft.jar но не удалили META-INF.
crash.advice.OutOfMemoryError=Максимум памяти для JVM слишком мал, пожалуйста, измените его.
crash.advice.otherwise=Может быть моды вызвали проблемы.
crash.advice.OpenGL=Может быть драйвера вызвали проблемы.
crash.advice.no_lwjgl=Может быть драйвера вызвали проблемы.
crash.advice.no=Никакие советы.
crash.user_fault=Вашей операционной системы или среды Java не может быть установлен неправильно, в результате сбой этой программы, пожалуйста, проверьте вашу среду Java или компьютер!
crash.headless=Если ваша ОС Linux может использовать Oracle версии JDK вместо OpenJDK, то или добавить "-Djava.awt.headless=false" аргумент JVM, или проверить, если ваш сервер работает нормально.
crash.NoClassDefFound=Пожалуйста, проверьте "Launcher" программное обеспечение в комплекте.
crash.error=Minecraft крашнулся.
crash.main_class_not_found=Главный Класс не найден, может быть ваш МК был нарушен.
crash.class_path_wrong=Может запустить скрипт неправильный.
ui.label.newProfileWindow.new_profile_name=Новое Имя профиля:
ui.label.newProfileWindow.copy_from=Скопировать из:
ui.newProfileWindow.title=Новый конфиг
ui.button.ok=OK
ui.button.refresh=Обновить
ui.button.run=Войти в игру
ui.button.settings=Настройки
ui.button.about=About
ui.button.others=Другие
ui.button.logout=Выйти
ui.button.download=Скачать
ui.button.retry=Повторить
ui.button.delete=Удалить
ui.button.install=Установить
ui.button.info=Информация
ui.button.save=Сохранить
ui.button.copy=Скопировать
ui.button.clear=Очистить
ui.button.close=Закрыть
ui.button.explore=Выбрать
ui.button.test=Тест
ui.button.preview=Показать
button.cancel=Отменить
button.ok=OK
button.yes=Да
button.no=Нет
ui.label.version=Версия
ui.label.password=Пароль
ui.label.profile=Профиль
ui.message.first_load=Пожалуйста, введите ваш ник.
ui.message.enter_password=Пожалуйста, введите Ваш пароль.
ui.message.launching=Запуск...
ui.message.making=Генерация...
ui.message.sure_remove=Не забудьте удалить профиль %s?
ui.message.update_java=Пожалуйста, обновите ваш Java.
ui.message.open_jdk=Мы уже выяснили, что вы начали это приложение, используя OpenJDK, который станет причиной стольких бед для рисования интерфейса. Мы предлагаем Вам вместо того, чтобы с помощью Oracle версии JDK.
ui.label.settings=Настройки
ui.label.crashing=<html>Launcher крашнулся!</html>
ui.label.crashing_out_dated=<html>Launcher крашнулся! Ваш лаунчер устарел. Обновить его</html>
ui.label.failed_set=Не удалось установить:
download=Скачать
download.mojang=Mojang
download.BMCL=BMCLAPI (bangbang93, http://bmclapi.bangbang93.com/)
download.rapid_data=RapidData (https://www.rapiddata.org/)
download.not_200=Не удалось скачать, код ответа
download.failed=Не удалось скачать
download.successfully=Успешно скачал
download.source=Скачать Исходник
message.error=Ошибка
message.cannot_open_explorer=Не можете открыть проводник:
message.cancelled=Отменен
message.info=Информация
message.loading=Загрузка...
folder.game=Директория
folder.mod=Моды
folder.coremod=Ядро
folder.config=Конфигурации
folder.resourcepacks=Ресурс пак
folder.screenshots=Скриншоты
folder.saves=Сохранить
settings.tabs.game_download=Скачать игру
settings.tabs.installers=Установщик
settings.tabs.assets_downloads=Дополнения
settings=Настройки
settings.explore=Обзор...
settings.manage=Управлять
settings.cannot_remove_default_config=Не удается удалить конфигурацию по умолчанию.
settings.max_memory=Выделение памяти
settings.java_dir=Путь к Java
settings.game_directory=Директория
settings.dimension=Разрешение
settings.fullscreen=Полноэкранный режим
settings.update_version=Обновление версии в формате json.
settings.run_directory=Выбор каталога
settings.physical_memory=Размер физической памяти
settings.choose_javapath=Выбрать каталог Java.
settings.default=По умолчанию
settings.custom=Выбрать
settings.choose_gamedir=Выбрать директорию игры
settings.failed_load=Не смог файл загрузить настройки. Удалить его?
settings.test_game=Тестовая игра
settings.type.none=Нет версии игры, пожалуйста, откройте раздел скачать игру.
settings.type.global=<html><a href="">Нажмите здесь, чтобы перейти в специализированных версий. Сейчас это глобальная настройка.</a></html>
settings.type.special=<html><a href="">Нажмите здесь, чтобы перейти в глобальные настройки. Не это версии специализированных условиях.</a></html>
modpack=Мод пак
modpack.choose=Выбрать zip-файл, пакет, который вы хотите импортировать. Если вы хотите обновить пакет, пожалуйста, введите версию вы хотите обновить.
modpack.export_error=Не удалось экспортировать пакет, может быть Формат вашей игровой директории некорректно или не работать с файлами.
modpack.export_finished=Экспорт произведений, готовые. Смотреть
modpack.included_launcher=В пакет входит пусковая установка, вы можете опубликовать его сразу.
modpack.not_included_launcher=Вы можете использовать пакет, нажав кнопку "Импорт произведений".
modpack.enter_name=Введите желаемое имя для этой игры.
modpack.task.save=Эскпортировать Modpack
modpack.task.install=Импортировать Modpack
modpack.task.install.error=Не удалось установить пакет. Может быть, файлы неправильно, или возникла проблема управления.
modpack.task.install.will=Установить пакет:
modpack.wizard=Экспорт modpack мастер
modpack.wizard.step.1=Основные варианты
modpack.wizard.step.1.title=Набор основных вариантов modpack.
modpack.wizard.step.initialization.include_launcher=Включить лаунчер
modpack.wizard.step.initialization.exported_version=Экспортируемые версии игры
modpack.wizard.step.initialization.save=Выберите папку для экспорта игровых файлов для
modpack.wizard.step.initialization.warning=<html>Прежде чем сделать modpack, вы должны убедиться, что ваша игра сможет успешно запустить,<br/>и что ваш minecraft-это релиз, а не снимок.<br/>а что нельзя добавить модов, которые не позволили раздавать modpack.</html>
modpack.wizard.step.2=Выбор файлов
modpack.wizard.step.2.title=Выберите файлы, которые Вы не хотите положить в modpack.
modpack.wizard.step.3=Описание
modpack.wizard.step.3.title=Опишите ваш modpack.
modpack.desc=Опишите свою modpack, включая меры предосторожности, changlog, поддерживая уценки(также поддерживает онлайн-картинки).
modpack.incorrect_format.no_json=Формат произведений, является неверным, пакет.json-это отсутствует.
modpack.incorrect_format.no_jar=Формат modpack неправильно, пакет.json не имеет атрибут 'банку'
modpack.cannot_read_version=Не удалось собрать версии игры
modpack.not_a_valid_location=Не является допустимым modpack расположение
modpack.name=Modpack Название
modpack.not_a_valid_name=Не является допустимым modpack название
modpack.files.servers_dat=Список многопользовательских серверов
modpack.files.saves=Сохраненные игры
modpack.files.mods=Моды
modpack.files.config=Mod конфигурации
modpack.files.liteconfig=Mod конфигурации
modpack.files.resourcepacks=Ресурс(текстур) паки
modpack.files.options_txt=Варианты игры
modpack.files.optionsshaders_txt=Варианты шейдеры
modpack.files.mods.voxelmods=VoxelMods (включая VoxelMap) функции
modpack.files.dumps=NEI отладочный вывод
modpack.files.scripts=MineTweaker конфигурации
modpack.files.blueprints=BuildCraft чертежи
mods=Моды
mods.choose_mod=Выбрать ваши моды
mods.failed=Не удалось добавить моды
mods.add=Добавить
mods.remove=Удалить
mods.default_information=<html><font color=#c0392b>Пожалуйста, убедитесь, что у вас есть установленный Forge или LiteLoader перед установкой модов!<br>Вы можете оставить свой mod файл из проводника/Finder и удаление модов с помощью кнопки удалить.<br>Отключить мод, оставив флажок снят; выбрать товар, чтобы получить информацию.</font></html>
advancedsettings=Расширенный
advancedsettings.launcher_visible=При запуске Minecraft
advancedsettings.debug_mode=Режим отладки
advancedsettings.java_permanent_generation_space=PermGen Space/MB
advancedsettings.jvm_args=Java VM Аргументы
advancedsettings.Minecraft_arguments=Minecraft Аргументы
advancedsettings.launcher_visibility.close=Закрыть лаунчер, если игра запущена.
advancedsettings.launcher_visibility.hide=Скрывать лаунчер, когда игра запущена.
advancedsettings.launcher_visibility.keep=Оставить лаунчер видимым.
advancedsettings.launcher_visibility.hide_reopen=Скрывать лаунчер и повторно открывать, когда выйдите из игры.
advancedsettings.game_dir.default=По умолчанию (.minecraft/)
advancedsettings.game_dir.independent=Независимые (.minecraft/версии/<номер версии>/, за исключением активов,библиотеки)
advancedsettings.no_jvm_args=No Default JVM Args
advancedsettings.no_common=Не использовать общий путь
advancedsettings.java_args_default=Default java args: -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -XX:MaxPermSize=???m -Xmx???m -Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true
advancedsettings.wrapper_launcher=Лаунчер-оболочку(как и optirun...)
advancedsettings.precall_command=Команда Precalling(будут выполняться до запуска игры)
advancedsettings.server_ip=Сервера
advancedsettings.cancel_wrapper_launcher=Отмена запуска оболочки
advancedsettings.dont_check_game_completeness=Не проверить полноту игры
mainwindow.show_log=Показать Логи
mainwindow.make_launch_script=Сделать запуск скрипта.
mainwindow.make_launch_script_failed=Не удалось сделать скрипт.
mainwindow.enter_script_name=Введите имя скрипта.
mainwindow.make_launch_succeed=Закончил создание скрипта.
mainwindow.no_version=Версии Minecraft не найдены. Переключить на вкладку загрузки версии для игры в Minecraft?
launcher.about=<html>Об Авторе<br/>Майнкрафт форум ID: klkl6523<br/>Copyright (c) 2013 huangyuhui<br/>Opened source under GPL v3 license:http://github.com/huanghongxun/HMCL/<br/>This software used project Gson which is under Apache License 2.0, thanks contributors.</html>
launcher.download_source=Скачать Исходники
launcher.background_location=Фон Расположение
launcher.common_location=Общее Расположение
launcher.exit_failed=Не удалось закрыть.
launcher.versions_json_not_matched=Версия %s уродлив! Есть в формате json:%s в этой версии. Хотите ли вы решить эту проблему?
launcher.versions_json_not_matched_cannot_auto_completion=Версия %s потерянной информации версии файла, удалить его?
launcher.versions_json_not_formatted=Сведения о версии %s уродлив! Повторная загрузка?
launcher.choose_bgpath=Выберите фоновый пути.
launcher.choose_commonpath=Выбрать общий путь.
launcher.commpath_tooltip=<html><body>Это приложение будет сохранять все игровые библиотеки здесь, если там нет файлов в папке с игрой.</body></html>
launcher.background_tooltip=<html><body>Лаучер использует по умолчанию фон.<br/>Если вы используете пользовательский фон.PNG, ссылку и оно будет использоваться.<br />Если есть "БГ" подкаталог, это приложение выбирает одну картинку в "bgskin" случайно.<br />Если вы установите параметр фон, это приложение будет использовать его.</body></html>
launcher.update_launcher=Проверить обновления
launcher.enable_shadow=Включить тень окна
launcher.enable_animation=Включить анимацию
launcher.enable_blur=Включить размытие
launcher.theme=Тема
launcher.proxy=Прокси
launcher.decorated=Включить границы окна(для того, чтобы исправить проблему, если в пользовательском интерфейсе становится все серое в ОС Linux)
launcher.modpack=<html><a href="http://blog.163.com/huanghongxun2008@126/blog/static/7738046920160323812771/">Документация по modpacks.</a></html>
launcher.lang=Язык (Language)
launcher.restart=Варианты будут в операции, только если перезапустить это приложение.
launcher.log_font=Шрифт лога
launcher.tab.general=Общие
launcher.tab.ui=Интерфейс
launcher.tab.about=Версия
launcher.title.game=Игры
launcher.title.main=Главная
launcher.title.launcher=Лаунчер
versions.release=Release
versions.snapshot=Snapshot
versions.old_beta=Beta
versions.old_alpha=Old Alpha
versions.manage.rename=Переименовать эту версию
versions.manage.rename.message=Пожалуйста, введите новый ник
versions.manage.remove=Удалить версию
versions.manage.remove.confirm=Не забудьте удалить версию
versions.manage.redownload_json=Повторная загрузка конфигурации в Minecraft(minecraft.json)
versions.manage.redownload_assets_index=Перекачать библиотеки
versions.mamage.remove_libraries=Библиотека удалить файлы
advice.os64butjdk32=Ваша ОС 64-битная, но ваш java является 32-разрядной. Вам рекомендуется 64-разрядная версия java.
advice.java8=Java 8 представляет предположил, что может сделать игру работать более производительной. Многие моды и Minecraft 1.12 и новые версии требуют java 8.
assets.download_all=Скачать Файлы
assets.not_refreshed=Список библиотек не обновляется, пожалуйста, обновите его один раз.
assets.failed=Не удалось получить список, попробуйте еще раз.
assets.list.1_7_3_after=1.7.3 и выше
assets.list.1_6=1.6(BMCLAPI)
assets.unkown_type_select_one=Неизвестная версия игры: %s, пожалуйста, выберите тип библиотеки.
assets.type=Тип библиолтек
assets.download=Скачать библиотеки
assets.no_assets=Библиотеки не завершены, завершить их?
assets.failed_download=Не удалось загрузить библиотеки из-за этого может не быть никаких звуков и языковых файлов.
gamedownload.not_refreshed=Список игр не обновляется, пожалуйста, обновите его один раз.
taskwindow.title=Задачи
taskwindow.single_progress=Один прогресс
taskwindow.total_progress=Общий прогресс
taskwindow.cancel=Отменить
taskwindow.no_more_instance=Может быть, вы открыли больше чем одно окно задач, не открыть его снова!
taskwindow.file_name=Задача
taskwindow.download_progress=%.
setupwindow.include_minecraft=Импорт игры
setupwindow.find_in_configurations=Завершения импорта. Вы можете найти его в панели выбора конфигурации.
setupwindow.give_a_name=Дайте название новой игры.
setupwindow.new=Новое
setupwindow.no_empty_name=Название версии не может быть пустым.
setupwindow.clean=Чистые файлы игры
update.no_browser=Не может открыть любым браузером. Ссылка была скопирована в буфер обмена. Вставьте его в адресную строку браузера обновить.
update.should_open_link=Вы готовы обновить лаунчер?
update.newest_version=Самая новая версия:
update.failed=Не удалось проверить наличие обновлений.
update.found=(Нашел Обновление!)
logwindow.terminate_game=Завершить игру
logwindow.title=Лог
logwindow.contact=Свяжитесь с нами
logwindow.show_lines=Показать строки
logwindow.search=Поиск
selector.choose=Выбрать
serverlistview.title=Выбрать сервер
serverlistview.name=Название
serverlistview.type=Тип
serverlistview.version=Версия
serverlistview.info=Информация
minecraft.invalid=Invalid
minecraft.invalid_jar=Invalid Jar
minecraft.not_a_file=Not a file
minecraft.not_found=Not found
minecraft.not_readable=Not readable
minecraft.modified=(Modified!)
color.red=Красный
color.blue=Голубой
color.green=Зеленый
color.orange=Оранжевый
color.dark_blue=Темно-Синий
color.purple=Фиолетовый
wizard.next_>=Следующий >
wizard.next_mnemonic=N
wizard.<_prev=< Предыдущий
wizard.prev_mnemonic=P
wizard.finish=Завершить
wizard.finish_mnemonic=F
wizard.cancel=Отменить
wizard.cancel_mnemonic=C
wizard.help=Помощь
wizard.help_mnemonic=H
wizard.close=Закрыть
wizard.close_mnemonic=C
wizard.summary=Summary
wizard.failed=Failed
wizard.steps=Steps
lang=Русский
lang.default=Выбран язык операционной системы.
@@ -0,0 +1,440 @@
# Hello Minecraft! Launcher.
# Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see {http://www.gnu.org/licenses/}.
#
#author: malyha2014@yandex.ru
launch.failed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c.
launch.failed_creating_process=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0430\u0448 \u043f\u0443\u0442\u044c java - \u0443\u043a\u0430\u0437\u0430\u043d \u043d\u0435 \u0432\u0435\u0440\u043d\u043e, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0441\u0432\u043e\u0439 \u043f\u0443\u0442\u044c java.
launch.failed_sh_permission=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0430.
launch.failed_packing_jar=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432 jar.
launch.unsupported_launcher_version=\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, Launcher \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c minecraft, \u043d\u043e \u043e\u043d \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430.
launch.too_big_memory_alloc_64bit=\u0412\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f 32-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0439 \u041e\u0421 java \u0438\u0433\u0440\u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043a\u0440\u0430\u0448\u0443. \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u0438 1024\u041c\u0411. \u041b\u0430\u0443\u043d\u0447\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e.
launch.too_big_memory_alloc_free_space_too_low=\u0412\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 %dMB, \u0432\u0430\u0448\u0430 \u0438\u0433\u0440\u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043a\u0440\u0430\u0448\u0443. \u041b\u0430\u0443\u043d\u0447\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e.
launch.cannot_create_jvm=\u041c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c java \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430. \u0412 Java \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c No args \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445.
launch.circular_dependency_versions=\u041d\u0430\u0448\u043b\u0438 \u043a\u0440\u0443\u0433\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0435\u0441\u043b\u0438 \u0432\u0430\u0448 \u043a\u043b\u0438\u0435\u043d\u0442 \u0431\u044b\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d.
launch.not_finished_downloading_libraries=\u041d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a \u0438\u0433\u0440\u044b?
launch.not_finished_decompressing_natives=\u041d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a \u0438\u0433\u0440\u044b?
launch.wrong_javadir=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 java, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u043e\u0448\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043a\u0430\u0442\u0430\u043b\u043e\u0433 java.
launch.exited_abnormally=\u0418\u0433\u0440\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u043a\u0440\u0430\u0448\u0435\u043c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435 \u0436\u0443\u0440\u043d\u0430\u043b, \u0438\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043a\u043e\u0433\u043e-\u0442\u043e \u043e \u043f\u043e\u043c\u043e\u0449\u0438.
launch.state.logging_in=\u0412\u0445\u043e\u0434
launch.state.generating_launching_codes=\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430
launch.state.downloading_libraries=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439
launch.state.decompressing_natives=\u0422\u0443\u0437\u0435\u043c\u0446\u0435\u0432 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438
launch.state.waiting_launching=\u0416\u0434\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0433\u0440\u044b
install.no_version=\u0412\u0435\u0440\u0441\u0438\u044f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430.
install.no_version_if_intall=\u041d\u0443\u0436\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430, \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u0435\u0440\u0441\u0438\u044f?
install.not_refreshed=\u0421\u043f\u0438\u0441\u043e\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f.
install.download_list=\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a
install.liteloader.get_list=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a LiteLoader
install.liteloader.install=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c LiteLoader
install.forge.get_list=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a Forge
install.forge.install=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Forge
install.forge.get_changelogs=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 Forge
install.optifine.install=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c OptiFine
install.optifine.get_list=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c OptiFine \u043b\u0438\u0441\u0442
install.optifine.get_download_link=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 OptiFine
install.failed_forge=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c 'Forge'.
install.failed_optifine=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c 'OptiFine'.
install.failed_liteloader=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c 'LiteLoader'.
install.failed_download_forge=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043a\u0430\u0447\u0430\u0442\u044c 'Forge'.
install.failed_download_optifine=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043a\u0430\u0447\u0430\u0442\u044c 'OptiFine'.
install.failed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c
install.success=\u0423\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430
install.no_forge=\u041d\u0435\u0442\u0443 Forge
install.choose_forge=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Forge
install.version=\u0412\u0435\u0440\u0441\u0438\u044f
install.mcversion=\u0412\u0435\u0440\u0441\u0438\u044f \u0438\u0433\u0440\u044b
install.time=\u0412\u0440\u0435\u043c\u044f
install.release_time=\u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u0443\u0441\u043a\u0430
install.type=\u0422\u0438\u043f
install.please_refresh=\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c".
crash.launcher=\u041b\u0430\u0443\u043d\u0447\u0435\u0440 \u043a\u0440\u0430\u0448\u043d\u0443\u043b\u0441\u044f!
crash.minecraft=Minecraft \u043a\u0440\u0430\u0448\u043d\u0443\u043b\u0441\u044f!
login.choose_charactor=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0438\u043c\u0432\u043e\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435
login.no_charactor=\u041d\u0435\u0442 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u043d\u0430 \u044d\u0442\u043e\u043c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0435.
login.your_password=\u041f\u0430\u0440\u043e\u043b\u044c
login.failed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u043e\u0439\u0442\u0438
login.no_Player007=\u041d\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f!
login.wrong_password=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u0438\u043b\u0438 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
login.invalid_username=\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
login.invalid_uuid_and_username=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 UUID \u0438 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
login.invalid_password=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c
login.invalid_access_token=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u043c\u0430\u0440\u043a\u0435\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u0430
login.changed_client_token=\u041e\u0442\u0432\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u044b\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u043c\u0430\u0440\u043a\u0435\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.
login.not_email=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f-\u044d\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b.
login.type=\u041b\u043e\u0433\u0438\u043d
login.username=\u041d\u0438\u043a
login.account=\u041f\u043e\u0447\u0442\u0430
login.invalid_token=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0439\u0434\u0438\u0442\u0435 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443.
login.no_valid_character=\u041d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435 skinme.cc \u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430.
proxy.username=\u0410\u043a\u043a\u0430\u0443\u043d\u0442
proxy.password=\u041f\u0430\u0440\u043e\u043b\u044c
proxy.host=\u0425\u043e\u0441\u0442
proxy.port=\u041f\u043e\u0440\u0442
login.failed.connect_authentication_server=\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0430\u0448\u0443 \u0441\u0435\u0442\u044c.
login.profile.not_logged_in=\u0412\u044b \u043d\u0435 \u0432\u043e\u0448\u043b\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c!
login.profile.selected=\u041d\u0435 \u043c\u043e\u0433\u0443 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c, \u0432\u044b\u0439\u0434\u0438\u0442\u0435 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435.
login.methods.yggdrasil=Email \u0438 \u043f\u0430\u0440\u043e\u043b\u044c
login.methods.offline=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0432\u0430\u0448 \u043d\u0438\u043a
login.methods.no_method=\u041d\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0432\u0445\u043e\u0434\u0430
log.playername_null=\u041d\u0438\u043a \u0438\u0433\u0440\u043e\u043a\u0430 \u043f\u0443\u0441\u0442\u043e.
minecraft.no_selected_version=\u041d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 Minecraft \u0432\u0435\u0440\u0441\u0438\u044f
minecraft.wrong_path=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c Minecraft, \u043b\u0430\u0443\u043d\u0447\u0435\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u043f\u0443\u0442\u044c.
operation.stopped=\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043f\u0440\u0435\u0440\u0432\u0430\u043d\u0430.
operation.confirm_stop=\u041f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438?
ui.login.password=\u041f\u0430\u0440\u043e\u043b\u044c
ui.more=\u0411\u043e\u043b\u044c\u0448\u0435
crash.advice.UnsupportedClassVersionError=\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0432\u0430\u0448\u0430 \u0432\u0435\u0440\u0441\u0438\u044f java \u0441\u0442\u0430\u0440\u0430\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c java.
crash.advice.ConcurrentModificationException=\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0432\u0430\u0448 java \u043d\u043e\u0432\u0435\u0435, \u0447\u0435\u043c 1.8.0_11, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 Java 7.
crash.advice.ClassNotFoundException=Minecraft \u0438\u043b\u0438 \u043c\u043e\u0434\u044b, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u043c\u0438. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u043a\u0430\u0447\u0430\u043b\u0438 \u0438\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0433\u0440\u0443 \u0438 \u043c\u043e\u0434\u043e\u0432! \u0418\u043b\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0433\u0440\u044b -> \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (\u0432\u0435\u0440\u0441\u0438\u0438) -> \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.
crash.advice.NoSuchFieldError=Minecraft \u0438\u043b\u0438 \u043c\u043e\u0434\u044b, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u043c\u0438. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u043a\u0430\u0447\u0430\u043b\u0438 \u0438\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0433\u0440\u0443 \u0438 \u043c\u043e\u0434\u044b!
crash.advice.LWJGLException=\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0432\u0430\u0448 \u0432\u0438\u0434\u0435\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0432\u0430\u0448 \u0432\u0438\u0434\u0435\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440.
crash.advice.SecurityException=\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0432\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 minecraft.jar \u043d\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u043b\u0438 META-INF.
crash.advice.OutOfMemoryError=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f JVM \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0435\u0433\u043e.
crash.advice.otherwise=\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u043e\u0434\u044b \u0432\u044b\u0437\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.
crash.advice.OpenGL=\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0432\u044b\u0437\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.
crash.advice.no_lwjgl=\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0432\u044b\u0437\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.
crash.advice.no=\u041d\u0438\u043a\u0430\u043a\u0438\u0435 \u0441\u043e\u0432\u0435\u0442\u044b.
crash.user_fault=\u0412\u0430\u0448\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u043b\u0438 \u0441\u0440\u0435\u0434\u044b Java \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0431\u043e\u0439 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0430\u0448\u0443 \u0441\u0440\u0435\u0434\u0443 Java \u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440!
crash.headless=\u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 \u041e\u0421 Linux \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Oracle \u0432\u0435\u0440\u0441\u0438\u0438 JDK \u0432\u043c\u0435\u0441\u0442\u043e OpenJDK, \u0442\u043e \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c "-Djava.awt.headless=false" \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 JVM, \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e.
crash.NoClassDefFound=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 "Launcher" \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435.
crash.error=Minecraft \u043a\u0440\u0430\u0448\u043d\u0443\u043b\u0441\u044f.
crash.main_class_not_found=\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u041a\u043b\u0430\u0441\u0441 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0430\u0448 \u041c\u041a \u0431\u044b\u043b \u043d\u0430\u0440\u0443\u0448\u0435\u043d.
crash.class_path_wrong=\u041c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439.
ui.label.newProfileWindow.new_profile_name=\u041d\u043e\u0432\u043e\u0435 \u0418\u043c\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f:
ui.label.newProfileWindow.copy_from=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437:
ui.newProfileWindow.title=\u041d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433
ui.button.ok=OK
ui.button.refresh=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c
ui.button.run=\u0412\u043e\u0439\u0442\u0438 \u0432 \u0438\u0433\u0440\u0443
ui.button.settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
ui.button.about=About
ui.button.others=\u0414\u0440\u0443\u0433\u0438\u0435
ui.button.logout=\u0412\u044b\u0439\u0442\u0438
ui.button.download=\u0421\u043a\u0430\u0447\u0430\u0442\u044c
ui.button.retry=\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c
ui.button.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
ui.button.install=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c
ui.button.info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
ui.button.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
ui.button.copy=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c
ui.button.clear=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c
ui.button.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c
ui.button.explore=\u0412\u044b\u0431\u0440\u0430\u0442\u044c
ui.button.test=\u0422\u0435\u0441\u0442
ui.button.preview=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c
button.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
button.ok=OK
button.yes=\u0414\u0430
button.no=\u041d\u0435\u0442
ui.label.version=\u0412\u0435\u0440\u0441\u0438\u044f
ui.label.password=\u041f\u0430\u0440\u043e\u043b\u044c
ui.label.profile=\u041f\u0440\u043e\u0444\u0438\u043b\u044c
ui.message.first_load=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432\u0430\u0448 \u043d\u0438\u043a.
ui.message.enter_password=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0412\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c.
ui.message.launching=\u0417\u0430\u043f\u0443\u0441\u043a...
ui.message.making=\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f...
ui.message.sure_remove=\u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c %s?
ui.message.update_java=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0432\u0430\u0448 Java.
ui.message.open_jdk=\u041c\u044b \u0443\u0436\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0432\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f OpenJDK, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u0441\u0442\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0435\u0434 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u041c\u044b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0412\u0430\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Oracle \u0432\u0435\u0440\u0441\u0438\u0438 JDK.
ui.label.settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
ui.label.crashing=<html>Launcher \u043a\u0440\u0430\u0448\u043d\u0443\u043b\u0441\u044f!</html>
ui.label.crashing_out_dated=<html>Launcher \u043a\u0440\u0430\u0448\u043d\u0443\u043b\u0441\u044f! \u0412\u0430\u0448 \u043b\u0430\u0443\u043d\u0447\u0435\u0440 \u0443\u0441\u0442\u0430\u0440\u0435\u043b. \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e</html>
ui.label.failed_set=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c:
download=\u0421\u043a\u0430\u0447\u0430\u0442\u044c
download.mojang=Mojang
download.BMCL=BMCLAPI (bangbang93, http://bmclapi.bangbang93.com/)
download.rapid_data=RapidData (https://www.rapiddata.org/)
download.not_200=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043a\u0430\u0447\u0430\u0442\u044c, \u043a\u043e\u0434 \u043e\u0442\u0432\u0435\u0442\u0430
download.failed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043a\u0430\u0447\u0430\u0442\u044c
download.successfully=\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u043b
download.source=\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a
message.error=\u041e\u0448\u0438\u0431\u043a\u0430
message.cannot_open_explorer=\u041d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a:
message.cancelled=\u041e\u0442\u043c\u0435\u043d\u0435\u043d
message.info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
message.loading=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430...
folder.game=\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f
folder.mod=\u041c\u043e\u0434\u044b
folder.coremod=\u042f\u0434\u0440\u043e
folder.config=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438
folder.resourcepacks=\u0420\u0435\u0441\u0443\u0440\u0441 \u043f\u0430\u043a
folder.screenshots=\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b
folder.saves=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
settings.tabs.game_download=\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438\u0433\u0440\u0443
settings.tabs.installers=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a
settings.tabs.assets_downloads=\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f
settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
settings.explore=\u041e\u0431\u0437\u043e\u0440...
settings.manage=\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c
settings.cannot_remove_default_config=\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.
settings.max_memory=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438
settings.java_dir=\u041f\u0443\u0442\u044c \u043a Java
settings.game_directory=\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f
settings.dimension=\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435
settings.fullscreen=\u041f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c
settings.update_version=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json.
settings.run_directory=\u0412\u044b\u0431\u043e\u0440 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430
settings.physical_memory=\u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438
settings.choose_javapath=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 Java.
settings.default=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
settings.custom=\u0412\u044b\u0431\u0440\u0430\u0442\u044c
settings.choose_gamedir=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0438\u0433\u0440\u044b
settings.failed_load=\u041d\u0435 \u0441\u043c\u043e\u0433 \u0444\u0430\u0439\u043b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0433\u043e?
settings.test_game=\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0438\u0433\u0440\u0430
settings.type.none=\u041d\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0433\u0440\u044b, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438\u0433\u0440\u0443.
settings.type.global=<html><a href="">\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439. \u0421\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430.</a></html>
settings.type.special=<html><a href="">\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u041d\u0435 \u044d\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445.</a></html>
modpack=\u041c\u043e\u0434 \u043f\u0430\u043a
modpack.choose=\u0412\u044b\u0431\u0440\u0430\u0442\u044c zip-\u0444\u0430\u0439\u043b, \u043f\u0430\u043a\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u044e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c.
modpack.export_error=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0424\u043e\u0440\u043c\u0430\u0442 \u0432\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438\u043b\u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438.
modpack.export_finished=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u0433\u043e\u0442\u043e\u0432\u044b\u0435. \u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c
modpack.included_launcher=\u0412 \u043f\u0430\u043a\u0435\u0442 \u0432\u0445\u043e\u0434\u0438\u0442 \u043f\u0443\u0441\u043a\u043e\u0432\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u0440\u0430\u0437\u0443.
modpack.not_included_launcher=\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442, \u043d\u0430\u0436\u0430\u0432 \u043a\u043d\u043e\u043f\u043a\u0443 "\u0418\u043c\u043f\u043e\u0440\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439".
modpack.enter_name=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0438\u0433\u0440\u044b.
modpack.task.save=\u042d\u0441\u043a\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c Modpack
modpack.task.install=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c Modpack
modpack.task.install.error=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0444\u0430\u0439\u043b\u044b \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0438\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.
modpack.task.install.will=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442:
modpack.wizard=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 modpack \u043c\u0430\u0441\u0442\u0435\u0440
modpack.wizard.step.1=\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b
modpack.wizard.step.1.title=\u041d\u0430\u0431\u043e\u0440 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 modpack.
modpack.wizard.step.initialization.include_launcher=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u0430\u0443\u043d\u0447\u0435\u0440
modpack.wizard.step.initialization.exported_version=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0433\u0440\u044b
modpack.wizard.step.initialization.save=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u043f\u043a\u0443 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f
modpack.wizard.step.initialization.warning=<html>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c modpack, \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0430\u0448\u0430 \u0438\u0433\u0440\u0430 \u0441\u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c,<br/>\u0438 \u0447\u0442\u043e \u0432\u0430\u0448 minecraft-\u044d\u0442\u043e \u0440\u0435\u043b\u0438\u0437, \u0430 \u043d\u0435 \u0441\u043d\u0438\u043c\u043e\u043a.<br/>\u0430 \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0438 \u0440\u0430\u0437\u0434\u0430\u0432\u0430\u0442\u044c modpack.</html>
modpack.wizard.step.2=\u0412\u044b\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432
modpack.wizard.step.2.title=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0412\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432 modpack.
modpack.wizard.step.3=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
modpack.wizard.step.3.title=\u041e\u043f\u0438\u0448\u0438\u0442\u0435 \u0432\u0430\u0448 modpack.
modpack.desc=\u041e\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u044e modpack, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043c\u0435\u0440\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u0438, changlog, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044f \u0443\u0446\u0435\u043d\u043a\u0438(\u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438).
modpack.incorrect_format.no_json=\u0424\u043e\u0440\u043c\u0430\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u043c, \u043f\u0430\u043a\u0435\u0442.json-\u044d\u0442\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.
modpack.incorrect_format.no_jar=\u0424\u043e\u0440\u043c\u0430\u0442 modpack \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043f\u0430\u043a\u0435\u0442.json \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 '\u0431\u0430\u043d\u043a\u0443'
modpack.cannot_read_version=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0433\u0440\u044b
modpack.not_a_valid_location=\u041d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c modpack \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
modpack.name=Modpack \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435
modpack.not_a_valid_name=\u041d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c modpack \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435
modpack.files.servers_dat=\u0421\u043f\u0438\u0441\u043e\u043a \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432
modpack.files.saves=\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0438\u0433\u0440\u044b
modpack.files.mods=\u041c\u043e\u0434\u044b
modpack.files.config=Mod \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438
modpack.files.liteconfig=Mod \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438
modpack.files.resourcepacks=\u0420\u0435\u0441\u0443\u0440\u0441(\u0442\u0435\u043a\u0441\u0442\u0443\u0440) \u043f\u0430\u043a\u0438
modpack.files.options_txt=\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438\u0433\u0440\u044b
modpack.files.optionsshaders_txt=\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0448\u0435\u0439\u0434\u0435\u0440\u044b
modpack.files.mods.voxelmods=VoxelMods (\u0432\u043a\u043b\u044e\u0447\u0430\u044f VoxelMap) \u0444\u0443\u043d\u043a\u0446\u0438\u0438
modpack.files.dumps=NEI \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434
modpack.files.scripts=MineTweaker \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438
modpack.files.blueprints=BuildCraft \u0447\u0435\u0440\u0442\u0435\u0436\u0438
mods=\u041c\u043e\u0434\u044b
mods.choose_mod=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u043c\u043e\u0434\u044b
mods.failed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u044b
mods.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c
mods.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
mods.default_information=<html><font color=#c0392b>\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Forge \u0438\u043b\u0438 LiteLoader \u043f\u0435\u0440\u0435\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u043c\u043e\u0434\u043e\u0432!<br>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439 mod \u0444\u0430\u0439\u043b \u0438\u0437 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a\u0430/Finder \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043d\u043e\u043f\u043a\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c.<br>\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0434, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0444\u043b\u0430\u0436\u043e\u043a \u0441\u043d\u044f\u0442; \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u0432\u0430\u0440, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.</font></html>
advancedsettings=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439
advancedsettings.launcher_visible=\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 Minecraft
advancedsettings.debug_mode=\u0420\u0435\u0436\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0438
advancedsettings.java_permanent_generation_space=PermGen Space/MB
advancedsettings.jvm_args=Java VM \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b
advancedsettings.Minecraft_arguments=Minecraft \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b
advancedsettings.launcher_visibility.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u043b\u0430\u0443\u043d\u0447\u0435\u0440, \u0435\u0441\u043b\u0438 \u0438\u0433\u0440\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430.
advancedsettings.launcher_visibility.hide=\u0421\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043b\u0430\u0443\u043d\u0447\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0438\u0433\u0440\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430.
advancedsettings.launcher_visibility.keep=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043b\u0430\u0443\u043d\u0447\u0435\u0440 \u0432\u0438\u0434\u0438\u043c\u044b\u043c.
advancedsettings.launcher_visibility.hide_reopen=\u0421\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043b\u0430\u0443\u043d\u0447\u0435\u0440 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0439\u0434\u0438\u0442\u0435 \u0438\u0437 \u0438\u0433\u0440\u044b.
advancedsettings.game_dir.default=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (.minecraft/)
advancedsettings.game_dir.independent=\u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 (.minecraft/\u0432\u0435\u0440\u0441\u0438\u0438/<\u043d\u043e\u043c\u0435\u0440 \u0432\u0435\u0440\u0441\u0438\u0438>/, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0430\u043a\u0442\u0438\u0432\u043e\u0432,\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438)
advancedsettings.no_jvm_args=No Default JVM Args
advancedsettings.no_common=\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u043f\u0443\u0442\u044c
advancedsettings.java_args_default=Default java args: -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -XX:MaxPermSize=???m -Xmx???m -Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true
advancedsettings.wrapper_launcher=\u041b\u0430\u0443\u043d\u0447\u0435\u0440-\u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0443(\u043a\u0430\u043a \u0438 optirun...)
advancedsettings.precall_command=\u041a\u043e\u043c\u0430\u043d\u0434\u0430 Precalling(\u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0433\u0440\u044b)
advancedsettings.server_ip=\u0421\u0435\u0440\u0432\u0435\u0440\u0430
advancedsettings.cancel_wrapper_launcher=\u041e\u0442\u043c\u0435\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438
advancedsettings.dont_check_game_completeness=\u041d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0442\u0443 \u0438\u0433\u0440\u044b
mainwindow.show_log=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u041b\u043e\u0433\u0438
mainwindow.make_launch_script=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0430.
mainwindow.make_launch_script_failed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442.
mainwindow.enter_script_name=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043c\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430.
mainwindow.make_launch_succeed=\u0417\u0430\u043a\u043e\u043d\u0447\u0438\u043b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.
mainwindow.no_version=\u0412\u0435\u0440\u0441\u0438\u0438 Minecraft \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u0432 Minecraft?
launcher.about=<html>\u041e\u0431 \u0410\u0432\u0442\u043e\u0440\u0435<br/>\u041c\u0430\u0439\u043d\u043a\u0440\u0430\u0444\u0442 \u0444\u043e\u0440\u0443\u043c ID: klkl6523<br/>Copyright (c) 2013 huangyuhui<br/>Opened source under GPL v3 license:http://github.com/huanghongxun/HMCL/<br/>This software used project Gson which is under Apache License 2.0, thanks contributors.</html>
launcher.download_source=\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438
launcher.background_location=\u0424\u043e\u043d \u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
launcher.common_location=\u041e\u0431\u0449\u0435\u0435 \u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
launcher.exit_failed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u044c.
launcher.versions_json_not_matched=\u0412\u0435\u0440\u0441\u0438\u044f %s \u0443\u0440\u043e\u0434\u043b\u0438\u0432! \u0415\u0441\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json:%s \u0432 \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0425\u043e\u0442\u0438\u0442\u0435 \u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443?
launcher.versions_json_not_matched_cannot_auto_completion=\u0412\u0435\u0440\u0441\u0438\u044f %s \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0444\u0430\u0439\u043b\u0430, \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0433\u043e?
launcher.versions_json_not_formatted=\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0432\u0435\u0440\u0441\u0438\u0438 %s \u0443\u0440\u043e\u0434\u043b\u0438\u0432! \u041f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430?
launcher.choose_bgpath=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u0443\u0442\u0438.
launcher.choose_commonpath=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u043f\u0443\u0442\u044c.
launcher.commpath_tooltip=<html><body>\u042d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432\u0441\u0435 \u0438\u0433\u0440\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0437\u0434\u0435\u0441\u044c, \u0435\u0441\u043b\u0438 \u0442\u0430\u043c \u043d\u0435\u0442 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 \u0438\u0433\u0440\u043e\u0439.</body></html>
launcher.background_tooltip=<html><body>\u041b\u0430\u0443\u0447\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0444\u043e\u043d.<br/>\u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0444\u043e\u043d.PNG, \u0441\u0441\u044b\u043b\u043a\u0443 \u0438 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<br />\u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c "\u0411\u0413" \u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432 "bgskin" \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e.<br />\u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0444\u043e\u043d, \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e.</body></html>
launcher.update_launcher=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f
launcher.enable_shadow=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0435\u043d\u044c \u043e\u043a\u043d\u0430
launcher.enable_animation=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e
launcher.enable_blur=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435
launcher.theme=\u0422\u0435\u043c\u0430
launcher.proxy=\u041f\u0440\u043e\u043a\u0441\u0438
launcher.decorated=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043e\u043a\u043d\u0430(\u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u0435\u0440\u043e\u0435 \u0432 \u041e\u0421 Linux)
launcher.modpack=<html><a href="http://blog.163.com/huanghongxun2008@126/blog/static/7738046920160323812771/">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e modpacks.</a></html>
launcher.lang=\u042f\u0437\u044b\u043a (Language)
launcher.restart=\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.
launcher.log_font=\u0428\u0440\u0438\u0444\u0442 \u043b\u043e\u0433\u0430
launcher.tab.general=\u041e\u0431\u0449\u0438\u0435
launcher.tab.ui=\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441
launcher.tab.about=\u0412\u0435\u0440\u0441\u0438\u044f
launcher.title.game=\u0418\u0433\u0440\u044b
launcher.title.main=\u0413\u043b\u0430\u0432\u043d\u0430\u044f
launcher.title.launcher=\u041b\u0430\u0443\u043d\u0447\u0435\u0440
versions.release=Release
versions.snapshot=Snapshot
versions.old_beta=Beta
versions.old_alpha=Old Alpha
versions.manage.rename=\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u044e
versions.manage.rename.message=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043d\u0438\u043a
versions.manage.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e
versions.manage.remove.confirm=\u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e
versions.manage.redownload_json=\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432 Minecraft(minecraft.json)
versions.manage.redownload_assets_index=\u041f\u0435\u0440\u0435\u043a\u0430\u0447\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438
versions.mamage.remove_libraries=\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b
advice.os64butjdk32=\u0412\u0430\u0448\u0430 \u041e\u0421 64-\u0431\u0438\u0442\u043d\u0430\u044f, \u043d\u043e \u0432\u0430\u0448 java \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 32-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0439. \u0412\u0430\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f 64-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f java.
advice.java8=Java 8 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043b, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439. \u041c\u043d\u043e\u0433\u0438\u0435 \u043c\u043e\u0434\u044b \u0438 Minecraft 1.12 \u0438 \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 java 8.
assets.download_all=\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0424\u0430\u0439\u043b\u044b
assets.not_refreshed=\u0421\u043f\u0438\u0441\u043e\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437.
assets.failed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.
assets.list.1_7_3_after=1.7.3 \u0438 \u0432\u044b\u0448\u0435
assets.list.1_6=1.6(BMCLAPI)
assets.unkown_type_select_one=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0438\u0433\u0440\u044b: %s, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.
assets.type=\u0422\u0438\u043f \u0431\u0438\u0431\u043b\u0438\u043e\u043b\u0442\u0435\u043a
assets.download=\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438
assets.no_assets=\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b, \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0438\u0445?
assets.failed_download=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0437\u0432\u0443\u043a\u043e\u0432 \u0438 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.
gamedownload.not_refreshed=\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0433\u0440 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437.
taskwindow.title=\u0417\u0430\u0434\u0430\u0447\u0438
taskwindow.single_progress=\u041e\u0434\u0438\u043d \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441
taskwindow.total_progress=\u041e\u0431\u0449\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441
taskwindow.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
taskwindow.no_more_instance=\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0432\u044b \u043e\u0442\u043a\u0440\u044b\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u043e\u0434\u043d\u043e \u043e\u043a\u043d\u043e \u0437\u0430\u0434\u0430\u0447, \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0435\u0433\u043e \u0441\u043d\u043e\u0432\u0430!
taskwindow.file_name=\u0417\u0430\u0434\u0430\u0447\u0430
taskwindow.download_progress=%.
setupwindow.include_minecraft=\u0418\u043c\u043f\u043e\u0440\u0442 \u0438\u0433\u0440\u044b
setupwindow.find_in_configurations=\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0435\u0433\u043e \u0432 \u043f\u0430\u043d\u0435\u043b\u0438 \u0432\u044b\u0431\u043e\u0440\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.
setupwindow.give_a_name=\u0414\u0430\u0439\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0438\u0433\u0440\u044b.
setupwindow.new=\u041d\u043e\u0432\u043e\u0435
setupwindow.no_empty_name=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c.
setupwindow.clean=\u0427\u0438\u0441\u0442\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u0433\u0440\u044b
update.no_browser=\u041d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c. \u0421\u0441\u044b\u043b\u043a\u0430 \u0431\u044b\u043b\u0430 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0430. \u0412\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0435\u0433\u043e \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c.
update.should_open_link=\u0412\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043b\u0430\u0443\u043d\u0447\u0435\u0440?
update.newest_version=\u0421\u0430\u043c\u0430\u044f \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f:
update.failed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439.
update.found=(\u041d\u0430\u0448\u0435\u043b \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435!)
logwindow.terminate_game=\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0438\u0433\u0440\u0443
logwindow.title=\u041b\u043e\u0433
logwindow.contact=\u0421\u0432\u044f\u0436\u0438\u0442\u0435\u0441\u044c \u0441 \u043d\u0430\u043c\u0438
logwindow.show_lines=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438
logwindow.search=\u041f\u043e\u0438\u0441\u043a
selector.choose=\u0412\u044b\u0431\u0440\u0430\u0442\u044c
serverlistview.title=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440
serverlistview.name=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435
serverlistview.type=\u0422\u0438\u043f
serverlistview.version=\u0412\u0435\u0440\u0441\u0438\u044f
serverlistview.info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
minecraft.invalid=Invalid
minecraft.invalid_jar=Invalid Jar
minecraft.not_a_file=Not a file
minecraft.not_found=Not found
minecraft.not_readable=Not readable
minecraft.modified=(Modified!)
color.red=\u041a\u0440\u0430\u0441\u043d\u044b\u0439
color.blue=\u0413\u043e\u043b\u0443\u0431\u043e\u0439
color.green=\u0417\u0435\u043b\u0435\u043d\u044b\u0439
color.orange=\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439
color.dark_blue=\u0422\u0435\u043c\u043d\u043e-\u0421\u0438\u043d\u0438\u0439
color.purple=\u0424\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439
wizard.next_>=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 >
wizard.next_mnemonic=N
wizard.<_prev=< \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439
wizard.prev_mnemonic=P
wizard.finish=\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c
wizard.finish_mnemonic=F
wizard.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
wizard.cancel_mnemonic=C
wizard.help=\u041f\u043e\u043c\u043e\u0449\u044c
wizard.help_mnemonic=H
wizard.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c
wizard.close_mnemonic=C
wizard.summary=Summary
wizard.failed=Failed
wizard.steps=Steps
lang=\u0420\u0443\u0441\u0441\u043a\u0438\u0439
lang.default=\u0412\u044b\u0431\u0440\u0430\u043d \u044f\u0437\u044b\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.
@@ -158,6 +158,8 @@ ui.button.test=Test
ui.button.preview=Xem trước
button.cancel=Thoát
button.ok=OK
button.yes=Yes
button.no=No
ui.label.version=Phiên bản
ui.label.password=Mật khẩu
@@ -222,6 +224,7 @@ settings.choose_gamedir=Chọn thư mục game
settings.failed_load=Đọc file cấu hình thất bại. Xóa nó không?
settings.test_game=Chạy thử game
settings.type.none=No version here, please turn to game download tab.
settings.type.global=<html><a href="">Click here to switch to version specialized setting. Now it is global setting.</a></html>
settings.type.special=<html><a href="">Click here to switch to global setting. Not it is version specialized setting.</a></html>
@@ -158,6 +158,8 @@ ui.button.test=Test
ui.button.preview=Xem tr\u01b0\u1edbc
button.cancel=Tho\u00e1t
button.ok=OK
button.yes=Yes
button.no=No
ui.label.version=Phi\u00ean b\u1ea3n
ui.label.password=M\u1eadt kh\u1ea9u
@@ -222,6 +224,7 @@ settings.choose_gamedir=Ch\u1ecdn th\u01b0 m\u1ee5c game
settings.failed_load=\u0110\u1ecdc file c\u1ea5u h\u00ecnh th\u1ea5t b\u1ea1i. X\u00f3a n\u00f3 kh\u00f4ng?
settings.test_game=Ch\u1ea1y th\u1eed game
settings.type.none=No version here, please turn to game download tab.
settings.type.global=<html><a href="">Click here to switch to version specialized setting. Now it is global setting.</a></html>
settings.type.special=<html><a href="">Click here to switch to global setting. Not it is version specialized setting.</a></html>
@@ -160,6 +160,8 @@ ui.button.test=測試
ui.button.preview=預覽
button.cancel=取消
button.ok=確定
button.yes=是
button.no=不
ui.label.version=版本
ui.label.password=密碼
@@ -224,6 +226,7 @@ settings.choose_gamedir=選擇遊戲路徑
settings.failed_load=設定資料加載失敗,可能是升級了啟動器或被人工修改造成錯誤,是否清除?
settings.test_game=測試遊戲
settings.type.none=缺少游戲版本,請切換到遊戲下載頁下載遊戲
settings.type.global=<html><a href="">點擊此處切換為版本特定設定。該版本正在使用全局設定,修改以下設定會影響到其他使用全局設定的版本</a></html>
settings.type.special=<html><a href="">點擊此處切換為全局設定。該版本正在使用版本特定設定,修改以下設定不會影響到其他版本設定</a></html>
@@ -160,6 +160,8 @@ ui.button.test=\u6e2c\u8a66
ui.button.preview=\u9810\u89bd
button.cancel=\u53d6\u6d88
button.ok=\u78ba\u5b9a
button.yes=\u662f
button.no=\u4e0d
ui.label.version=\u7248\u672c
ui.label.password=\u5bc6\u78bc
@@ -224,6 +226,7 @@ settings.choose_gamedir=\u9078\u64c7\u904a\u6232\u8def\u5f91
settings.failed_load=\u8a2d\u5b9a\u8cc7\u6599\u52a0\u8f09\u5931\u6557\uff0c\u53ef\u80fd\u662f\u5347\u7d1a\u4e86\u555f\u52d5\u5668\u6216\u88ab\u4eba\u5de5\u4fee\u6539\u9020\u6210\u932f\u8aa4\uff0c\u662f\u5426\u6e05\u9664\uff1f
settings.test_game=\u6e2c\u8a66\u904a\u6232
settings.type.none=\u7f3a\u5c11\u6e38\u6232\u7248\u672c\uff0c\u8acb\u5207\u63db\u5230\u904a\u6232\u4e0b\u8f09\u9801\u4e0b\u8f09\u904a\u6232
settings.type.global=<html><a href="">\u9ede\u64ca\u6b64\u8655\u5207\u63db\u70ba\u7248\u672c\u7279\u5b9a\u8a2d\u5b9a\u3002\u8a72\u7248\u672c\u6b63\u5728\u4f7f\u7528\u5168\u5c40\u8a2d\u5b9a\uff0c\u4fee\u6539\u4ee5\u4e0b\u8a2d\u5b9a\u6703\u5f71\u97ff\u5230\u5176\u4ed6\u4f7f\u7528\u5168\u5c40\u8a2d\u5b9a\u7684\u7248\u672c</a></html>
settings.type.special=<html><a href="">\u9ede\u64ca\u6b64\u8655\u5207\u63db\u70ba\u5168\u5c40\u8a2d\u5b9a\u3002\u8a72\u7248\u672c\u6b63\u5728\u4f7f\u7528\u7248\u672c\u7279\u5b9a\u8a2d\u5b9a\uff0c\u4fee\u6539\u4ee5\u4e0b\u8a2d\u5b9a\u4e0d\u6703\u5f71\u97ff\u5230\u5176\u4ed6\u7248\u672c\u8a2d\u5b9a</a></html>
@@ -160,6 +160,8 @@ ui.button.test=测试
ui.button.preview=预览
button.cancel=取消
button.ok=确定
button.yes=是
button.no=不
ui.label.version=版本
ui.label.password=密码
@@ -224,6 +226,7 @@ settings.choose_gamedir=选择游戏路径
settings.failed_load=设置文件加载失败,可能是升级了启动器或被人工修改造成错误,是否清除?
settings.test_game=测试游戏
settings.type.none=缺少游戏版本,请切换到游戏下载页下载游戏
settings.type.global=<html><a href="">点击此处切换为版本特定设置。该版本正在使用全局设置,修改以下设置会影响到其他使用全局设置的版本</a></html>
settings.type.special=<html><a href="">点击此处切换为全局设置。该版本正在使用版本特定设置,修改以下设置不会影响到其他版本设置</a></html>
@@ -160,6 +160,8 @@ ui.button.test=\u6d4b\u8bd5
ui.button.preview=\u9884\u89c8
button.cancel=\u53d6\u6d88
button.ok=\u786e\u5b9a
button.yes=\u662f
button.no=\u4e0d
ui.label.version=\u7248\u672c
ui.label.password=\u5bc6\u7801
@@ -224,6 +226,7 @@ settings.choose_gamedir=\u9009\u62e9\u6e38\u620f\u8def\u5f84
settings.failed_load=\u8bbe\u7f6e\u6587\u4ef6\u52a0\u8f7d\u5931\u8d25\uff0c\u53ef\u80fd\u662f\u5347\u7ea7\u4e86\u542f\u52a8\u5668\u6216\u88ab\u4eba\u5de5\u4fee\u6539\u9020\u6210\u9519\u8bef\uff0c\u662f\u5426\u6e05\u9664\uff1f
settings.test_game=\u6d4b\u8bd5\u6e38\u620f
settings.type.none=\u7f3a\u5c11\u6e38\u620f\u7248\u672c\uff0c\u8bf7\u5207\u6362\u5230\u6e38\u620f\u4e0b\u8f7d\u9875\u4e0b\u8f7d\u6e38\u620f
settings.type.global=<html><a href="">\u70b9\u51fb\u6b64\u5904\u5207\u6362\u4e3a\u7248\u672c\u7279\u5b9a\u8bbe\u7f6e\u3002\u8be5\u7248\u672c\u6b63\u5728\u4f7f\u7528\u5168\u5c40\u8bbe\u7f6e\uff0c\u4fee\u6539\u4ee5\u4e0b\u8bbe\u7f6e\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u4f7f\u7528\u5168\u5c40\u8bbe\u7f6e\u7684\u7248\u672c</a></html>
settings.type.special=<html><a href="">\u70b9\u51fb\u6b64\u5904\u5207\u6362\u4e3a\u5168\u5c40\u8bbe\u7f6e\u3002\u8be5\u7248\u672c\u6b63\u5728\u4f7f\u7528\u7248\u672c\u7279\u5b9a\u8bbe\u7f6e\uff0c\u4fee\u6539\u4ee5\u4e0b\u8bbe\u7f6e\u4e0d\u4f1a\u5f71\u54cd\u5230\u5176\u4ed6\u7248\u672c\u8bbe\u7f6e</a></html>