add some localization items

This commit is contained in:
huangyuhui
2016-01-23 18:04:30 +08:00
parent 08301bed8d
commit 3bdaaddcd8
31 changed files with 512 additions and 947 deletions

View File

@@ -23,16 +23,14 @@ import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.UIManager;
import org.jackhuang.hellominecraft.utils.C;
import org.jackhuang.hellominecraft.utils.views.wizard.api.WizardDisplayer;
import org.jackhuang.hellominecraft.utils.views.wizard.modules.MergeMap;
import org.jackhuang.hellominecraft.utils.views.wizard.modules.NbBridge;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.DeferredWizardResult;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.Summary;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.Wizard;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.WizardException;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.WizardObserver;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.WizardPage;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.WizardPanel;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.WizardPanelNavResult;
@@ -84,9 +82,6 @@ public class NavButtonManager implements ActionListener {
WizardDisplayerImpl parent;
String closeString = NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Close"); // NOI18N
boolean suppressMessageDialog = false;
/**
* Deferred status of not null means we are waiting for a deferred result to
@@ -102,44 +97,28 @@ public class NavButtonManager implements ActionListener {
protected void buildButtons(Action helpAction) {
next = new JButton(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Next_>")); // NOI18N
next = new JButton(C.i18n("wizard.next_>"));
next.setName(NAME_NEXT);
next.setMnemonic(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Next_mnemonic").charAt(0)); // NOI18N
next.setMnemonic(C.i18n("wizard.next_mnemonic").charAt(0));
prev = new JButton(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "<_Prev")); // NOI18N
prev = new JButton(C.i18n("wizard.<_prev"));
prev.setName(NAME_PREV);
prev.setMnemonic(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Prev_mnemonic").charAt(0)); // NOI18N
prev.setMnemonic(C.i18n("wizard.prev_mnemonic").charAt(0));
finish = new JButton(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Finish")); // NOI18N
finish = new JButton(C.i18n("wizard.finish")); // NOI18N
finish.setName(NAME_FINISH);
finish.setMnemonic(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Finish_mnemonic").charAt(0)); // NOI18N
finish.setMnemonic(C.i18n("wizard.finish_mnemonic").charAt(0));
cancel = new JButton(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Cancel")); // NOI18N
cancel = new JButton(C.i18n("wizard.cancel"));
cancel.setName(NAME_CANCEL);
cancel.setMnemonic(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Cancel_mnemonic").charAt(0)); // NOI18N
cancel.setMnemonic(C.i18n("wizard.cancel_mnemonic").charAt(0));
help = new JButton();
if (helpAction != null) {
if (helpAction != null)
help.setAction(helpAction);
if (helpAction.getValue(Action.NAME) == null) {
help.setText(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Help")); // NOI18N
help.setMnemonic(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Help_mnemonic").charAt(0)); // NOI18N
}
} else {
help.setText(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Help")); // NOI18N
help.setMnemonic(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Help_mnemonic").charAt(0)); // NOI18N
if (helpAction == null || helpAction.getValue(Action.NAME) == null) {
help.setText(C.i18n("wizard.help"));
help.setMnemonic(C.i18n("wizard.help_mnemonic").charAt(0));
}
next.setDefaultCapable(true);
@@ -224,24 +203,20 @@ public class NavButtonManager implements ActionListener {
final boolean enableNext = nextStep != null && canContinue && problem == null && !isDeferredResult;
final boolean enablePrevious = wizard.getPreviousStep() != null && !isDeferredResult;
final Runnable runnable = new Runnable() {
public void run() {
next.setEnabled(enableNext);
prev.setEnabled(enablePrevious);
finish.setEnabled(enableFinish);
JRootPane root = next.getRootPane();
if (root != null)
if (next.isEnabled())
root.setDefaultButton(next);
else if (finish.isEnabled())
root.setDefaultButton(finish);
else if (prev.isEnabled())
root.setDefaultButton(prev);
else
root.setDefaultButton(null);
}
final Runnable runnable = () -> {
next.setEnabled(enableNext);
prev.setEnabled(enablePrevious);
finish.setEnabled(enableFinish);
JRootPane root = next.getRootPane();
if (root != null)
if (next.isEnabled())
root.setDefaultButton(next);
else if (finish.isEnabled())
root.setDefaultButton(finish);
else if (prev.isEnabled())
root.setDefaultButton(prev);
else
root.setDefaultButton(null);
};
if (EventQueue.isDispatchThread())
@@ -268,34 +243,42 @@ public class NavButtonManager implements ActionListener {
return;
}
if (NAME_NEXT.equals(name))
processNext();
else if (NAME_PREV.equals(name))
processPrev();
else if (NAME_FINISH.equals(name))
processFinish(event);
else if (NAME_CLOSE.equals(name))
processClose(event);
if (null != name)
switch (name) {
case NAME_NEXT:
processNext();
break;
case NAME_PREV:
processPrev();
break;
case NAME_FINISH:
processFinish(event);
break;
case NAME_CLOSE:
processClose(event);
// else ignore, we don't know it
break;
default:
break;
}
// else ignore, we don't know it
parent.updateProblem();
}
void deferredResultFailed(final boolean canGoBack) {
final Runnable runnable = new Runnable() {
public void run() {
if (!canGoBack)
getCancel().setText(closeString);
getPrev().setEnabled(true);
getNext().setEnabled(false);
getCancel().setEnabled(true);
getFinish().setEnabled(false);
final Runnable runnable = () -> {
if (!canGoBack)
getCancel().setText(getCloseString());
getPrev().setEnabled(true);
getNext().setEnabled(false);
getCancel().setEnabled(true);
getFinish().setEnabled(false);
if (NAME_CLOSE.equals(deferredStatus)) {
// no action
} else
deferredStatus = DEFERRED_FAILED + deferredStatus;
}
if (NAME_CLOSE.equals(deferredStatus)) {
// no action
} else
deferredStatus = DEFERRED_FAILED + deferredStatus;
};
if (EventQueue.isDispatchThread())
runnable.run();
@@ -326,23 +309,31 @@ public class NavButtonManager implements ActionListener {
return;
}
if (NAME_NEXT.equals(name))
switch (name) {
case NAME_NEXT:
processNextProceed(o);
else if (NAME_PREV.equals(name))
break;
// else ignore, we don't know it
case NAME_PREV:
processPrevProceed(o);
else if (NAME_CANCEL.equals(name))
break;
case NAME_CANCEL:
processCancel(o instanceof ActionEvent ? (ActionEvent) o
: null, false);
else if (NAME_FINISH.equals(name))
break;
case NAME_FINISH:
// allowFinish on the "down" click of the finish button
processFinishProceed(o);
else if (NAME_CLOSE.equals(name)) {
break;
case NAME_CLOSE:
// the "up" click of the finish button: wizard.finish was a deferred result
Window dlg = getWindow();
dlg.setVisible(false);
dlg.dispose();
break;
default:
break;
}
// else ignore, we don't know it
parent.updateProblem();
}
@@ -484,14 +475,10 @@ public class NavButtonManager implements ActionListener {
curr = settings.popAndCalve();
settings.push(id);
parent.navigateTo(id);
return;
} catch (NoSuchElementException ex) {
IllegalStateException e = new IllegalStateException("Exception "
+ // NOI18N
"said to return to " + id + " but no such "
+ // NOI18N
"step found"); // NOI18N
e.initCause(ex);
+ "said to return to " + id + " but no such "
+ "step found", ex);
throw e;
}
}
@@ -504,11 +491,9 @@ public class NavButtonManager implements ActionListener {
Wizard wizard = parent.getWizard();
MergeMap settings = parent.getSettings();
// System.err.println("ProcessCancel " + reallyCancel + " receiver " + parent.receiver);
boolean closeWindow = false;
boolean closeWindow;
if (reallyCancel && parent.cancel()) {
// System.err.println("DO CANCEL");
logger.fine("calling wizard cancel method on " + wizard);
wizard.cancel(settings);
return;
@@ -545,9 +530,8 @@ public class NavButtonManager implements ActionListener {
if (window != null && parent.receiver == null && window instanceof JDialog)
((JDialog) window).getRootPane().setDefaultButton(cancel);
cancel.setText(closeString); // NOI18N
cancel.setMnemonic(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/api/Bundle", // NOI18N
WizardDisplayer.class, "Close_mnemonic").charAt(0)); // NOI18N
cancel.setText(getCloseString()); // NOI18N
cancel.setMnemonic(C.i18n("wizard.close_mnemonic").charAt(0));
cancel.setName(NAME_CLOSE);
deferredStatus = null; // ?? should summary be different
}
@@ -565,7 +549,7 @@ public class NavButtonManager implements ActionListener {
}
public String getCloseString() {
return closeString;
return C.i18n("wizard.close");
}
public Window getWindow() {
@@ -617,26 +601,22 @@ public class NavButtonManager implements ActionListener {
}
public void navigabilityChanged(final Wizard wizard) {
final Runnable runnable = new Runnable() {
public void run() {
if (wizard.isBusy()) {
next.setEnabled(false);
prev.setEnabled(false);
finish.setEnabled(false);
cancel.setEnabled(false);
parent.getOuterPanel().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
wasBusy = true;
return;
} else if (wasBusy) {
cancel.setEnabled(true);
parent.getOuterPanel().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
configureNavigationButtons(wizard, prev, next, finish);
parent.updateProblem();
final Runnable runnable = () -> {
if (wizard.isBusy()) {
next.setEnabled(false);
prev.setEnabled(false);
finish.setEnabled(false);
cancel.setEnabled(false);
parent.getOuterPanel().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
wasBusy = true;
return;
} else if (wasBusy) {
cancel.setEnabled(true);
parent.getOuterPanel().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
configureNavigationButtons(wizard, prev, next, finish);
parent.updateProblem();
};
if (EventQueue.isDispatchThread())
runnable.run();

View File

@@ -11,13 +11,10 @@ import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.border.EmptyBorder;
import org.jackhuang.hellominecraft.utils.C;
import org.jackhuang.hellominecraft.utils.views.wizard.api.WizardDisplayer;
import org.jackhuang.hellominecraft.utils.views.wizard.modules.InstructionsPanelImpl;
import org.jackhuang.hellominecraft.utils.views.wizard.modules.NbBridge;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.ResultProgressHandle;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.Summary;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.WizardPage;
/**
* Show progress bar for deferred results, with a label showing percent done and
@@ -75,49 +72,40 @@ public class NavProgress implements ResultProgressHandle {
}
public void setProgress(final String description, final int currentStep, final int totalSteps) {
Runnable r = new Runnable() {
public void run() {
lbl.setText(description == null ? " " : description); // NOI18N
setProgress(currentStep, totalSteps);
}
};
invoke(r);
invoke(() -> {
lbl.setText(description == null ? " " : description); // NOI18N
setProgress(currentStep, totalSteps);
});
}
public void setProgress(final int currentStep, final int totalSteps) {
Runnable r = new Runnable() {
public void run() {
if (totalSteps == -1)
progressBar.setIndeterminate(true);
else {
if (currentStep > totalSteps || currentStep < 0) {
if (currentStep == -1 && totalSteps == -1)
return;
throw new IllegalArgumentException("Bad step values: " // NOI18N
+ currentStep + " out of " + totalSteps); // NOI18N
}
progressBar.setIndeterminate(false);
progressBar.setMaximum(totalSteps);
progressBar.setValue(currentStep);
invoke(() -> {
if (totalSteps == -1)
progressBar.setIndeterminate(true);
else {
if (currentStep > totalSteps || currentStep < 0) {
if (currentStep == -1 && totalSteps == -1)
return;
throw new IllegalArgumentException("Bad step values: "
+ currentStep + " out of " + totalSteps);
}
setUseBusy(false);
progressBar.setIndeterminate(false);
progressBar.setMaximum(totalSteps);
progressBar.setValue(currentStep);
}
};
invoke(r);
setUseBusy(false);
});
}
public void setBusy(final String description) {
Runnable r = new Runnable() {
public void run() {
lbl.setText(description == null ? " " : description); // NOI18N
invoke(() -> {
lbl.setText(description == null ? " " : description);
progressBar.setIndeterminate(true);
progressBar.setIndeterminate(true);
setUseBusy(true);
}
};
invoke(r);
setUseBusy(true);
});
}
protected void setUseBusy(boolean useBusy) {
@@ -137,7 +125,7 @@ public class NavProgress implements ResultProgressHandle {
private void ensureBusyInitialized() {
if (busy.getIcon() == null) {
URL url = getClass().getResource("busy.gif");
URL url = getClass().getResource("/org/jackhuang/hellominecraft/busy.gif");
Icon icon = new ImageIcon(url);
busy.setIcon(icon);
}
@@ -149,29 +137,24 @@ public class NavProgress implements ResultProgressHandle {
else
try {
EventQueue.invokeAndWait(r);
} catch (InvocationTargetException ex) {
} catch (InvocationTargetException | InterruptedException ex) {
ex.printStackTrace();
logger.severe("Error invoking operation " + ex.getClass().getName() + " " + ex.getMessage());
} catch (InterruptedException ex) {
logger.severe("Error invoking operation " + ex.getClass().getName() + " " + ex.getMessage());
ex.printStackTrace();
}
}
public void finished(final Object o) {
isRunning = false;
Runnable r = new Runnable() {
public void run() {
if (o instanceof Summary) {
Summary summary = (Summary) o;
parent.handleSummary(summary);
parent.setWizardResult(summary.getResult());
} else if (parent.getDeferredResult() != null) {
parent.setWizardResult(o);
Runnable r = () -> {
if (o instanceof Summary) {
Summary summary = (Summary) o;
parent.handleSummary(summary);
parent.setWizardResult(summary.getResult());
} else if (parent.getDeferredResult() != null) {
parent.setWizardResult(o);
// handle result based on which button was pushed
parent.getButtonManager().deferredResultFinished(o);
}
// handle result based on which button was pushed
parent.getButtonManager().deferredResultFinished(o);
}
};
invoke(r);
@@ -181,19 +164,14 @@ public class NavProgress implements ResultProgressHandle {
failMessage = message;
isRunning = false;
Runnable r = new Runnable() {
public void run() {
// cheap word wrap
JLabel comp = new JLabel("<html><body>" + message); // NOI18N
comp.setBorder(new EmptyBorder(5, 5, 5, 5));
parent.setCurrentWizardPanel(comp);
parent.getTtlLabel().setText(
NbBridge
.getString("org/netbeans/api/wizard/Bundle", // NOI18N
WizardDisplayer.class, "Failed")); // NOI18N
NavButtonManager bm = parent.getButtonManager();
bm.deferredResultFailed(canGoBack);
}
Runnable r = () -> {
// cheap word wrap
JLabel comp = new JLabel("<html><body>" + message); // NOI18N
comp.setBorder(new EmptyBorder(5, 5, 5, 5));
parent.setCurrentWizardPanel(comp);
parent.getTtlLabel().setText(C.i18n("wizard.failed"));
NavButtonManager bm = parent.getButtonManager();
bm.deferredResultFailed(canGoBack);
};
invoke(r);
}

View File

@@ -1,17 +1,17 @@
/* The contents of this file are subject to the terms of the Common Development
and Distribution License (the License). You may not use this file except in
compliance with the License.
You can obtain a copy of the License at http://www.netbeans.org/cddl.html
or http://www.netbeans.org/cddl.txt.
When distributing Covered Code, include this CDDL Header Notice in each file
and include the License file at http://www.netbeans.org/cddl.txt.
If applicable, add the following below the CDDL Header, with the fields
enclosed by brackets [] replaced by your own identifying information:
Written by Stanley@StanleyKnutson.com based on code from Tim B.
/*
* The contents of this file are subject to the terms of the Common Development
* and Distribution License (the License). You may not use this file except in
* compliance with the License.
* You can obtain a copy of the License at http://www.netbeans.org/cddl.html
* or http://www.netbeans.org/cddl.txt.
* When distributing Covered Code, include this CDDL Header Notice in each file
* and include the License file at http://www.netbeans.org/cddl.txt.
* If applicable, add the following below the CDDL Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
*
* Written by Stanley@StanleyKnutson.com based on code from Tim B.
*
*/
package org.jackhuang.hellominecraft.utils.views.wizard.api.displayer;
import java.awt.BorderLayout;
@@ -51,11 +51,12 @@ import javax.swing.WindowConstants;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import org.jackhuang.hellominecraft.utils.C;
import org.jackhuang.hellominecraft.utils.logging.HMCLog;
import org.jackhuang.hellominecraft.utils.views.wizard.api.WizardDisplayer;
import org.jackhuang.hellominecraft.utils.views.wizard.api.WizardResultReceiver;
import org.jackhuang.hellominecraft.utils.views.wizard.modules.InstructionsPanelImpl;
import org.jackhuang.hellominecraft.utils.views.wizard.modules.MergeMap;
import org.jackhuang.hellominecraft.utils.views.wizard.modules.NbBridge;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.DeferredWizardResult;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.ResultProgressHandle;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.Summary;
@@ -64,95 +65,85 @@ import org.jackhuang.hellominecraft.utils.views.wizard.spi.WizardPanel;
/**
* Default implementation of WizardDisplayer.
* <b><i><font color="red">This class is NOT AN API CLASS. There is no
* <b><i><font color="red">This class is NOT AN API CLASS. There is no
* commitment that it will remain backward compatible or even exist in the
* future. The API of this library is in the packages <code>org.netbeans.api.wizard</code>
* and <code>org.netbeans.spi.wizard</code></font></i></b>. <p>Use
* future. The API of this library is in the packages
* <code>org.netbeans.api.wizard</code>
* and <code>org.netbeans.spi.wizard</code></font></i></b>.
* <p>
* Use
* <code>WizardDisplayer.showWizard()</code> or its other static methods to
* display wizards in a way which will continue to work over time.
*
* @author stanley@StanleyKnutson.com
* @author Tim Boudreau
*/
public class WizardDisplayerImpl extends WizardDisplayer
{
public class WizardDisplayerImpl extends WizardDisplayer {
ResultProgressHandle progress = null;
ResultProgressHandle progress = null;
JLabel ttlLabel = null;
JLabel ttlLabel = null;
JPanel ttlPanel = null;
JPanel ttlPanel = null;
Wizard wizard = null;
Wizard wizard = null;
JPanel outerPanel = null;
JPanel outerPanel = null;
NavButtonManager buttonManager = null;
NavButtonManager buttonManager = null;
InstructionsPanel instructions = null;
InstructionsPanel instructions = null;
MergeMap settings = null;
MergeMap settings = null;
JPanel inner = null;
JPanel inner = null;
JLabel problem = null;
JLabel problem = null;
Object wizardResult = null;
Object wizardResult = null;
WizardResultReceiver receiver = null;
WizardResultReceiver receiver = null;
/**
* WizardPanel is the panel returned as the panel to display. Often a
* subclass of WizardPanel
*/
JComponent wizardPanel = null;
JComponent wizardPanel = null;
boolean inSummary = false;
boolean inSummary = false;
DeferredWizardResult deferredResult = null;
DeferredWizardResult deferredResult = null;
/**
* Default constructor used by WizardDisplayer static methods.
*
*/
public WizardDisplayerImpl()
{
public WizardDisplayerImpl() {
}
protected void buildStepTitle()
{
protected void buildStepTitle() {
ttlLabel = new JLabel(wizard.getStepDescription(wizard.getAllSteps()[0]));
ttlLabel.setBorder(BorderFactory.createCompoundBorder(BorderFactory
.createEmptyBorder(5, 5, 12, 5), BorderFactory.createMatteBorder(0, 0, 1, 0, UIManager
.getColor("textText")))); // NOI18N
ttlPanel = new JPanel()
{
public void doLayout()
{
.getColor("textText")))); // NOI18N
ttlPanel = new JPanel() {
public void doLayout() {
Dimension d = ttlLabel.getPreferredSize();
if (ttlLabel.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
{
ttlLabel.setBounds(getWidth() - d.width, 0, getWidth(), d.height);
}
else
{
ttlLabel.setBounds(0, 0, getWidth(), d.height);
}
}
public Dimension getPreferredSize()
{
public Dimension getPreferredSize() {
return ttlLabel.getPreferredSize();
}
};
ttlPanel.add(ttlLabel);
Font f = ttlLabel.getFont();
if (f == null)
{
f = UIManager.getFont("controlFont"); // NOI18N
}
if (f != null)
{
if (f != null) {
f = f.deriveFont(Font.BOLD);
ttlLabel.setFont(f);
}
@@ -161,33 +152,28 @@ public class WizardDisplayerImpl extends WizardDisplayer
/**
* Show a wizard
*
* @param awizard is the wizard to be displayed
* @param bounds for display, may be null for default of 0,0,400,600.
*
* @param awizard is the wizard to be displayed
* @param bounds for display, may be null for default of
* 0,0,400,600.
* @param helpAction
* @param initialProperties - initial values for the map
*
* @return value of the 'finish' processing
* @see org.netbeans.api.wizard.WizardDisplayer#show(org.netbeans.spi.wizard.Wizard, java.awt.Rectangle, javax.swing.Action, java.util.Map)
*
* @see
* org.netbeans.api.wizard.WizardDisplayer#show(org.netbeans.spi.wizard.Wizard,
* java.awt.Rectangle, javax.swing.Action, java.util.Map)
*/
private JPanel createOuterPanel(final Wizard awizard, Rectangle bounds, Action helpAction,
Map initialProperties)
{
Map initialProperties) {
this.wizard = awizard;
outerPanel = new JPanel();
// apply default size
// we don't enforce any maximum size
if (bounds == null)
{
bounds = new Rectangle(0,0, 600,400);
}
if (wizard.getAllSteps().length == 0)
{
throw new IllegalArgumentException("Wizard has no steps"); // NOI18N
}
// initialize the ttl* stuff
buildStepTitle();
@@ -195,17 +181,16 @@ public class WizardDisplayerImpl extends WizardDisplayer
buttonManager = new NavButtonManager(this);
outerPanel.setLayout(new BorderLayout());
Action kbdCancel = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
JButton b = buttonManager.getCancel();
if (b.isEnabled()) {
if (b.isEnabled())
b.doClick();
}
}
};
outerPanel.getInputMap(outerPanel.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel"); //NOI18N
outerPanel.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel"); //NOI18N
outerPanel.getActionMap().put("cancel", kbdCancel); //NOI18N
instructions = createInstructionsPanel();
@@ -232,81 +217,67 @@ public class WizardDisplayerImpl extends WizardDisplayer
// introduce the initial properties as if they had been set on page 1
// even though they may be defaults for page 2
if (initialProperties != null)
{
settings.putAll(initialProperties);
}
wizardPanel = wizard.navigatingTo(first, settings);
String desc = wizard.getLongDescription (first);
if (desc != null) {
ttlLabel.setText (desc);
}
String desc = wizard.getLongDescription(first);
if (desc != null)
ttlLabel.setText(desc);
inner.add(wizardPanel, BorderLayout.CENTER);
buttonManager.initializeNavigation();
return outerPanel;
}
protected InstructionsPanel createInstructionsPanel() {
return new InstructionsPanelImpl (wizard);
return new InstructionsPanelImpl(wizard);
}
public void install (Container c, Object layoutConstraint, Wizard awizard,
Action helpAction, Map initialProperties, WizardResultReceiver receiver) {
JPanel pnl = createOuterPanel (awizard, new Rectangle(), helpAction, initialProperties);
if (layoutConstraint != null) {
if (c instanceof RootPaneContainer) {
((RootPaneContainer) c).getContentPane().add (pnl, layoutConstraint);
} else {
c.add (pnl, layoutConstraint);
}
} else {
if (c instanceof RootPaneContainer) {
((RootPaneContainer) c).getContentPane().add (pnl);
} else {
c.add (pnl);
}
}
public void install(Container c, Object layoutConstraint, Wizard awizard,
Action helpAction, Map initialProperties, WizardResultReceiver receiver) {
JPanel pnl = createOuterPanel(awizard, new Rectangle(), helpAction, initialProperties);
if (layoutConstraint != null)
if (c instanceof RootPaneContainer)
((RootPaneContainer) c).getContentPane().add(pnl, layoutConstraint);
else
c.add(pnl, layoutConstraint);
else if (c instanceof RootPaneContainer)
((RootPaneContainer) c).getContentPane().add(pnl);
else
c.add(pnl);
this.receiver = receiver;
}
private static boolean warned;
public Object show(final Wizard awizard, Rectangle bounds, Action helpAction,
Map initialProperties) {
Map initialProperties) {
if (!EventQueue.isDispatchThread() && !warned) {
Logger.getLogger(WizardDisplayerImpl.class.getName()).log(Level.WARNING,
"show() should be called from the AWT Event Thread. This "
+ "call may deadlock - c.f. "
+ "http://java.net/jira/browse/WIZARD-33", new Throwable());
Logger.getLogger(WizardDisplayerImpl.class.getName()).log(Level.WARNING,
"show() should be called from the AWT Event Thread. This "
+ "call may deadlock - c.f. "
+ "http://java.net/jira/browse/WIZARD-33", new Throwable());
warned = true;
}
createOuterPanel (awizard, bounds, helpAction, initialProperties);
createOuterPanel(awizard, bounds, helpAction, initialProperties);
Object result = showInDialog(bounds);
return result;
}
protected JDialog createDialog()
{
protected JDialog createDialog() {
JDialog dlg;
Object o = findLikelyOwnerWindow();
if (o instanceof Frame)
{
dlg = new JDialog((Frame) o);
}
else if (o instanceof Dialog)
{
dlg = new JDialog((Dialog) o);
}
else
{
dlg = new JDialog();
}
return dlg;
}
protected Object showInDialog(Rectangle bounds)
{
protected Object showInDialog(Rectangle bounds) {
// TODO: add flag for "showInFrame"
JDialog dlg = createDialog();
@@ -318,45 +289,28 @@ public class WizardDisplayerImpl extends WizardDisplayer
dlg.getContentPane().setLayout(new BorderLayout());
dlg.getContentPane().add(outerPanel, BorderLayout.CENTER);
if (bounds != null)
{
dlg.setBounds(bounds);
}
else
{
dlg.pack();
}
dlg.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
dlg.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
if (!(e.getWindow() instanceof JDialog)) {
dlg.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
if (!(e.getWindow() instanceof JDialog))
return;
}
JDialog dlg = (JDialog) e.getWindow();
boolean dontClose = false;
if (!wizard.isBusy())
{
if (!wizard.isBusy()) {
DeferredWizardResult defResult;
synchronized(WizardDisplayerImpl.this) {
synchronized (WizardDisplayerImpl.this) {
defResult = deferredResult;
}
try
{
try {
if (defResult != null && defResult.canAbort())
{
defResult.abort();
}
else if (defResult != null && !defResult.canAbort())
{
dontClose = true;
return;
}
}
finally
{
if (!dontClose && wizard.cancel(settings))
{
} finally {
if (!dontClose && wizard.cancel(settings)) {
dlg.setVisible(false);
dlg.dispose();
}
@@ -380,63 +334,58 @@ public class WizardDisplayerImpl extends WizardDisplayer
return wizardResult;
}
private Window findLikelyOwnerWindow()
{
private Window findLikelyOwnerWindow() {
return KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow();
}
/**
* Return the current wizard panel, or null if the currently displayed page
* is not a WizardPanel.
*
*
* @return
*/
public WizardPanel getCurrentWizardPanel()
{
public WizardPanel getCurrentWizardPanel() {
JComponent comp = wizardPanel;
if (comp instanceof WizardPanel)
{
return (WizardPanel) comp;
}
return null;
}
public String getCurrentStep()
{
public String getCurrentStep() {
return settings.currID();
}
// available in the package only
static void checkLegalNavMode(int i)
{
switch (i)
{
case Wizard.MODE_CAN_CONTINUE:
case Wizard.MODE_CAN_CONTINUE_OR_FINISH:
case Wizard.MODE_CAN_FINISH:
return;
default:
throw new IllegalArgumentException("Illegal forward " + // NOI18N
"navigation mode: " + i); // NOI18N
static void checkLegalNavMode(int i) {
switch (i) {
case Wizard.MODE_CAN_CONTINUE:
case Wizard.MODE_CAN_CONTINUE_OR_FINISH:
case Wizard.MODE_CAN_FINISH:
return;
default:
throw new IllegalArgumentException("Illegal forward "
+ // NOI18N
"navigation mode: " + i); // NOI18N
}
}
/*
* private static final class LDlg extends JDialog { public LDlg() {
* } public LDlg (Frame frame) { super (frame); }
*
* } public LDlg (Frame frame) { super (frame); }
*
* public LDlg (Dialog dlg) { super (dlg); }
*
*
* public void setVisible (boolean val) { if (!val) { Thread.dumpStack(); }
* super.setVisible (val); } }
*/
/**
/**
* Set the currently displayed panel.
* @parm comp is can be anything - it is not required to be a WizardPage or WizardPanel
* */
public void setCurrentWizardPanel(JComponent comp)
{
*
* @parm comp is can be anything - it is not required to be a WizardPage or
* WizardPanel
*
*/
public void setCurrentWizardPanel(JComponent comp) {
inner.add(comp, BorderLayout.CENTER);
inner.remove(wizardPanel);
wizardPanel = comp;
@@ -445,37 +394,30 @@ public class WizardDisplayerImpl extends WizardDisplayer
inner.repaint();
comp.requestFocus();
if (!inSummary)
{
buttonManager.updateButtons();
}
}
void handleSummary(Summary summary)
{
void handleSummary(Summary summary) {
inSummary = true;
instructions.setInSummaryPage(true);
JComponent summaryComp = (JComponent) summary.getSummaryComponent(); // XXX
if (summaryComp.getBorder() != null)
{
if (summaryComp.getBorder() != null) {
CompoundBorder b = new CompoundBorder(new EmptyBorder(5, 5, 5, 5), summaryComp
.getBorder());
.getBorder());
summaryComp.setBorder(b);
}
setCurrentWizardPanel((JComponent) summaryComp); // XXX
ttlLabel.setText(NbBridge.getString("org/netbeans/api/wizard/Bundle", // NOI18N
WizardDisplayer.class, "Summary")); // NOI18N
ttlLabel.setText(C.i18n("wizard.summary"));
getButtonManager().setSummaryShowingMode();
summaryComp.requestFocus();
}
protected ResultProgressHandle createProgressDisplay (boolean isUseBusy)
{
protected ResultProgressHandle createProgressDisplay(boolean isUseBusy) {
return new NavProgress(this, isUseBusy);
}
void handleDeferredWizardResult(final DeferredWizardResult r, final boolean inSummary)
{
void handleDeferredWizardResult(final DeferredWizardResult r, final boolean inSummary) {
synchronized (this) {
deferredResult = r;
}
@@ -484,56 +426,30 @@ public class WizardDisplayerImpl extends WizardDisplayer
Container inst = instructions.getComponent();
progress.addProgressComponents(inst);
inst.invalidate();
if (inst instanceof JComponent) {
((JComponent)inst).revalidate();
}
if (inst instanceof JComponent)
((JComponent) inst).revalidate();
inst.repaint();
Runnable run = new Runnable()
{
public void run()
{
Runnable run = new Runnable() {
public void run() {
if (!EventQueue.isDispatchThread())
{
try
{
EventQueue.invokeLater (new Runnable() {
public void run() {
buttonManager.getWindow()
.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
}
});
try {
EventQueue.invokeLater(() -> buttonManager.getWindow().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)));
r.start(settings, progress);
if (progress.isRunning())
{
progress.failed("Start method did not inidicate " +
"failure or finished in " + r, false);
}
}
finally
{
try
{
progress.failed("Start method did not inidicate "
+ "failure or finished in " + r, false);
} finally {
try {
EventQueue.invokeAndWait(this);
}
catch (InvocationTargetException ex)
{
ex.printStackTrace();
} catch (InvocationTargetException | InterruptedException ex) {
HMCLog.err("Failed to invoke and wait", ex);
return;
}
catch (InterruptedException ex)
{
ex.printStackTrace();
return;
}
finally
{
} finally {
buttonManager.getWindow().setCursor(Cursor.getDefaultCursor());
}
}
}
else
{
else {
synchronized (this) {
deferredResult = null;
}
@@ -541,9 +457,8 @@ public class WizardDisplayerImpl extends WizardDisplayer
Container inst = instructions.getComponent();
inst.removeAll();
inst.invalidate();
if (inst instanceof JComponent) {
((JComponent)instructions).revalidate();
}
if (inst instanceof JComponent)
((JComponent) instructions).revalidate();
inst.repaint();
}
}
@@ -552,123 +467,97 @@ public class WizardDisplayerImpl extends WizardDisplayer
runner.start();
}
public void navigateTo(String id)
{
public void navigateTo(String id) {
JComponent comp = wizard.navigatingTo(id, getSettings());
String description = wizard.getLongDescription (id);
if (description == null) {
description = wizard.getStepDescription (id);
}
String description = wizard.getLongDescription(id);
if (description == null)
description = wizard.getStepDescription(id);
getTtlLabel().setText(description);
setCurrentWizardPanel(comp);
}
public NavButtonManager getButtonManager()
{
public NavButtonManager getButtonManager() {
return buttonManager;
}
public synchronized DeferredWizardResult getDeferredResult()
{
public synchronized DeferredWizardResult getDeferredResult() {
return deferredResult;
}
public InstructionsPanel getInstructions()
{
public InstructionsPanel getInstructions() {
return instructions;
}
public boolean isInSummary()
{
public boolean isInSummary() {
return inSummary;
}
public void setInSummary(final boolean state)
{
public void setInSummary(final boolean state) {
inSummary = state;
Runnable r = new Runnable() {
public void run() {
instructions.setInSummaryPage(state);
}
};
if (EventQueue.isDispatchThread()) {
Runnable r = () -> instructions.setInSummaryPage(state);
if (EventQueue.isDispatchThread())
r.run();
} else {
EventQueue.invokeLater (r);
}
else
EventQueue.invokeLater(r);
}
public JPanel getOuterPanel()
{
public JPanel getOuterPanel() {
return outerPanel;
}
public MergeMap getSettings()
{
public MergeMap getSettings() {
return settings;
}
public JLabel getTtlLabel()
{
public JLabel getTtlLabel() {
return ttlLabel;
}
public JPanel getTtlPanel()
{
public JPanel getTtlPanel() {
return ttlPanel;
}
public Wizard getWizard()
{
public Wizard getWizard() {
return wizard;
}
public JComponent getWizardPanel()
{
public JComponent getWizardPanel() {
return wizardPanel;
}
public Object getWizardResult()
{
public Object getWizardResult() {
return wizardResult;
}
public void setWizardResult(Object wizardResult)
{
public void setWizardResult(Object wizardResult) {
this.wizardResult = wizardResult;
if (receiver != null) {
if (receiver != null)
receiver.finished(wizardResult);
}
}
public synchronized void setDeferredResult(DeferredWizardResult deferredResult)
{
public synchronized void setDeferredResult(DeferredWizardResult deferredResult) {
this.deferredResult = deferredResult;
}
/**
* Will only be called if there is a WizardResultReceiver - i.e. if the
* wizard is being displayed in some kind of custom container. Return
* wizard is being displayed in some kind of custom container. Return
* true to indicate we should not try to close the parent window.
*/
*/
boolean cancel() {
boolean result = receiver != null;
if (result) {
if (result)
receiver.cancelled(settings);
}
return result;
}
void updateProblem()
{
void updateProblem() {
String prob = wizard.getProblem();
problem.setText(prob == null ? " " : prob); // NOI18N
if (prob != null && prob.trim().length() == 0)
{
// Issue 3 - provide ability to disable next w/o
// showing the error line
prob = null;
}
Border b = prob == null ? BorderFactory.createEmptyBorder(1, 0, 0, 0) : BorderFactory
.createMatteBorder(1, 0, 0, 0, problem.getForeground());

View File

@@ -43,6 +43,8 @@ import javax.swing.CellRendererPane;
import javax.swing.JComponent;
import javax.swing.JEditorPane;
import javax.swing.UIManager;
import org.jackhuang.hellominecraft.utils.C;
import org.jackhuang.hellominecraft.utils.logging.HMCLog;
import org.jackhuang.hellominecraft.utils.views.wizard.api.displayer.InstructionsPanel;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.Wizard;
import org.jackhuang.hellominecraft.utils.views.wizard.spi.WizardObserver;
@@ -149,9 +151,9 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
if (img == null)
try {
img = ImageIO.read(InstructionsPanelImpl.class.getResourceAsStream(
"defaultWizard.png")); //NOI18N
"/org/jackhuang/hellominecraft/wizard.jpg")); //NOI18N
} catch (IOException ioe) {
ioe.printStackTrace();
HMCLog.err("Failed to load wizard.jpg, maybe you fucking modified the launcher", ioe);
}
this.img = img;
this.wizard = wizard;
@@ -202,9 +204,7 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
steps = wizard.getAllSteps();
String steps[] = this.steps;
if (inSummaryPage) {
String summaryStep = NbBridge.getString(
"org/jackhuang/hellominecraft/utils/views/wizard/modules/Bundle", //NOI18N
InstructionsPanelImpl.class, "Summary"); //NOI18N
String summaryStep = C.i18n("wizard.summary");
String[] nue = new String[steps.length + 1];
System.arraycopy(steps, 0, nue, 0, steps.length);
nue[nue.length - 1] = summaryStep;
@@ -217,8 +217,7 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
Font boldFont = f.deriveFont(Font.BOLD);
g.setFont(boldFont);
g.drawString(NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/modules/Bundle", //NOI18N
InstructionsPanelImpl.class, "Steps"), x, y); //NOI18N
g.drawString(C.i18n("wizard.steps"), x, y);
int underlineY = ins.top + MARGIN + fm.getAscent() + 3;
g.drawLine(x, underlineY, x + (getWidth() - (x + ins.left + MARGIN)),
@@ -230,8 +229,6 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
y += h + 10;
int first = 0;
int stop = steps.length;
String elipsis = NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/modules/Bundle", //NOI18N
InstructionsPanelImpl.class, "elipsis"); //NOI18N
boolean wontFit = y + (h * (steps.length)) > getHeight();
if (wontFit) {
//try to center the current step
@@ -255,33 +252,6 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
stop = rangeEnd;
}
}
/*
* if (wontFit) {
* int currStepIndex = Arrays.asList (steps).indexOf(currentStep);
* if (currStepIndex != -1) { //shouldn't happen
* steps = (String[]) steps.clone();
* first = Math.max (0, currStepIndex - 2);
* if (first != 0) {
* if (y + ((currStepIndex - first) * h) > getHeight()) {
* //Best effort to keep current step on screen
* first++;
* }
* if (first != currStepIndex) {
* steps[first] = elipsis;
* }
* }
* }
* }
* if (y + ((stop - first) * h) > bottom) {
* int avail = bottom - y;
* int willFit = avail / h;
* int last = first + willFit - 1;
* if (last < steps.length - 1) {
* steps[last] = elipsis;
* stop = last + 1;
* }
* }
*/
g.setFont(getFont());
g.setColor(getForeground());
@@ -298,11 +268,9 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
curr = (i + 1) + ". " + steps[i];
else
curr = (i + 1) + ". " + (isUndetermined
? NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/modules/Bundle", //NOI18N
InstructionsPanelImpl.class, "elipsis")
: //NOI18N
steps[i].equals(elipsis) ? elipsis
: wizard.getStepDescription(steps[i])); //NOI18N
? elipsis
: steps[i].equals(elipsis) ? elipsis
: wizard.getStepDescription(steps[i]));
else
curr = elipsis;
if (curr != null) {
@@ -313,10 +281,7 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
int width = fm.stringWidth(curr);
while (width > getWidth() - (ins.left + ins.right) && curr.length() > 5)
curr = curr.substring(0, curr.length() - 5)
+ NbBridge.getString(
"org/jackhuang/hellominecraft/utils/views/wizard/modules/Bundle", //NOI18N
InstructionsPanelImpl.class, "elipsis"); //NOI18N
curr = curr.substring(0, curr.length() - 5) + elipsis;
g.drawString(curr, x, y);
if (selected)
@@ -328,6 +293,8 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
private int historicWidth = Integer.MIN_VALUE;
String elipsis = "...";
public final Dimension getPreferredSize() {
Font f = getFont() != null ? getFont()
: UIManager.getFont("controlFont"); //NOI18N
@@ -344,8 +311,7 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
int w = Integer.MIN_VALUE;
for (int i = 0; i < steps.length; i++) {
String desc = i + ". " + (Wizard.UNDETERMINED_STEP.equals(steps[i])
? NbBridge.getString("org/jackhuang/hellominecraft/utils/views/wizard/modules/Bundle", //NOI18N
InstructionsPanelImpl.class, "elipsis")
? elipsis
: //NOI18N
wizard.getStepDescription(steps[i]));
if (desc != null)
@@ -414,12 +380,6 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
panel = pnl;
if (pnl.getParent() instanceof Accessible)
setAccessibleParent((Accessible) pnl.getParent());
setAccessibleName(NbBridge.getString(
"org/jackhuang/hellominecraft/utils/views/wizard/modules/Bundle", //NOI18N
InstructionsPanelImpl.class, "ACN_InstructionsPanel")); //NOI18N
setAccessibleDescription(NbBridge.getString(
"org/jackhuang/hellominecraft/utils/views/wizard/modules/Bundle", //NOI18N
InstructionsPanelImpl.class, "ACSD_InstructionsPanel")); //NOI18N
}
JEditorPane pane;
@@ -444,12 +404,10 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
}
public String getText() {
StringBuffer sb = new StringBuffer();
StringBuilder sb = new StringBuilder();
String[] s = wizard.getAllSteps();
for (int i = 0; i < s.length; i++) {
sb.append(wizard.getStepDescription(s[i]));
sb.append('\n');
}
for (String item : s)
sb.append(wizard.getStepDescription(item)).append('\n');
return sb.toString();
}

View File

@@ -1,34 +0,0 @@
/*
* The contents of this file are subject to the terms of the Common Development
* and Distribution License (the License). You may not use this file except in
* compliance with the License.
* You can obtain a copy of the License at http://www.netbeans.org/cddl.html
* or http://www.netbeans.org/cddl.txt.
* When distributing Covered Code, include this CDDL Header Notice in each file
* and include the License file at http://www.netbeans.org/cddl.txt.
* If applicable, add the following below the CDDL Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
*/
package org.jackhuang.hellominecraft.utils.views.wizard.modules;
import java.util.ResourceBundle;
/**
* Non API class for accessing a few things in NetBeans via reflection.
*
* @author Tim Boudreau
*/
public final class NbBridge {
private NbBridge() {
}
public static String getString(String path, Class callerType, String key) {
return getStringViaResourceBundle(path, key);
}
private static String getStringViaResourceBundle(String path, String key) {
return ResourceBundle.getBundle(path).getString(key);
}
}

View File

@@ -208,14 +208,22 @@ settings.custom=\u81ea\u5b9a\u4e49
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.modpack=\u6574\u5408\u5305
settings.modpack.choose=\u9009\u62e9\u8981\u5bfc\u5165\u7684\u6e38\u620f\u6574\u5408\u5305\u6587\u4ef6
settings.modpack.install.task=\u5bfc\u5165\u6574\u5408\u5305
settings.modpack.install_error=\u5b89\u88c5\u5931\u8d25\uff0c\u53ef\u80fd\u662f\u6574\u5408\u5305\u683c\u5f0f\u4e0d\u6b63\u786e\u6216\u64cd\u4f5c\u6587\u4ef6\u5931\u8d25
settings.modpack.save=\u9009\u62e9\u8981\u5bfc\u51fa\u5230\u7684\u6e38\u620f\u6574\u5408\u5305\u4f4d\u7f6e
settings.modpack.save.task=\u5bfc\u51fa\u6574\u5408\u5305
settings.modpack.export_error=\u5bfc\u51fa\u5931\u8d25\uff0c\u53ef\u80fd\u662f\u60a8\u7684\u6e38\u620f\u6587\u4ef6\u5939\u683c\u5f0f\u4e0d\u6b63\u786e\u6216\u64cd\u4f5c\u6587\u4ef6\u5931\u8d25
settings.modpack.enter_name=\u7ed9\u6e38\u620f\u8d77\u4e2a\u4f60\u559c\u6b22\u7684\u540d\u5b57
modpack=\u6574\u5408\u5305
modpack.choose=\u9009\u62e9\u8981\u5bfc\u5165\u7684\u6e38\u620f\u6574\u5408\u5305\u6587\u4ef6
modpack.install.task=\u5bfc\u5165\u6574\u5408\u5305
modpack.install_error=\u5b89\u88c5\u5931\u8d25\uff0c\u53ef\u80fd\u662f\u6574\u5408\u5305\u683c\u5f0f\u4e0d\u6b63\u786e\u6216\u64cd\u4f5c\u6587\u4ef6\u5931\u8d25
modpack.save=\u9009\u62e9\u8981\u5bfc\u51fa\u5230\u7684\u6e38\u620f\u6574\u5408\u5305\u4f4d\u7f6e
modpack.save.task=\u5bfc\u51fa\u6574\u5408\u5305
modpack.export_error=\u5bfc\u51fa\u5931\u8d25\uff0c\u53ef\u80fd\u662f\u60a8\u7684\u6e38\u620f\u6587\u4ef6\u5939\u683c\u5f0f\u4e0d\u6b63\u786e\u6216\u64cd\u4f5c\u6587\u4ef6\u5931\u8d25
modpack.enter_name=\u7ed9\u6e38\u620f\u8d77\u4e2a\u4f60\u559c\u6b22\u7684\u540d\u5b57
modpack.wizard=\u5bfc\u51fa\u6574\u5408\u5305\u5411\u5bfc
modpack.wizard.step.1=\u57fa\u672c\u8bbe\u7f6e
modpack.wizard.step.1.title=\u8bbe\u7f6e\u6574\u5408\u5305\u7684\u4e3b\u8981\u4fe1\u606f
modpack.incorrect_format.no_json=\u6574\u5408\u5305\u683c\u5f0f\u9519\u8bef\uff0cpack.json\u4e22\u5931
modpack.incorrect_format.no_jar=\u6574\u5408\u5305\u683c\u5f0f\u9519\u8bef\uff0cpack.json\u4e22\u5931jar\u5b57\u6bb5
modpack.cannot_read_version=\u8bfb\u53d6\u6e38\u620f\u7248\u672c\u5931\u8d25
modpack.not_a_valid_location=\u4e0d\u662f\u4e00\u4e2a\u6709\u6548\u6574\u5408\u5305\u4f4d\u7f6e
modpack.warning=<html>\u5728\u5236\u4f5c\u6574\u5408\u5305\u524d\uff0c\u8bf7\u60a8\u786e\u8ba4\u60a8\u9009\u62e9\u7684\u7248\u672c\u53ef\u4ee5\u6b63\u5e38\u542f\u52a8\uff0c<br/>\u5e76\u4fdd\u8bc1\u60a8\u7684Minecraft\u662f\u6b63\u5f0f\u7248\u800c\u975e\u5feb\u7167\u7248\uff0c<br/>\u800c\u4e14\u4e0d\u5e94\u5f53\u5c06\u4e0d\u5141\u8bb8\u975e\u5b98\u65b9\u9014\u5f84\u4f20\u64ad\u7684Mod\u7eb3\u5165\u6574\u5408\u5305\u3002</html>
mods=Mod\u7ba1\u7406
mods.choose_mod=\u9009\u62e9\u6a21\u7ec4
@@ -340,5 +348,21 @@ color.red=\u7ea2\u8272
color.blue=\u84dd\u8272
color.green=\u7eff\u8272
color.orange=\u6a59\u8272
color.dark_blue=\u6df1\u84dd\u8272
color.dark_blue=\u6df1\u84dd\u8272\u5931\u8d25
color.purple=\u7d2b\u8272
wizard.next_>=\u4e0b\u4e00\u6b65 >
wizard.next_mnemonic=\u4e0b
wizard.<_prev=< \u4e0a\u4e00\u6b65
wizard.prev_mnemonic=\u4e0a
wizard.finish=\u5b8c\u6210
wizard.finish_mnemonic=\u5b8c
wizard.cancel=\u53d6\u6d88
wizard.cancel_mnemonic=\u53d6
wizard.help=\u5e2e\u52a9
wizard.help_mnemonic=\u5e2e
wizard.close=\u5173\u95ed
wizard.close_mnemonic=\u5173
wizard.summary=\u6982\u8981
wizard.failed=\u5931\u8d25
wizard.steps=\u6b65\u9aa4

View File

@@ -208,14 +208,22 @@ settings.custom=Custom
settings.choose_gamedir=Choose Game Directory
settings.failed_load=Failed to load settings file. Remove it?
settings.modpack=Mod pack
settings.modpack.choose=Choose a modpack zip file which you want to import.
settings.modpack.install.task=Import the modpack
settings.modpack.install_error=Failed to install the modpack, maybe the modpack file is incorrect or failed to manage files.
settings.modpack.save=Choose a location which you want to export the game files to.
settings.modpack.save.task=Export the modpack
settings.modpack.export_error=Failed to export the modpack, maybe the format of your game directory is incorrect or failed to manage files.
settings.modpack.enter_name=Give this game a name which is your favorite.
modpack=Mod pack
modpack.choose=Choose a modpack zip file which you want to import.
modpack.install.task=Import the modpack
modpack.install_error=Failed to install the modpack, maybe the modpack file is incorrect or failed to manage files.
modpack.save=Choose a location which you want to export the game files to.
modpack.save.task=Export the modpack
modpack.export_error=Failed to export the modpack, maybe the format of your game directory is incorrect or failed to manage files.
modpack.enter_name=Give this game a name which is your favorite.
modpack.wizard=Exporting the modpack wizard
modpack.wizard.step.1=Basic options
modpack.wizard.step.1.title=Set the basic options to the modpack.
modpack.incorrect_format.no_json=The format of the modpack is incorrect, pack.json is missing.
modpack.incorrect_format.no_jar=The format of the modpack is incorrect, pack.json does not have attribute 'jar'
modpack.cannot_read_version=Failed to gather the game version
modpack.not_a_valid_location=Not a valid modpack location
modpack.warning=<html>Before making modpack, you should ensure that your game can launch successfully,<br/>and that your Minecraft is release, not snapshot.<br/>and that it is not allowed to add mods which is not allowed to distribute to the modpack.</html>
mods=Mods
mods.choose_mod=Choose your mods
@@ -341,4 +349,20 @@ color.blue=Blue
color.green=Green
color.orange=Orange
color.dark_blue=Dark Blue
color.purple=Purple
color.purple=Purple
wizard.next_>=Next >
wizard.next_mnemonic=N
wizard.<_prev=< Prev
wizard.prev_mnemonic=P
wizard.finish=Finish
wizard.finish_mnemonic=F
wizard.cancel=Cancel
wizard.cancel_mnemonic=C
wizard.help=Help
wizard.help_mnemonic=H
wizard.close=Close
wizard.close_mnemonic=C
wizard.summary=Summary
wizard.failed=Failed
wizard.steps=Steps

View File

@@ -208,14 +208,22 @@ settings.custom=\u81ea\u5b9a\u7fa9
settings.choose_gamedir=\u9009\u62e9\u6e38\u620f\u8def\u5f84
settings.failed_load=\u8a2d\u5b9a\u6587\u4ef6\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.modpack=\u61f6\u4eba\u5305
settings.modpack.choose=\u9078\u64c7\u8981\u5c0e\u5165\u7684\u904a\u6232\u61f6\u4eba\u5305\u6587\u4ef6
settings.modpack.install.task=\u5c0e\u5165\u61f6\u4eba\u5305
settings.modpack.install_error=\u5b89\u88dd\u5931\u6557\uff0c\u53ef\u80fd\u662f\u6574\u5408\u5305\u683c\u5f0f\u4e0d\u6b63\u78ba\u6216\u64cd\u4f5c\u6587\u4ef6\u5931\u6557
settings.modpack.save=\u9078\u64c7\u8981\u5c0e\u51fa\u5230\u7684\u904a\u6232\u61f6\u4eba\u5305\u4f4d\u7f6e
settings.modpack.save.task=\u5c0e\u51fa\u61f6\u4eba\u5305
settings.modpack.export_error=\u5c0e\u51fa\u5931\u6557\uff0c\u53ef\u80fd\u662f\u60a8\u7684\u904a\u6232\u6587\u4ef6\u593e\u683c\u5f0f\u4e0d\u6b63\u78ba\u6216\u64cd\u4f5c\u6587\u4ef6\u5931\u6557
settings.modpack.enter_name=\u7d66\u904a\u6232\u8d77\u500b\u4f60\u559c\u6b61\u7684\u540d\u5b57
modpack=\u61f6\u4eba\u5305
modpack.choose=\u9078\u64c7\u8981\u5c0e\u5165\u7684\u904a\u6232\u61f6\u4eba\u5305\u6587\u4ef6
modpack.install.task=\u5c0e\u5165\u61f6\u4eba\u5305
modpack.install_error=\u5b89\u88dd\u5931\u6557\uff0c\u53ef\u80fd\u662f\u6574\u5408\u5305\u683c\u5f0f\u4e0d\u6b63\u78ba\u6216\u64cd\u4f5c\u6587\u4ef6\u5931\u6557
modpack.save=\u9078\u64c7\u8981\u5c0e\u51fa\u5230\u7684\u904a\u6232\u61f6\u4eba\u5305\u4f4d\u7f6e
modpack.save.task=\u5c0e\u51fa\u61f6\u4eba\u5305
modpack.export_error=\u5c0e\u51fa\u5931\u6557\uff0c\u53ef\u80fd\u662f\u60a8\u7684\u904a\u6232\u6587\u4ef6\u593e\u683c\u5f0f\u4e0d\u6b63\u78ba\u6216\u64cd\u4f5c\u6587\u4ef6\u5931\u6557
modpack.enter_name=\u7d66\u904a\u6232\u8d77\u500b\u4f60\u559c\u6b61\u7684\u540d\u5b57
modpack.wizard=\u5c0e\u51fa\u61f6\u4eba\u5305\u56ae\u5c0e
modpack.wizard.step.1=\u57fa\u672c\u8a2d\u5b9a
modpack.wizard.step.1.title=\u8a2d\u7f6e\u61f6\u4eba\u5305\u7684\u4e3b\u8981\u4fe1\u606f
modpack.incorrect_format.no_json=\u61f6\u4eba\u5305\u683c\u5f0f\u932f\u8aa4\uff0cpack.json\u4e1f\u5931
modpack.incorrect_format.no_jar=\u61f6\u4eba\u5305\u683c\u5f0f\u932f\u8aa4\uff0cpack.json\u4e1f\u5931jar\u5b57\u6bb5
modpack.cannot_read_version=\u8b80\u53d6\u904a\u6232\u7248\u672c\u5931\u6557
modpack.not_a_valid_location=\u4e0d\u662f\u4e00\u4e2a\u6709\u6548\u61d2\u4eba\u5305\u4f4d\u7f6e
modpack.warning=<html>\u5728\u88fd\u4f5c\u6574\u5408\u5305\u524d,\u8acb\u60a8\u78ba\u8a8d\u60a8\u9078\u64c7\u7684\u7248\u672c\u53ef\u4ee5\u6b63\u5e38\u555f\u52d5,\u200b\u200b<br/>\u4e26\u4fdd\u8b49\u60a8\u7684Minecraft\u662f\u6b63\u5f0f\u7248\u800c\u975e\u5feb\u7167\u7248,<br/>\u800c\u4e14\u4e0d\u61c9\u7576\u5c07\u4e0d\u5141\u8a31\u975e\u5b98\u65b9\u9014\u5f91\u50b3\u64ad\u7684Mod\u7d0d\u5165\u6574\u5408\u5305\u3002 </html>
mods=Mod\u7ba1\u7406
mods.choose_mod=\u9009\u62e9\u6a21\u7ec4
@@ -341,4 +349,20 @@ color.blue=\u85cd\u8272
color.green=\u7da0\u8272
color.orange=\u6a59\u8272
color.dark_blue=\u6df1\u85cd\u8272
color.purple=\u7d2b\u8272
color.purple=\u7d2b\u8272
wizard.next_>=\u4e0b\u4e00\u6b65 >
wizard.next_mnemonic=\u4e0b
wizard.<_prev=< \u4e0a\u4e00\u6b65
wizard.prev_mnemonic=\u4e0a
wizard.finish=\u5b8c\u6210
wizard.finish_mnemonic=\u5b8c
wizard.cancel=\u53d6\u6d88
wizard.cancel_mnemonic=\u53d6
wizard.help=\u5e6b\u52a9
wizard.help_mnemonic=\u5e6b
wizard.close=\u95dc\u9589
wizard.close_mnemonic=\u95dc
wizard.summary=\u6982\u8981
wizard.failed=\u5931\u8d25
wizard.steps=\u6b65\u9a5f

View File

@@ -208,18 +208,28 @@ settings.custom=\u81ea\u5b9a\u4e49
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.modpack=\u6574\u5408\u5305
settings.modpack.choose=\u9009\u62e9\u8981\u5bfc\u5165\u7684\u6e38\u620f\u6574\u5408\u5305\u6587\u4ef6
settings.modpack.install.task=\u5bfc\u5165\u6574\u5408\u5305
settings.modpack.install_error=\u5b89\u88c5\u5931\u8d25\uff0c\u53ef\u80fd\u662f\u6574\u5408\u5305\u683c\u5f0f\u4e0d\u6b63\u786e\u6216\u64cd\u4f5c\u6587\u4ef6\u5931\u8d25
settings.modpack.save=\u9009\u62e9\u8981\u5bfc\u51fa\u5230\u7684\u6e38\u620f\u6574\u5408\u5305\u4f4d\u7f6e
settings.modpack.save.task=\u5bfc\u51fa\u6574\u5408\u5305
settings.modpack.export_error=\u5bfc\u51fa\u5931\u8d25\uff0c\u53ef\u80fd\u662f\u60a8\u7684\u6e38\u620f\u6587\u4ef6\u5939\u683c\u5f0f\u4e0d\u6b63\u786e\u6216\u64cd\u4f5c\u6587\u4ef6\u5931\u8d25
settings.modpack.enter_name=\u7ed9\u6e38\u620f\u8d77\u4e2a\u4f60\u559c\u6b22\u7684\u540d\u5b57
modpack=\u6574\u5408\u5305
modpack.choose=\u9009\u62e9\u8981\u5bfc\u5165\u7684\u6e38\u620f\u6574\u5408\u5305\u6587\u4ef6
modpack.install.task=\u5bfc\u5165\u6574\u5408\u5305
modpack.install_error=\u5b89\u88c5\u5931\u8d25\uff0c\u53ef\u80fd\u662f\u6574\u5408\u5305\u683c\u5f0f\u4e0d\u6b63\u786e\u6216\u64cd\u4f5c\u6587\u4ef6\u5931\u8d25
modpack.save=\u9009\u62e9\u8981\u5bfc\u51fa\u5230\u7684\u6e38\u620f\u6574\u5408\u5305\u4f4d\u7f6e
modpack.save.task=\u5bfc\u51fa\u6574\u5408\u5305
modpack.export_error=\u5bfc\u51fa\u5931\u8d25\uff0c\u53ef\u80fd\u662f\u60a8\u7684\u6e38\u620f\u6587\u4ef6\u5939\u683c\u5f0f\u4e0d\u6b63\u786e\u6216\u64cd\u4f5c\u6587\u4ef6\u5931\u8d25
modpack.enter_name=\u7ed9\u6e38\u620f\u8d77\u4e2a\u4f60\u559c\u6b22\u7684\u540d\u5b57
modpack.wizard=\u5bfc\u51fa\u6574\u5408\u5305\u5411\u5bfc
modpack.wizard.step.1=\u57fa\u672c\u8bbe\u7f6e
modpack.wizard.step.1.title=\u8bbe\u7f6e\u6574\u5408\u5305\u7684\u4e3b\u8981\u4fe1\u606f
modpack.incorrect_format.no_json=\u6574\u5408\u5305\u683c\u5f0f\u9519\u8bef\uff0cpack.json\u4e22\u5931
modpack.incorrect_format.no_jar=\u6574\u5408\u5305\u683c\u5f0f\u9519\u8bef\uff0cpack.json\u4e22\u5931jar\u5b57\u6bb5
modpack.cannot_read_version=\u8bfb\u53d6\u6e38\u620f\u7248\u672c\u5931\u8d25
modpack.not_a_valid_location=\u4e0d\u662f\u4e00\u4e2a\u6709\u6548\u6574\u5408\u5305\u4f4d\u7f6e
modpack.warning=<html>\u5728\u5236\u4f5c\u6574\u5408\u5305\u524d\uff0c\u8bf7\u60a8\u786e\u8ba4\u60a8\u9009\u62e9\u7684\u7248\u672c\u53ef\u4ee5\u6b63\u5e38\u542f\u52a8\uff0c<br/>\u5e76\u4fdd\u8bc1\u60a8\u7684Minecraft\u662f\u6b63\u5f0f\u7248\u800c\u975e\u5feb\u7167\u7248\uff0c<br/>\u800c\u4e14\u4e0d\u5e94\u5f53\u5c06\u4e0d\u5141\u8bb8\u975e\u5b98\u65b9\u9014\u5f84\u4f20\u64ad\u7684Mod\u7eb3\u5165\u6574\u5408\u5305\u3002</html>
mods=Mod\u7ba1\u7406
mods.choose_mod=\u9009\u62e9\u6a21\u7ec4
mods.failed=\u6dfb\u52a0\u5931\u8d25
mods.add=\u6dfb\u52a0
mods.remove=\u5220\u9664
mods.default_information=<html><font color=#c0392b>\u5b89\u88c5Mod\u524d\u4f60\u9700\u8981\u786e\u4fdd\u5df2\u5b89\u88c5Forge\u6216LiteLoader!<br>\u60a8\u53ef\u4ee5\u4ece\u8d44\u6e90\u7ba1\u7406\u5668\u62d6\u52a8mod\u6587\u4ef6\u5230\u5217\u8868\u4e2d\u6765\u6dfb\u52a0mod\uff0c\u540c\u65f6\u4f7f\u7528\u5220\u9664\u952e\u53ef\u5feb\u901f\u5220\u9664\u9009\u4e2dmod<br>\u70b9\u6389mod\u524d\u9762\u7684\u52fe\u53ef\u7981\u7528mod\uff0c\u4e0d\u4f1a\u52a0\u8f7d\uff1b\u9009\u62e9mod\u53ef\u4ee5\u83b7\u53d6mod\u4fe1\u606f</font></html>
advancedsettings=\u9ad8\u7ea7\u8bbe\u7f6e
@@ -236,8 +246,9 @@ advancedsettings.game_dir.default=\u9ed8\u8ba4(.minecraft/)
advancedsettings.game_dir.independent=\u5404\u7248\u672c\u72ec\u7acb(.minecraft/versions/<\u7248\u672c\u540d>/,\u9664assets,libraries)
advancedsettings.no_jvm_args=\u4e0d\u6dfb\u52a0JVM\u53c2\u6570(\u4f7f\u7528Java9\u65f6\u5fc5\u52fe)
advancedsettings.java_args_default=\u542f\u52a8\u5668\u9ed8\u8ba4\u6dfb\u52a0\u7684\u53c2\u6570\uff08\u8bf7\u4e0d\u8981\u91cd\u590d\u6dfb\u52a0\uff09\uff1a-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -XX:MaxPermSize=???m -Xmx???m -Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true
advancedsettings.wrapper_launcher=\u524d\u7f6e\u542f\u52a8\u6307\u4ee4(\u4e0d\u5fc5\u586b\u5199\uff0c\u5185\u5bb9\u5c06\u52a0\u5728\u542f\u52a8\u811a\u672c\u6700\u524d\uff0c\u5982optirun...)
advancedsettings.wrapper_launcher=\u542f\u52a8\u524d\u6267\u884c\u547d\u4ee4(\u4e0d\u5fc5\u586b\u5199\uff0c\u5c06\u5728\u6e38\u620f\u542f\u52a8\u524d\u8c03\u7528)
advancedsettings.server_ip=\u76f4\u5165\u670d\u52a1\u5668ip\u5730\u5740(\u4e0d\u5fc5\u586b\u5199\uff0c\u542f\u52a8\u6e38\u620f\u540e\u76f4\u63a5\u8fdb\u5165\u5bf9\u5e94\u670d\u52a1\u5668)
advancedsettings.cancel_wrapper_launcher=\u53d6\u6d88\u5305\u88f9\u542f\u52a8\u5668\uff08\u51fa\u73b0\u5947\u602a\u95ee\u9898\u65f6\u53ef\u5c1d\u8bd5\u4f7f\u7528,\u4e0e\u8c03\u8bd5\u6a21\u5f0f\u51b2\u7a81\uff09
mainwindow.show_log=\u67e5\u770b\u65e5\u5fd7
mainwindow.make_launch_script=\u751f\u6210\u542f\u52a8\u811a\u672c
@@ -246,7 +257,7 @@ mainwindow.enter_script_name=\u8f93\u5165\u8981\u751f\u6210\u811a\u672c\u7684\u6
mainwindow.make_launch_succeed=\u542f\u52a8\u811a\u672c\u5df2\u751f\u6210\u5b8c\u6bd5:
mainwindow.no_version=\u672a\u627e\u5230\u4efb\u4f55\u7248\u672c\uff0c\u662f\u5426\u8fdb\u5165\u6e38\u620f\u4e0b\u8f7d\uff1f
launcher.about=<html>\u9ed8\u8ba4\u80cc\u666f\u56fe\u6765\u81eaLiberty Dome\u670d\u52a1\u5668\u3002<br/>\u5173\u4e8e\u4f5c\u8005\uff1a<br/>\n\u767e\u5ea6ID\uff1ahuanghongxun20<br/>\nmcbbs\uff1ahuanghongxun<br/>\n\u90ae\u7bb1\uff1ahuanghongxun2008@126.com<br/>\nMinecraft Forum ID: klkl6523<br/>\n\u6b22\u8fce\u63d0\u4ea4Bug\u54e6<br/>\nCopyright (c) 2013-2015 huangyuhui.<br/>\u514d\u8d23\u58f0\u660e\uff1aMinecraft\u8f6f\u4ef6\u7248\u6743\u5f52Mojang AB\u6240\u6709\uff0c\u6e38\u620f\u7531\u4e8e\u8bef\u64cd\u4f5c\u672c\u542f\u52a8\u5668\u800c\u4e22\u5931\u6570\u636e\u7684\u6982\u4e0d\u8d1f\u8d23\u3002<br/>\u672c\u542f\u52a8\u5668\u5728GPLv3\u534f\u8bae\u4e0b\u5f00\u6e90:http://github.com/huanghongxun/HMCL/<br/>\u672c\u8f6f\u4ef6\u4f7f\u7528\u4e86\u57fa\u4e8eApache License 2.0\u7684RxJava\u548cGson\u9879\u76ee\uff0c\u611f\u8c22\u8d21\u732e\u8005\u3002</html>
launcher.about=<html>\u9ed8\u8ba4\u80cc\u666f\u56fe\u6765\u81eaLiberty Dome\u670d\u52a1\u5668\u3002<br/>\u5173\u4e8e\u4f5c\u8005\uff1a<br/>\n\u767e\u5ea6ID\uff1ahuanghongxun20<br/>\nmcbbs\uff1ahuanghongxun<br/>\n\u90ae\u7bb1\uff1ahuanghongxun2008@126.com<br/>\nMinecraft Forum ID: klkl6523<br/>\n\u6b22\u8fce\u63d0\u4ea4Bug\u54e6<br/>\nCopyright (c) 2013-2015 huangyuhui.<br/>\u514d\u8d23\u58f0\u660e\uff1aMinecraft\u8f6f\u4ef6\u7248\u6743\u5f52Mojang AB\u6240\u6709\uff0c\u6e38\u620f\u7531\u4e8e\u8bef\u64cd\u4f5c\u672c\u542f\u52a8\u5668\u800c\u4e22\u5931\u6570\u636e\u7684\u6982\u4e0d\u8d1f\u8d23\u3002<br/>\u672c\u542f\u52a8\u5668\u5728GPLv3\u534f\u8bae\u4e0b\u5f00\u6e90:https://github.com/huanghongxun/HMCL/<br/>\u672c\u8f6f\u4ef6\u4f7f\u7528\u4e86\u57fa\u4e8eApache License 2.0\u7684RxJava\u548cGson\u9879\u76ee\uff0c\u611f\u8c22\u8d21\u732e\u8005\u3002</html>
launcher.download_source=\u4e0b\u8f7d\u6e90
launcher.background_location=\u80cc\u666f\u5730\u5740
launcher.exit_failed=\u5f3a\u5236\u9000\u51fa\u5931\u8d25\uff0c\u53ef\u80fd\u662fForge 1.7.10\u53ca\u66f4\u9ad8\u7248\u672c\u5bfc\u81f4\u7684\uff0c\u65e0\u6cd5\u89e3\u51b3\u3002
@@ -338,4 +349,20 @@ color.blue=\u84dd\u8272
color.green=\u7eff\u8272
color.orange=\u6a59\u8272
color.dark_blue=\u6df1\u84dd\u8272
color.purple=\u7d2b\u8272
color.purple=\u7d2b\u8272
wizard.next_>=\u4e0b\u4e00\u6b65 >
wizard.next_mnemonic=\u4e0b
wizard.<_prev=< \u4e0a\u4e00\u6b65
wizard.prev_mnemonic=\u4e0a
wizard.finish=\u5b8c\u6210
wizard.finish_mnemonic=\u5b8c
wizard.cancel=\u53d6\u6d88
wizard.cancel_mnemonic=\u53d6
wizard.help=\u5e2e\u52a9
wizard.help_mnemonic=\u5e2e
wizard.close=\u5173\u95ed
wizard.close_mnemonic=\u5173
wizard.summary=\u6982\u8981
wizard.failed=\u5931\u8d25
wizard.steps=\u6b65\u9aa4

View File

@@ -1,25 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
Next_>=Next >
Next_mnemonic=N
<_Prev=< Prev
Prev_mnemonic=P
Finish=Finish
Finish_mnemonic=F
Cancel=Cancel
Cancel_mnemonic=C
Help=Help
Help_mnemonic=H
Close=Close
Close_mnemonic=C
Summary=Summary
Failed=Failed

View File

@@ -1,25 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
Next_>=Weiter >
Next_mnemonic=W
<_Prev=< Zur\u00FCck
Prev_mnemonic=Z
Finish=Fertig
Finish_mnemonic=F
Cancel=Abbrechen
Cancel_mnemonic=A
Help=Hilfe
Help_mnemonic=H
Close=Schlie\u00DFen
Close_mnemonic=S
Summary=Zusammenfassung
Failed=Fehler

View File

@@ -1,30 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
Next_>=\u0395\u03C0\u03CC\u03BC\u03B5\u03BD\u03BF >
Next_mnemonic=\u0395
<_Prev=< \u03A0\u03C1\u03BF\u03B7\u03B3\u03BF\u03CD\u03BC\u03B5\u03BD\u03BF
Prev_mnemonic=\u03A0
Finish=\u03A4\u03AD\u03BB\u03BF\u03C2
Finish_mnemonic=\u03A4
Cancel=\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7
Cancel_mnemonic=\u0391
Help=\u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1
Help_mnemonic=\u0392
Close=\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF
Close_mnemonic=\u039A
Summary=\u03A0\u03B5\u03C1\u03AF\u03BB\u03B7\u03C8\u03B7
Failed=\u0391\u03C0\u03AD\u03C4\u03C5\u03C7\u03B5
HELP=\u0392\u039F\u0397\u0398\u0395\u0399\u0391
FINISH=\u03A4\u0395\u039B\u039F\u03A3
NEXT=\u0395\u03A0\u039F\u039C\u0395\u039D\u039F
PREV=\u03A0\u03A1\u039F\u0397\u0393\u039F\u03A5\u039C\u0395\u039D\u039F
CANCEL=\u0391\u039A\u03A5\u03A1\u03A9\u03A3\u0397

View File

@@ -1,25 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
Next_>=Suivant >
Next_mnemonic=S
<_Prev=< Pr\u00E9c\u00E9dent
Prev_mnemonic=P
Finish=Terminer
Finish_mnemonic=T
Cancel=Annuler
Cancel_mnemonic=n
Help=Aide
Help_mnemonic=A
Close=Fermer
Close_mnemonic=F
Summary=Sommaire
Failed=\u00C9chec

View File

@@ -1,25 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
Next_>=Avanti >
Next_mnemonic=v
<_Prev=< Indietro
Prev_mnemonic=I
Finish=Fine
Finish_mnemonic=F
Cancel=Annulla
Cancel_mnemonic=n
Help=Aiuto
Help_mnemonic=A
Close=Chiudi
Close_mnemonic=C
Summary=Riassunto
Failed=Fallimento

View File

@@ -1,25 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
Next_>=Volgende >
Next_mnemonic=g
<_Prev=< Vorige
Prev_mnemonic=r
Finish=Be\u00EBindigen
Finish_mnemonic=B
Cancel=Annuleren
Cancel_mnemonic=A
Help=Help
Help_mnemonic=H
Close=Sluiten
Close_mnemonic=S
Summary=Sammenvatting
Failed=Gefaald

View File

@@ -1,27 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
Next_>=Pr\u00F3ximo >
Next_mnemonic=P
<_Prev=< Previs\u00E3o
Prev_mnemonic=r
Finish=Fim
Finish_mnemonic=F
Cancel=Cancelar
Cancel_mnemonic=C
Help=Ajudar
Help_mnemonic=A
Close=Fechar
Close_mnemonic=F
Summary=Sum\u00E1rio
Failed=Falhou

View File

@@ -1,31 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
Next_>=N\u00E4sta >
Next_mnemonic=N
<_Prev=< F\u00F6reg\u00E5ende
Prev_mnemonic=P
Finish=Avsluta
Finish_mnemonic=F
Cancel=Avbryt
Cancel_mnemonic=C
Help=Hj\u00E4lp
Help_mnemonic=H
Close=St\u00E4ng
Close_mnemonic=C
Summary=Sammanfatning
Failed=Misslyckades
HELP=HJ\u00C4LP
FINISH=AVSLUTA
NEXT=N\u00C4STA
PREV=F\u00D6REG\u00C5ENDE
CANCEL=AVBRYT

View File

@@ -1,18 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
Cannot_back_out_past_first_entry=Cannot back out past first entry
elipsis=...
Steps=Steps
Summary=Summary
ACN_InstructionsPanel=Wizard Step List
ACSD_InstructionsPanel=List of the panels in this wizard, which can change \
based on the choices made on individual panels within it

View File

@@ -1,17 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
elipsis=...
Steps=Arbeitsschritte
Summary=Zusammenfassung
ACN_InstructionsPanel=Arbeitsschritte des Assistenten
ACSD_InstructionsPanel=Seiten\u00FCbersicht dieses Assistenten; sie kann sich \u00E4ndern \
je nach dem, welche Entscheidungen Sie treffen.

View File

@@ -1,26 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
OpenIDE-Module-Name=Wizards API
OpenIDE-Module-Display-Category=Infrastructure
OpenIDE-Module-Short-Description=Provides the Wizards API
OpenIDE-Module-Long-Description=Provides the Wizards API and a basic implementation of it
Cannot_back_out_past_first_entry=Cannot back out past first entry
elipsis=...
elipsis.=...
Steps=\u0392\u03AE\u03BC\u03B1\u03C4\u03B1
Summary=\u03A0\u03B5\u03C1\u03AF\u03BB\u03B7\u03C8\u03B7
ACN_InstructionsPanel=\u039A\u03B1\u03C4\u03AC\u03BB\u03BF\u03B3\u03BF\u03C2 \u03B2\u03B7\u03BC\u03AC\u03C4\u03C9\u03BD \u03BF\u03B4\u03B7\u03B3\u03BF\u03CD
ACSD_InstructionsPanel=\u039A\u03B1\u03C4\u03AC\u03BB\u03BF\u03B3\u03BF\u03C2 \u03C4\u03C9\u03BD \u03C0\u03AC\u03BD\u03B5\u03BB \u03C3\u03B5 \u03B1\u03C5\u03C4\u03CC\u03BD \u03C4\u03BF\u03BD \u03BF\u03B4\u03B7\u03B3\u03CC, \u03BF \u03BF\u03C0\u03BF\u03AF\u03BF\u03C2 \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BB\u03BB\u03AC\u03BE\u03B5\u03B9 \u03B1\u03BD\u03AC\u03BB\u03BF\u03B3\u03B1 \u03BC\u03B5 \u03C4\u03B9\u03C2 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AD\u03C2 \u03C3\u03C4\u03BF \u03BA\u03AC\u03B8\u03B5 \u03C0\u03AC\u03BD\u03B5\u03BB.

View File

@@ -1,18 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
Cannot_back_out_past_first_entry=Cannot back out past first entry
elipsis=...
Steps=\u00C9tapes
Summary=Sommaire
ACN_InstructionsPanel=Liste des \u00E9tapes de l'assistant
ACSD_InstructionsPanel=La liste des \u00E9tapes de l'assistant \
qui peuvent changer selon les choix de l'utilisateur

View File

@@ -1,26 +0,0 @@
#The contents of this file are subject to the terms of the Common Development
#and Distribution License (the License). You may not use this file except in
#compliance with the License.
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
#or http://www.netbeans.org/cddl.txt.
# When distributing Covered Code, include this CDDL Header Notice in each file
#and include the License file at http://www.netbeans.org/cddl.txt.
#If applicable, add the following below the CDDL Header, with the fields
#enclosed by brackets [] replaced by your own identifying information:
#"Portions Copyrighted [year] [name of copyright owner]"
OpenIDE-Module-Name=Wizards API
OpenIDE-Module-Display-Category=Infrastructure
OpenIDE-Module-Short-Description=Provides the Wizards API
OpenIDE-Module-Long-Description=Provides the Wizards API and a basic implementation of it
Cannot_back_out_past_first_entry=Cannot back out past first entry
elipsis=...
elipsis.=...
Steps=Steg
Summary=Sammanfattning
ACN_InstructionsPanel=Steg i guiden
ACSD_InstructionsPanel=Lista med steg i guiden, som kan \u00E4ndras beroende p\u00E5 valen som g\u00F6rs i indivuduella paneler

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB