+ Added support of default values in the enum.jelly form element.
+ (PR 1926)
+
+ Bytecode Compatibility Transformer computes the common super class without loading classes.
+ Fixes the ClassCircularityError exception in Ruby Runtime Plugin.
+ (issue 31019)
+
+ Extended Choice parameter definitions could not be saved since 1.637.
+ (issue 31458)
+
+ Display expected CRON run times even if a warning occurs.
+ (issue 29059)
+
+ Rework the online-node command implementation, no functional changes.
+ (issue 31776)
+
-Older changelogs can be found in a separate file
+Older changelogs can be found in a separate file
diff --git a/cli/pom.xml b/cli/pom.xml
index 6244cdb84f..b3ecb0312b 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -5,7 +5,7 @@
org.jenkins-ci.mainpom
- 1.639-SNAPSHOT
+ 1.642-SNAPSHOTcli
diff --git a/cli/src/main/resources/hudson/cli/client/Messages_bg.properties b/cli/src/main/resources/hudson/cli/client/Messages_bg.properties
new file mode 100644
index 0000000000..df0d2b57e1
--- /dev/null
+++ b/cli/src/main/resources/hudson/cli/client/Messages_bg.properties
@@ -0,0 +1,44 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+CLI.Usage=\
+ \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0430 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0438\u044f \u0440\u0435\u0434 \u043d\u0430 Jenkins\n\
+ \u0423\u043f\u043e\u0442\u0440\u0435\u0431\u0430: java -jar jenkins-cli.jar [-s \u0410\u0414\u0420\u0415\u0421] \u041a\u041e\u041c\u0410\u041d\u0414\u0410 [\u041e\u041f\u0426\u0418\u042f\u2026] \u0410\u0420\u0413\u0423\u041c\u0415\u041d\u0422\u2026\n\
+ \u041e\u043f\u0446\u0438\u0438:\n\
+ -s \u0410\u0414\u0420\u0415\u0421 : \u0430\u0434\u0440\u0435\u0441\u044a\u0442 \u043d\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0430 (\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e \u0441\u0435 \u0432\u0437\u0438\u043c\u0430 \u043e\u0442 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0430\u0442\u0430 \u043d\u0430\n\
+ \u0441\u0440\u0435\u0434\u0430\u0442\u0430 \u201eJENKINS_URL\u201c)\n\
+ -i \u041a\u041b\u042e\u0427 : \u0447\u0430\u0441\u0442\u0435\u043d \u043a\u043b\u044e\u0447 \u0437\u0430 SSH \u0437\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\n\
+ -p \u0425\u041e\u0421\u0422:\u041f\u041e\u0420\u0422 : \u0445\u043e\u0441\u0442 \u0438 \u043f\u043e\u0440\u0442 \u0437\u0430 \u0441\u044a\u0440\u0432\u044a\u0440-\u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a \u043f\u043e HTTP \u0437\u0430 \u0442\u0443\u043d\u0435\u043b \u043f\u043e HTTPS.\n\
+ \u0417\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: http://jenkins-ci.org/https-proxy-tunnel\n\
+ -noCertificateCheck : \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u0437\u0430 HTTPS (\u0412\u041d\u0418\u041c\u0410\u041d\u0418\u0415!)\n\
+ -noKeyAuth : \u0431\u0435\u0437 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0441 \u0447\u0430\u0441\u0442\u0435\u043d \u043a\u043b\u044e\u0447 \u0437\u0430 SSH, \u043e\u043f\u0446\u0438\u044f\u0442\u0430 \u0435\n\
+ \u043d\u0435\u0441\u044a\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0430 \u0441 \u043e\u043f\u0446\u0438\u044f\u0442\u0430 \u201e-i\u201c\n\n\
+ \u041d\u0430\u043b\u0438\u0447\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0438 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u044f\u0442\u0430 \u043d\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0430. \u0417\u0430 \u0438\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0441\u043f\u0438\u0441\u044a\u043a\u0430\n\
+ \u0438\u043c \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0442\u0430 \u201ehelp\u201c.\n
+CLI.NoURL=\
+ \u0410\u0434\u0440\u0435\u0441\u044a\u0442 \u043d\u0435 \u0435 \u0437\u0430\u0434\u0430\u0434\u0435\u043d \u043d\u0438\u0442\u043e \u0447\u0440\u0435\u0437 \u043e\u043f\u0446\u0438\u044f\u0442\u0430 \u201e-s\u201c, \u043d\u0438\u0442\u043e \u0447\u0440\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0430\u0442\u0430 \u043d\u0430\
+ \u0441\u0440\u0435\u0434\u0430\u0442\u0430 \u201eJENKINS_URL\u201c.
+CLI.VersionMismatch=\
+ \u0412\u0435\u0440\u0441\u0438\u0438\u0442\u0435 \u043d\u0435 \u0441\u044a\u0432\u043f\u0430\u0434\u0430\u0442. \u0422\u0430\u0437\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0430 \u0437\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0435\u043d \u0440\u0435\u0434 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0438 \u0441 \u0442\u043e\u0437\u0438 \u0441\u044a\u0440\u0432\u044a\u0440\
+ Jenkins.
+CLI.NoSuchFileExists=\
+ \u0422\u0430\u043a\u044a\u0432 \u0444\u0430\u0439\u043b \u043d\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430: {0}
diff --git a/core/pom.xml b/core/pom.xml
index e950e986ad..dd040f1d34 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -29,7 +29,7 @@ THE SOFTWARE.
org.jenkins-ci.mainpom
- 1.639-SNAPSHOT
+ 1.642-SNAPSHOTjenkins-core
@@ -200,7 +200,7 @@ THE SOFTWARE.
org.jenkins-cibytecode-compatibility-transformer
- 1.7
+ 1.8org.jenkins-ci
@@ -632,7 +632,7 @@ THE SOFTWARE.
-
+
org.jenkins-ci.toolsmaven-hpi-plugin
diff --git a/core/src/main/java/hudson/DNSMultiCast.java b/core/src/main/java/hudson/DNSMultiCast.java
index 2ed4f28746..aa71b2e23b 100644
--- a/core/src/main/java/hudson/DNSMultiCast.java
+++ b/core/src/main/java/hudson/DNSMultiCast.java
@@ -67,7 +67,8 @@ public class DNSMultiCast implements Closeable {
jmdns.registerService(ServiceInfo.create("_http._tcp.local.","Jenkins",
jenkins_port,0,0,props));
} catch (IOException e) {
- LOGGER.log(Level.WARNING,"Failed to advertise the service to DNS multi-cast",e);
+ LOGGER.log(Level.INFO, "Cannot advertise service to DNS multi-cast, skipping: {0}", e);
+ LOGGER.log(Level.FINE, null, e);
}
return null;
}
diff --git a/core/src/main/java/hudson/Plugin.java b/core/src/main/java/hudson/Plugin.java
index 4808f208ed..75af4fda01 100644
--- a/core/src/main/java/hudson/Plugin.java
+++ b/core/src/main/java/hudson/Plugin.java
@@ -40,15 +40,18 @@ import java.io.File;
import net.sf.json.JSONObject;
import com.thoughtworks.xstream.XStream;
+import hudson.init.Initializer;
+import hudson.init.Terminator;
import java.net.URI;
import java.net.URISyntaxException;
+import jenkins.model.GlobalConfiguration;
import org.kohsuke.stapler.HttpResponses;
/**
* Base class of Hudson plugin.
*
*
- * A plugin may derive from this class, or it may directly define extension
+ * A plugin may {@linkplain #Plugin derive from this class}, or it may directly define extension
* points annotated with {@link hudson.Extension}. For a list of extension
* points, see
* https://wiki.jenkins-ci.org/display/JENKINS/Extension+points.
@@ -78,6 +81,22 @@ import org.kohsuke.stapler.HttpResponses;
*/
public abstract class Plugin implements Saveable {
+ /**
+ * You do not need to create custom subtypes:
+ *
+ *
{@code config.jelly}, {@link #configure(StaplerRequest, JSONObject)}, {@link #load}, and {@link #save}
+ * can be replaced by {@link GlobalConfiguration}
+ *
{@link #start} and {@link #postInitialize} can be replaced by {@link Initializer} (or {@link ItemListener#onLoaded})
+ *
{@link #stop} can be replaced by {@link Terminator}
+ *
{@link #setServletContext} can be replaced by {@link Jenkins#servletContext}
+ *
+ * Note that every plugin gets a {@link DummyImpl} by default,
+ * which will still route the URL space, serve {@link #getWrapper}, and so on.
+ * @deprecated Use more modern APIs rather than subclassing.
+ */
+ @Deprecated
+ protected Plugin() {}
+
/**
* Set by the {@link PluginManager}, before the {@link #start()} method is called.
* This points to the {@link PluginWrapper} that wraps
diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java
index 802bbf180f..92feb2fb54 100644
--- a/core/src/main/java/hudson/PluginManager.java
+++ b/core/src/main/java/hudson/PluginManager.java
@@ -876,6 +876,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
/**
* Bare-minimum configuration mechanism to change the update center.
*/
+ @RequirePOST
public HttpResponse doSiteConfigure(@QueryParameter String site) throws IOException {
Jenkins hudson = Jenkins.getInstance();
hudson.checkPermission(CONFIGURE_UPDATECENTER);
@@ -891,6 +892,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
}
+ @RequirePOST
public HttpResponse doProxyConfigure(StaplerRequest req) throws IOException, ServletException {
Jenkins jenkins = Jenkins.getInstance();
jenkins.checkPermission(CONFIGURE_UPDATECENTER);
@@ -909,6 +911,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
/**
* Uploads a plugin.
*/
+ @RequirePOST
public HttpResponse doUploadPlugin(StaplerRequest req) throws IOException, ServletException {
try {
Jenkins.getInstance().checkPermission(UPLOAD_PLUGINS);
diff --git a/core/src/main/java/hudson/UDPBroadcastThread.java b/core/src/main/java/hudson/UDPBroadcastThread.java
index 9824f6c027..6b399c5b26 100644
--- a/core/src/main/java/hudson/UDPBroadcastThread.java
+++ b/core/src/main/java/hudson/UDPBroadcastThread.java
@@ -30,11 +30,11 @@ import jenkins.model.Jenkins;
import hudson.util.OneShotEvent;
import java.io.IOException;
-import java.net.BindException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.SocketAddress;
+import java.net.SocketException;
import java.net.UnknownHostException;
import java.nio.channels.ClosedByInterruptException;
import java.util.logging.Level;
@@ -104,10 +104,13 @@ public class UDPBroadcastThread extends Thread {
}
} catch (ClosedByInterruptException e) {
// shut down
- } catch (BindException e) {
- // if we failed to listen to UDP, just silently abandon it, as a stack trace
+ } catch (SocketException e) {
+ if (shutdown) { // forcibly closed
+ return;
+ } // if we failed to listen to UDP, just silently abandon it, as a stack trace
// makes people unnecessarily concerned, for a feature that currently does no good.
- LOGGER.log(Level.WARNING, "Failed to listen to UDP port "+PORT,e);
+ LOGGER.log(Level.INFO, "Cannot listen to UDP port {0}, skipping: {1}", new Object[] {PORT, e});
+ LOGGER.log(Level.FINE, null, e);
} catch (IOException e) {
if (shutdown) return; // forcibly closed
LOGGER.log(Level.WARNING, "UDP handling problem",e);
diff --git a/core/src/main/java/hudson/cli/DeleteNodeCommand.java b/core/src/main/java/hudson/cli/DeleteNodeCommand.java
index 5f52957aad..4d48e2b78f 100644
--- a/core/src/main/java/hudson/cli/DeleteNodeCommand.java
+++ b/core/src/main/java/hudson/cli/DeleteNodeCommand.java
@@ -25,10 +25,10 @@ package hudson.cli;
import hudson.Extension;
import hudson.model.Node;
+import org.acegisecurity.AccessDeniedException;
import jenkins.model.Jenkins;
import org.kohsuke.args4j.Argument;
-import java.nio.file.AccessDeniedException;
import java.util.HashSet;
import java.util.List;
import java.util.logging.Logger;
diff --git a/core/src/main/java/hudson/cli/OnlineNodeCommand.java b/core/src/main/java/hudson/cli/OnlineNodeCommand.java
new file mode 100644
index 0000000000..2ed90c7461
--- /dev/null
+++ b/core/src/main/java/hudson/cli/OnlineNodeCommand.java
@@ -0,0 +1,85 @@
+/*
+ * The MIT License
+ *
+ * Copyright 2015 Red Hat, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package hudson.cli;
+
+import hudson.Extension;
+import hudson.model.Computer;
+import jenkins.model.Jenkins;
+
+import org.acegisecurity.AccessDeniedException;
+import org.kohsuke.args4j.Argument;
+
+import java.util.logging.Logger;
+
+/**
+ * @author pjanouse
+ * @since TODO
+ */
+@Extension
+public class OnlineNodeCommand extends CLICommand {
+
+ @Argument(metaVar="NAME", usage="Slave name, or empty string for master")
+ public String computerName;
+
+ private static final Logger LOGGER = Logger.getLogger(OnlineNodeCommand.class.getName());
+
+ @Override
+ public String getShortDescription() {
+
+ return Messages.OnlineNodeCommand_ShortDescription();
+ }
+
+ @Override
+ protected int run() throws Exception {
+
+ boolean errorOccurred = false;
+
+ final Jenkins jenkins = Jenkins.getInstance();
+
+ Computer computer = jenkins.getComputer(computerName);
+
+ if (computer == null) {
+ stderr.println(hudson.model.Messages.Computer_NoSuchSlaveExists(computerName, null));
+ errorOccurred = true;
+ } else {
+ try {
+ computer.cliOnline();
+ } catch (AccessDeniedException e) {
+ stderr.println(e.getMessage());
+ errorOccurred = true;
+ } catch (Exception e) {
+ final String errorMsg = String.format("Unexpected exception occurred during performing online operation on node '%s': %s",
+ computer == null ? "(null)" : computer.getName(),
+ e.getMessage());
+ stderr.println(errorMsg);
+ LOGGER.warning(errorMsg);
+ errorOccurred = true;
+ }
+ }
+
+ return errorOccurred ? 1 : 0;
+ }
+
+}
diff --git a/core/src/main/java/hudson/logging/LogRecorderManager.java b/core/src/main/java/hudson/logging/LogRecorderManager.java
index d16ece6c2b..e35a098d4b 100644
--- a/core/src/main/java/hudson/logging/LogRecorderManager.java
+++ b/core/src/main/java/hudson/logging/LogRecorderManager.java
@@ -40,6 +40,7 @@ import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.HttpResponse;
import org.kohsuke.stapler.HttpRedirect;
+import org.kohsuke.stapler.interceptor.RequirePOST;
import javax.servlet.ServletException;
import java.io.File;
@@ -106,6 +107,7 @@ public class LogRecorderManager extends AbstractModelObject implements ModelObje
/**
* Creates a new log recorder.
*/
+ @RequirePOST
public HttpResponse doNewLogRecorder(@QueryParameter String name) {
Jenkins.checkGoodName(name);
diff --git a/core/src/main/java/hudson/model/AbstractProject.java b/core/src/main/java/hudson/model/AbstractProject.java
index f2fc2f5660..458d1b8f64 100644
--- a/core/src/main/java/hudson/model/AbstractProject.java
+++ b/core/src/main/java/hudson/model/AbstractProject.java
@@ -1930,6 +1930,7 @@ public abstract class AbstractProject
,R extends A
/**
* Wipes out the workspace.
*/
+ @RequirePOST
public HttpResponse doDoWipeOutWorkspace() throws IOException, ServletException, InterruptedException {
checkPermission(Functions.isWipeOutPermissionEnabled() ? WIPEOUT : BUILD);
R b = getSomeBuildWithWorkspace();
diff --git a/core/src/main/java/hudson/model/Computer.java b/core/src/main/java/hudson/model/Computer.java
index 7f0f8673ec..394ad63757 100644
--- a/core/src/main/java/hudson/model/Computer.java
+++ b/core/src/main/java/hudson/model/Computer.java
@@ -523,7 +523,6 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
setTemporarilyOffline(true, new ByCLI(cause));
}
- @CLIMethod(name="online-node")
public void cliOnline() throws ExecutionException, InterruptedException {
checkPermission(CONNECT);
setTemporarilyOffline(false, null);
diff --git a/core/src/main/java/hudson/model/Descriptor.java b/core/src/main/java/hudson/model/Descriptor.java
index d7b83bd952..1a210b7162 100644
--- a/core/src/main/java/hudson/model/Descriptor.java
+++ b/core/src/main/java/hudson/model/Descriptor.java
@@ -72,6 +72,7 @@ import java.lang.reflect.Type;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.beans.Introspector;
+import java.util.IdentityHashMap;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -559,7 +560,7 @@ public abstract class Descriptor> implements Saveable {
* Signals a problem in the submitted form.
* @since 1.145
*/
- public T newInstance(StaplerRequest req, JSONObject formData) throws FormException {
+ public T newInstance(@CheckForNull StaplerRequest req, @Nonnull JSONObject formData) throws FormException {
try {
Method m = getClass().getMethod("newInstance", StaplerRequest.class);
@@ -574,7 +575,20 @@ public abstract class Descriptor> implements Saveable {
}
// new behavior as of 1.206
- return verifyNewInstance(req.bindJSON(clazz,formData));
+ BindInterceptor oldInterceptor = req.getBindInterceptor();
+ try {
+ NewInstanceBindInterceptor interceptor;
+ if ((oldInterceptor instanceof NewInstanceBindInterceptor)) {
+ interceptor = (NewInstanceBindInterceptor) oldInterceptor;
+ } else {
+ interceptor = new NewInstanceBindInterceptor(oldInterceptor);
+ req.setBindInterceptor(interceptor);
+ }
+ interceptor.processed.put(formData, null);
+ return verifyNewInstance(req.bindJSON(clazz, formData));
+ } finally {
+ req.setBindInterceptor(oldInterceptor);
+ }
}
} catch (NoSuchMethodException e) {
throw new AssertionError(e); // impossible
@@ -587,6 +601,78 @@ public abstract class Descriptor> implements Saveable {
}
}
+ /**
+ * Ensures that calls to {@link StaplerRequest#bindJSON(Class, JSONObject)} from {@link #newInstance(StaplerRequest, JSONObject)} recurse properly.
+ * {@code doConfigSubmit}-like methods will wind up calling {@code newInstance} directly
+ * or via {@link #newInstancesFromHeteroList(StaplerRequest, Object, Collection)},
+ * which consult any custom {@code newInstance} overrides for top-level {@link Describable} objects.
+ * But for nested describable objects Stapler would know nothing about {@code newInstance} without this trick.
+ */
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private static class NewInstanceBindInterceptor extends BindInterceptor {
+
+ private final BindInterceptor oldInterceptor;
+ private final Map processed = new IdentityHashMap<>();
+
+ NewInstanceBindInterceptor(BindInterceptor oldInterceptor) {
+ LOGGER.log(Level.FINER, "new interceptor delegating to {0}", oldInterceptor);
+ this.oldInterceptor = oldInterceptor;
+ }
+
+ private boolean isApplicable(Class type, JSONObject json) {
+ if (Modifier.isAbstract(type.getModifiers())) {
+ LOGGER.log(Level.FINER, "ignoring abstract {0} {1}", new Object[] {type.getName(), json});
+ return false;
+ }
+ if (!Describable.class.isAssignableFrom(type)) {
+ LOGGER.log(Level.FINER, "ignoring non-Describable {0} {1}", new Object[] {type.getName(), json});
+ return false;
+ }
+ if (processed.containsKey(json)) {
+ LOGGER.log(Level.FINER, "already processed {0} {1}", new Object[] {type.getName(), json});
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public Object instantiate(Class actualType, JSONObject json) {
+ if (isApplicable(actualType, json)) {
+ LOGGER.log(Level.FINE, "switching to newInstance {0} {1}", new Object[] {actualType.getName(), json});
+ try {
+ return Jenkins.getActiveInstance().getDescriptor(actualType).newInstance(Stapler.getCurrentRequest(), json);
+ } catch (Exception x) {
+ LOGGER.log(Level.WARNING, "falling back to default instantiation " + actualType.getName() + " " + json, x);
+ // If nested objects are not using newInstance, bindJSON will wind up throwing the same exception anyway,
+ // so logging above will result in a duplicated stack trace.
+ // However if they *are* then this is the only way to find errors in that newInstance.
+ // Normally oldInterceptor.instantiate will just return DEFAULT, not actually do anything,
+ // so we cannot try calling the default instantiation and then decide which problem to report.
+ }
+ }
+ return oldInterceptor.instantiate(actualType, json);
+ }
+
+ @Override
+ public Object onConvert(Type targetType, Class targetTypeErasure, Object jsonSource) {
+ if (jsonSource instanceof JSONObject) {
+ JSONObject json = (JSONObject) jsonSource;
+ if (isApplicable(targetTypeErasure, json)) {
+ LOGGER.log(Level.FINE, "switching to newInstance {0} {1}", new Object[] {targetTypeErasure.getName(), json});
+ try {
+ return Jenkins.getActiveInstance().getDescriptor(targetTypeErasure).newInstance(Stapler.getCurrentRequest(), json);
+ } catch (Exception x) {
+ LOGGER.log(Level.WARNING, "falling back to default instantiation " + targetTypeErasure.getName() + " " + json, x);
+ }
+ }
+ } else {
+ LOGGER.log(Level.FINER, "ignoring non-object {0}", jsonSource);
+ }
+ return oldInterceptor.onConvert(targetType, targetTypeErasure, jsonSource);
+ }
+
+ }
+
/**
* Look out for a typical error a plugin developer makes.
* See http://hudson.361315.n4.nabble.com/Help-Hint-needed-Post-build-action-doesn-t-stay-activated-td2308833.html
diff --git a/core/src/main/java/hudson/model/DirectoryBrowserSupport.java b/core/src/main/java/hudson/model/DirectoryBrowserSupport.java
index 16dacc90a2..8be60142d0 100644
--- a/core/src/main/java/hudson/model/DirectoryBrowserSupport.java
+++ b/core/src/main/java/hudson/model/DirectoryBrowserSupport.java
@@ -47,6 +47,8 @@ import jenkins.util.VirtualFile;
import org.apache.commons.io.IOUtils;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
+import org.kohsuke.accmod.Restricted;
+import org.kohsuke.accmod.restrictions.NoExternalUse;
import org.kohsuke.stapler.HttpResponse;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
@@ -309,6 +311,17 @@ public final class DirectoryBrowserSupport implements HttpResponse {
// pseudo file name to let the Stapler set text/plain
rsp.serveFile(req, in, lastModified, -1, length, "plain.txt");
} else {
+ String csp = System.getProperty(DirectoryBrowserSupport.class.getName() + ".CSP");
+ if (csp == null) {
+ // default value unless overridden with system property
+ csp = DEFAULT_CSP_VALUE;
+ }
+ if (!csp.trim().equals("")) {
+ // allow users to prevent sending this header by setting empty system property
+ for (String header : new String[]{"Content-Security-Policy", "X-WebKit-CSP", "X-Content-Security-Policy"}) {
+ rsp.setHeader(header, csp);
+ }
+ }
rsp.serveFile(req, in, lastModified, -1, length, baseFile.getName() );
}
}
@@ -576,4 +589,7 @@ public final class DirectoryBrowserSupport implements HttpResponse {
private static final Logger LOGGER = Logger.getLogger(DirectoryBrowserSupport.class.getName());
+
+ @Restricted(NoExternalUse.class)
+ public static final String DEFAULT_CSP_VALUE = "sandbox; default-src 'none'; img-src 'self'; style-src 'self';";
}
diff --git a/core/src/main/java/hudson/model/JobProperty.java b/core/src/main/java/hudson/model/JobProperty.java
index d664fe8e82..2c982286e4 100644
--- a/core/src/main/java/hudson/model/JobProperty.java
+++ b/core/src/main/java/hudson/model/JobProperty.java
@@ -25,7 +25,6 @@ package hudson.model;
import hudson.ExtensionPoint;
import hudson.Launcher;
-import hudson.Plugin;
import hudson.model.Descriptor.FormException;
import hudson.model.queue.SubTask;
import hudson.tasks.BuildStep;
@@ -49,7 +48,7 @@ import javax.annotation.Nonnull;
* Extensible property of {@link Job}.
*
*
- * {@link Plugin}s can extend this to define custom properties
+ * Plugins can extend this to define custom properties
* for {@link Job}s. {@link JobProperty}s show up in the user
* configuration screen, and they are persisted with the job object.
*
diff --git a/core/src/main/java/hudson/model/Node.java b/core/src/main/java/hudson/model/Node.java
index bdb4f8660f..ac3f069945 100644
--- a/core/src/main/java/hudson/model/Node.java
+++ b/core/src/main/java/hudson/model/Node.java
@@ -57,6 +57,7 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Logger;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -470,10 +471,13 @@ public abstract class Node extends AbstractModelObject implements Reconfigurable
if (form==null) return null;
final JSONObject jsonForProperties = form.optJSONObject("nodeProperties");
- BindInterceptor old = req.setBindListener(new BindInterceptor() {
+ final AtomicReference old = new AtomicReference<>();
+ old.set(req.setBindListener(new BindInterceptor() {
@Override
public Object onConvert(Type targetType, Class targetTypeErasure, Object jsonSource) {
- if (jsonForProperties!=jsonSource) return DEFAULT;
+ if (jsonForProperties != jsonSource) {
+ return old.get().onConvert(targetType, targetTypeErasure, jsonSource);
+ }
try {
DescribableList, NodePropertyDescriptor> tmp = new DescribableList, NodePropertyDescriptor>(Saveable.NOOP,getNodeProperties().toList());
@@ -485,12 +489,12 @@ public abstract class Node extends AbstractModelObject implements Reconfigurable
throw new IllegalArgumentException(e);
}
}
- });
+ }));
try {
return getDescriptor().newInstance(req, form);
} finally {
- req.setBindListener(old);
+ req.setBindListener(old.get());
}
}
diff --git a/core/src/main/java/hudson/model/PageDecorator.java b/core/src/main/java/hudson/model/PageDecorator.java
index 550db5805d..5411b346b5 100644
--- a/core/src/main/java/hudson/model/PageDecorator.java
+++ b/core/src/main/java/hudson/model/PageDecorator.java
@@ -24,7 +24,6 @@
package hudson.model;
import hudson.ExtensionPoint;
-import hudson.Plugin;
import hudson.Extension;
import hudson.ExtensionList;
import hudson.util.DescriptorList;
@@ -45,7 +44,7 @@ import java.util.List;
*
*
Life-cycle
*
- * {@link Plugin}s that contribute this extension point
+ * Plugins that contribute this extension point
* should implement a new decorator and put {@link Extension} on the class.
*
*
Associated Views
diff --git a/core/src/main/java/hudson/model/Queue.java b/core/src/main/java/hudson/model/Queue.java
index f66303efa5..4f783ff8b9 100644
--- a/core/src/main/java/hudson/model/Queue.java
+++ b/core/src/main/java/hudson/model/Queue.java
@@ -64,6 +64,8 @@ import hudson.model.queue.CauseOfBlockage.BecauseNodeIsOffline;
import hudson.model.queue.CauseOfBlockage.BecauseLabelIsOffline;
import hudson.model.queue.CauseOfBlockage.BecauseNodeIsBusy;
import hudson.model.queue.WorkUnitContext;
+import hudson.security.AccessControlled;
+import hudson.security.Permission;
import jenkins.security.QueueItemAuthenticatorProvider;
import jenkins.util.Timer;
import hudson.triggers.SafeTimerTask;
@@ -783,25 +785,26 @@ public class Queue extends ResourceController implements Saveable {
List r = new ArrayList();
for(WaitingItem p : s.waitingList) {
- r = filterItemListBasedOnPermissions(r, p);
+ r = checkPermissionsAndAddToList(r, p);
}
for (BlockedItem p : s.blockedProjects){
- r = filterItemListBasedOnPermissions(r, p);
+ r = checkPermissionsAndAddToList(r, p);
}
for (BuildableItem p : reverse(s.buildables)) {
- r = filterItemListBasedOnPermissions(r, p);
+ r = checkPermissionsAndAddToList(r, p);
}
for (BuildableItem p : reverse(s.pendings)) {
- r= filterItemListBasedOnPermissions(r, p);
+ r= checkPermissionsAndAddToList(r, p);
}
Item[] items = new Item[r.size()];
r.toArray(items);
return items;
}
- private List filterItemListBasedOnPermissions(List r, Item t) {
- if (t.task instanceof hudson.model.Item) {
- if (((hudson.model.Item)t.task).hasPermission(hudson.model.Item.READ)) {
+ private List checkPermissionsAndAddToList(List r, Item t) {
+ if (t.task instanceof hudson.security.AccessControlled) {
+ if (((hudson.security.AccessControlled)t.task).hasPermission(hudson.model.Item.READ)
+ || ((hudson.security.AccessControlled) t.task).hasPermission(hudson.security.Permission.READ)) {
r.add(t);
}
}
@@ -1436,9 +1439,13 @@ public class Queue extends ResourceController implements Saveable {
// we need to clear lost pendings as we cannot know what work unit was on this executor
// while it is interrupted. (All this dancing is a result of Executor extending Thread)
lostPendings.clear(); // we'll get them next time around when the flag is cleared.
+ LOGGER.log(Level.FINEST,
+ "Interrupt thread for executor {0} is set and we do not know what work unit was on the executor.",
+ e.getDisplayName());
continue;
}
if (e.isParking()) {
+ LOGGER.log(Level.FINEST, "{0} is parking and is waiting for a job to execute.", e.getDisplayName());
parked.put(e, new JobOffer(e));
}
final WorkUnit workUnit = e.getCurrentWorkUnit();
@@ -1470,7 +1477,13 @@ public class Queue extends ResourceController implements Saveable {
Collections.sort(blockedItems, QueueSorter.DEFAULT_BLOCKED_ITEM_COMPARATOR);
}
for (BlockedItem p : blockedItems) {
+ String taskDisplayName = p.task.getFullDisplayName();
+ LOGGER.log(Level.FINEST, "Current blocked item: {0}", taskDisplayName);
if (!isBuildBlocked(p) && allowNewBuildableTask(p.task)) {
+ LOGGER.log(Level.FINEST,
+ "BlockedItem {0}: blocked -> buildable as the build is not blocked and new tasks are allowed",
+ taskDisplayName);
+
// ready to be executed
Runnable r = makeBuildable(new BuildableItem(p));
if (r != null) {
@@ -1489,17 +1502,22 @@ public class Queue extends ResourceController implements Saveable {
while (!waitingList.isEmpty()) {
WaitingItem top = peek();
- if (top.timestamp.compareTo(new GregorianCalendar()) > 0)
+ if (top.timestamp.compareTo(new GregorianCalendar()) > 0) {
+ LOGGER.log(Level.FINEST, "Finished moving all ready items from queue.");
break; // finished moving all ready items from queue
+ }
top.leave(this);
Task p = top.task;
if (!isBuildBlocked(top) && allowNewBuildableTask(p)) {
// ready to be executed immediately
Runnable r = makeBuildable(new BuildableItem(top));
+ String topTaskDisplayName = top.task.getFullDisplayName();
if (r != null) {
+ LOGGER.log(Level.FINEST, "Executing runnable {0}", topTaskDisplayName);
r.run();
} else {
+ LOGGER.log(Level.FINEST, "Item {0} was unable to be made a buildable and is now a blocked item.", topTaskDisplayName);
new BlockedItem(top).enter(this);
}
} else {
@@ -1529,19 +1547,27 @@ public class Queue extends ResourceController implements Saveable {
continue;
}
+ String taskDisplayName = p.task.getFullDisplayName();
+
if (p.task instanceof FlyweightTask) {
Runnable r = makeFlyWeightTaskBuildable(new BuildableItem(p));
if (r != null) {
p.leave(this);
+ LOGGER.log(Level.FINEST, "Executing flyweight task {0}", taskDisplayName);
r.run();
updateSnapshot();
}
} else {
List candidates = new ArrayList(parked.size());
- for (JobOffer j : parked.values())
- if (j.canTake(p))
+ for (JobOffer j : parked.values()) {
+ if (j.canTake(p)) {
+ LOGGER.log(Level.FINEST,
+ "{0} is a potential candidate for task {1}",
+ new Object[]{j.executor.getDisplayName(), taskDisplayName});
candidates.add(j);
+ }
+ }
MappingWorksheet ws = new MappingWorksheet(p, candidates);
Mapping m = loadBalancer.map(p.task, ws);
@@ -1556,14 +1582,16 @@ public class Queue extends ResourceController implements Saveable {
// found a matching executor. use it.
WorkUnitContext wuc = new WorkUnitContext(p);
+ LOGGER.log(Level.FINEST, "Found a matching executor for {0}. Using it.", taskDisplayName);
m.execute(wuc);
p.leave(this);
if (!wuc.getWorkUnits().isEmpty()) {
+ LOGGER.log(Level.FINEST, "BuildableItem {0} marked as pending.", taskDisplayName);
makePending(p);
}
else
- LOGGER.log(Level.FINE, "BuildableItem {0} with empty work units!?", p);
+ LOGGER.log(Level.FINEST, "BuildableItem {0} with empty work units!?", p);
// Ensure that identification of blocked tasks is using the live state: JENKINS-27708 & JENKINS-27871
// The creation of a snapshot itself should be relatively cheap given the expected rate of
@@ -1590,10 +1618,11 @@ public class Queue extends ResourceController implements Saveable {
*/
private @CheckForNull Runnable makeBuildable(final BuildableItem p) {
if (p.task instanceof FlyweightTask) {
+ String taskDisplayName = p.task.getFullDisplayName();
if (!isBlockedByShutdown(p.task)) {
Runnable runnable = makeFlyWeightTaskBuildable(p);
-
+ LOGGER.log(Level.FINEST, "Converting flyweight task: {0} into a BuildableRunnable", taskDisplayName);
if(runnable != null){
return runnable;
}
@@ -1602,9 +1631,11 @@ public class Queue extends ResourceController implements Saveable {
//if the execution gets here, it means the task could not be scheduled since the node
//the task is supposed to run on is offline or not available.
//Thus, the flyweighttask enters the buildables queue and will ask Jenkins to provision a node
+ LOGGER.log(Level.FINEST, "Flyweight task {0} is entering as buildable to provision a node.", taskDisplayName);
return new BuildableRunnable(p);
}
// if the execution gets here, it means the task is blocked by shutdown and null is returned.
+ LOGGER.log(Level.FINEST, "Task {0} is blocked by shutdown.", taskDisplayName);
return null;
} else {
// regular heavyweight task
@@ -1646,6 +1677,8 @@ public class Queue extends ResourceController implements Saveable {
if (n.canTake(p) != null) {
continue;
}
+
+ LOGGER.log(Level.FINEST, "Creating flyweight task {0} for computer {1}", new Object[]{p.task.getFullDisplayName(), c.getName()});
return new Runnable() {
@Override public void run() {
c.startFlyWeightTask(new WorkUnitContext(p).createWorkUnit(p.task));
@@ -1729,6 +1762,10 @@ public class Queue extends ResourceController implements Saveable {
* compatibility with future changes to this interface.
*
*
+ * Plugins are encouraged to implement {@link AccessControlled} otherwise
+ * the tasks will be hidden from display in the queue.
+ *
+ *
* For historical reasons, {@link Task} object by itself
* also represents the "primary" sub-task (and as implied by this
* design, a {@link Task} must have at least one sub-task.)
@@ -1780,6 +1817,9 @@ public class Queue extends ResourceController implements Saveable {
/**
* Checks the permission to see if the current user can abort this executable.
* Returns normally from this method if it's OK.
+ *
+ * NOTE: If you have implemented {@link AccessControlled} this should just be
+ * {@code checkPermission(hudson.model.Item.CANCEL);}
*
* @throws AccessDeniedException if the permission is not granted.
*/
@@ -1789,6 +1829,12 @@ public class Queue extends ResourceController implements Saveable {
* Works just like {@link #checkAbortPermission()} except it indicates the status by a return value,
* instead of exception.
* Also used by default for {@link hudson.model.Queue.Item#hasCancelPermission}.
+ *
+ * NOTE: If you have implemented {@link AccessControlled} this should just be
+ * {@code return hasPermission(hudson.model.Item.CANCEL);}
+ *
+ * @return false
+ * if the user doesn't have the permission.
*/
boolean hasAbortPermission();
diff --git a/core/src/main/java/hudson/model/UpdateCenter.java b/core/src/main/java/hudson/model/UpdateCenter.java
index c7828aeb48..5360add79e 100644
--- a/core/src/main/java/hudson/model/UpdateCenter.java
+++ b/core/src/main/java/hudson/model/UpdateCenter.java
@@ -55,6 +55,7 @@ import jenkins.model.Jenkins;
import jenkins.util.io.OnMaster;
import org.acegisecurity.Authentication;
import org.acegisecurity.context.SecurityContext;
+import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.input.CountingInputStream;
import org.apache.commons.io.output.NullOutputStream;
import org.jvnet.localizer.Localizable;
@@ -62,9 +63,11 @@ import org.kohsuke.stapler.HttpResponse;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
+import javax.annotation.Nonnull;
import javax.net.ssl.SSLHandshakeException;
import javax.servlet.ServletException;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
@@ -72,6 +75,10 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.UnknownHostException;
+import java.security.DigestInputStream;
+import java.security.DigestOutputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
@@ -749,6 +756,15 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas
* @see DownloadJob
*/
public File download(DownloadJob job, URL src) throws IOException {
+ MessageDigest sha1 = null;
+ try {
+ sha1 = MessageDigest.getInstance("SHA-1");
+ } catch (NoSuchAlgorithmException ignored) {
+ // Irrelevant as the Java spec says SHA-1 must exist. Still, if this fails
+ // the DownloadJob will just have computedSha1 = null and that is expected
+ // to be handled by caller
+ }
+
CountingInputStream in = null;
OutputStream out = null;
URLConnection con = null;
@@ -762,6 +778,9 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas
File dst = job.getDestination();
File tmp = new File(dst.getPath()+".tmp");
out = new FileOutputStream(tmp);
+ if (sha1 != null) {
+ out = new DigestOutputStream(out, sha1);
+ }
LOGGER.info("Downloading "+job.getName());
Thread t = Thread.currentThread();
@@ -775,6 +794,7 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas
} catch (IOException e) {
throw new IOException("Failed to load "+src+" to "+tmp,e);
} finally {
+ IOUtils.closeQuietly(out);
t.setName(oldName);
}
@@ -785,6 +805,10 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas
throw new IOException("Inconsistent file length: expected "+total+" but only got "+tmp.length());
}
+ if (sha1 != null) {
+ byte[] digest = sha1.digest();
+ job.computedSHA1 = Base64.encodeBase64String(digest);
+ }
return tmp;
} catch (IOException e) {
// assist troubleshooting in case of e.g. "too many redirects" by printing actual URL
@@ -1105,6 +1129,17 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas
*/
protected abstract void onSuccess();
+ /**
+ * During download, an attempt is made to compute the SHA-1 checksum of the file.
+ *
+ * @since TODO
+ */
+ @CheckForNull
+ protected String getComputedSHA1() {
+ return computedSHA1;
+ }
+
+ private String computedSHA1;
private Authentication authentication;
@@ -1256,6 +1291,26 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas
}
}
+ /**
+ * If expectedSHA1 is non-null, ensure that actualSha1 is the same value, otherwise throw.
+ *
+ * Utility method for InstallationJob and HudsonUpgradeJob.
+ *
+ * @throws IOException when checksums don't match, or actual checksum was null.
+ */
+ private void verifyChecksums(String expectedSHA1, String actualSha1, File downloadedFile) throws IOException {
+ if (expectedSHA1 != null) {
+ if (actualSha1 == null) {
+ // refuse to install if SHA-1 could not be computed
+ throw new IOException("Failed to compute SHA-1 of downloaded file, refusing installation");
+ }
+ if (!expectedSHA1.equals(actualSha1)) {
+ throw new IOException("Downloaded file " + downloadedFile.getAbsolutePath() + " does not match expected SHA-1, expected '" + expectedSHA1 + "', actual '" + actualSha1 + "'");
+ // keep 'downloadedFile' around for investigating what's going on
+ }
+ }
+ }
+
/**
* Represents the state of the installation activity of one plugin.
*/
@@ -1348,18 +1403,24 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas
*/
@Override
protected void replace(File dst, File src) throws IOException {
- File bak = Util.changeExtension(dst,".bak");
-
+
+ verifyChecksums(plugin.getSha1(), getComputedSHA1(), src);
+
+ File bak = Util.changeExtension(dst, ".bak");
bak.delete();
+
final File legacy = getLegacyDestination();
- if(legacy.exists()){
- legacy.renameTo(bak);
- }else{
- dst.renameTo(bak);
+ if (legacy.exists()) {
+ if (!legacy.renameTo(bak)) {
+ legacy.delete();
+ }
}
- legacy.delete();
- dst.delete(); // any failure up to here is no big deal
-
+ if (dst.exists()) {
+ if (!dst.renameTo(bak)) {
+ dst.delete();
+ }
+ }
+
if(!src.renameTo(dst)) {
throw new IOException("Failed to rename "+src+" to "+dst);
}
@@ -1477,6 +1538,8 @@ public class UpdateCenter extends AbstractModelObject implements Saveable, OnMas
@Override
protected void replace(File dst, File src) throws IOException {
+ String expectedSHA1 = site.getData().core.getSha1();
+ verifyChecksums(expectedSHA1, getComputedSHA1(), src);
Lifecycle.get().rewriteHudsonWar(src);
}
}
diff --git a/core/src/main/java/hudson/model/UpdateSite.java b/core/src/main/java/hudson/model/UpdateSite.java
index 57c44f0522..de3cd05406 100644
--- a/core/src/main/java/hudson/model/UpdateSite.java
+++ b/core/src/main/java/hudson/model/UpdateSite.java
@@ -27,7 +27,7 @@ package hudson.model;
import hudson.PluginManager;
import hudson.PluginWrapper;
-import jenkins.util.SystemProperties;
+import hudson.Util;
import hudson.lifecycle.Lifecycle;
import hudson.model.UpdateCenter.UpdateCenterJob;
import hudson.util.FormValidation;
@@ -58,6 +58,7 @@ import javax.annotation.Nonnull;
import jenkins.model.Jenkins;
import jenkins.model.DownloadSettings;
import jenkins.util.JSONSignatureValidator;
+import jenkins.util.SystemProperties;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import org.apache.commons.io.IOUtils;
@@ -127,6 +128,8 @@ public class UpdateSite {
*/
private final String url;
+
+
public UpdateSite(String id, String url) {
this.id = id;
this.url = url;
@@ -509,6 +512,11 @@ public class UpdateSite {
@Exported
public final String url;
+
+ // non-private, non-final for test
+ @Restricted(NoExternalUse.class)
+ /* final */ String sha1;
+
public Entry(String sourceId, JSONObject o) {
this(sourceId, o, null);
}
@@ -517,6 +525,11 @@ public class UpdateSite {
this.sourceId = sourceId;
this.name = o.getString("name");
this.version = o.getString("version");
+
+ // Trim this to prevent issues when the other end used Base64.encodeBase64String that added newlines
+ // to the end in old commons-codec. Not the case on updates.jenkins-ci.org, but let's be safe.
+ this.sha1 = Util.fixEmptyAndTrim(o.optString("sha1"));
+
String url = o.getString("url");
if (!URI.create(url).isAbsolute()) {
if (baseURL == null) {
@@ -527,6 +540,16 @@ public class UpdateSite {
this.url = url;
}
+ /**
+ * The base64 encoded binary SHA-1 checksum of the file.
+ * Can be null if not provided by the update site.
+ * @since TODO
+ */
+ // TODO @Exported assuming we want this in the API
+ public String getSha1() {
+ return sha1;
+ }
+
/**
* Checks if the specified "current version" is older than the version of this entry.
*
diff --git a/core/src/main/java/hudson/model/UserProperty.java b/core/src/main/java/hudson/model/UserProperty.java
index 3400bb27ee..0f0958d95c 100644
--- a/core/src/main/java/hudson/model/UserProperty.java
+++ b/core/src/main/java/hudson/model/UserProperty.java
@@ -24,7 +24,6 @@
package hudson.model;
import hudson.ExtensionPoint;
-import hudson.Plugin;
import hudson.DescriptorExtensionList;
import hudson.model.Descriptor.FormException;
import jenkins.model.Jenkins;
@@ -37,7 +36,7 @@ import org.kohsuke.stapler.export.ExportedBean;
* Extensible property of {@link User}.
*
*
- * {@link Plugin}s can extend this to define custom properties
+ * Plugins can extend this to define custom properties
* for {@link User}s. {@link UserProperty}s show up in the user
* configuration screen, and they are persisted with the user object.
*
diff --git a/core/src/main/java/hudson/model/queue/AbstractQueueTask.java b/core/src/main/java/hudson/model/queue/AbstractQueueTask.java
index d3586384f0..7a1bae3f7a 100644
--- a/core/src/main/java/hudson/model/queue/AbstractQueueTask.java
+++ b/core/src/main/java/hudson/model/queue/AbstractQueueTask.java
@@ -27,6 +27,7 @@ package hudson.model.queue;
import hudson.model.Queue;
import hudson.model.Queue.Task;
import hudson.security.ACL;
+import hudson.security.AccessControlled;
import org.acegisecurity.Authentication;
import javax.annotation.Nonnull;
@@ -37,6 +38,10 @@ import java.util.Collections;
* Abstract base class for {@link hudson.model.Queue.Task} to protect plugins
* from new additions to the interface.
*
+ *
+ * Plugins are encouraged to implement {@link AccessControlled} otherwise
+ * the tasks will be hidden from display in the queue.
+ *
* @author Kohsuke Kawaguchi
* @since 1.360
*/
diff --git a/core/src/main/java/hudson/security/csrf/CrumbFilter.java b/core/src/main/java/hudson/security/csrf/CrumbFilter.java
index 9cecfa5daa..8e0fe64cb6 100644
--- a/core/src/main/java/hudson/security/csrf/CrumbFilter.java
+++ b/core/src/main/java/hudson/security/csrf/CrumbFilter.java
@@ -81,8 +81,8 @@ public class CrumbFilter implements Filter {
LOGGER.log(Level.WARNING, "Found invalid crumb {0}. Will check remaining parameters for a valid one...", crumb);
}
}
- // Multipart requests need to be handled by each handler.
- if (valid || isMultipart(httpRequest)) {
+
+ if (valid) {
chain.doFilter(request, response);
} else {
LOGGER.log(Level.WARNING, "No valid crumb was included in request for {0}. Returning {1}.", new Object[] {httpRequest.getRequestURI(), HttpServletResponse.SC_FORBIDDEN});
diff --git a/core/src/main/java/hudson/tools/JDKInstaller.java b/core/src/main/java/hudson/tools/JDKInstaller.java
index 3ad212a0db..9072437af8 100644
--- a/core/src/main/java/hudson/tools/JDKInstaller.java
+++ b/core/src/main/java/hudson/tools/JDKInstaller.java
@@ -512,7 +512,7 @@ public class JDKInstaller extends ToolInstaller {
m = post;
} else {
- log.getLogger().println("Downloading " + m.getResponseContentLength() + "bytes");
+ log.getLogger().println("Downloading " + m.getResponseContentLength() + " bytes");
// download to a temporary file and rename it in to handle concurrency and failure correctly,
File tmp = new File(cache.getPath()+".tmp");
diff --git a/core/src/main/java/hudson/triggers/TimerTrigger.java b/core/src/main/java/hudson/triggers/TimerTrigger.java
index 1925f00b90..c2a3ee4574 100644
--- a/core/src/main/java/hudson/triggers/TimerTrigger.java
+++ b/core/src/main/java/hudson/triggers/TimerTrigger.java
@@ -34,7 +34,10 @@ import hudson.scheduler.CronTabList;
import hudson.scheduler.Hash;
import hudson.util.FormValidation;
import java.text.DateFormat;
+import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Collection;
+
import org.kohsuke.stapler.AncestorInPath;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.QueryParameter;
@@ -83,22 +86,32 @@ public class TimerTrigger extends Trigger {
public FormValidation doCheckSpec(@QueryParameter String value, @AncestorInPath Item item) {
try {
CronTabList ctl = CronTabList.create(fixNull(value), item != null ? Hash.from(item.getFullName()) : null);
- String msg = ctl.checkSanity();
- if(msg!=null) return FormValidation.warning(msg);
- Calendar prev = ctl.previous();
- Calendar next = ctl.next();
- if (prev != null && next != null) {
- DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
- return FormValidation.ok(Messages.TimerTrigger_would_last_have_run_at_would_next_run_at(fmt.format(prev.getTime()), fmt.format(next.getTime())));
- } else {
- return FormValidation.warning(Messages.TimerTrigger_no_schedules_so_will_never_run());
- }
+ Collection validations = new ArrayList<>();
+ updateValidationsForSanity(validations, ctl);
+ updateValidationsForNextRun(validations, ctl);
+ return FormValidation.aggregate(validations);
} catch (ANTLRException e) {
if (value.trim().indexOf('\n')==-1 && value.contains("**"))
return FormValidation.error(Messages.TimerTrigger_MissingWhitespace());
return FormValidation.error(e.getMessage());
}
}
+
+ private void updateValidationsForSanity(Collection validations, CronTabList ctl) {
+ String msg = ctl.checkSanity();
+ if(msg!=null) validations.add(FormValidation.warning(msg));
+ }
+
+ private void updateValidationsForNextRun(Collection validations, CronTabList ctl) {
+ Calendar prev = ctl.previous();
+ Calendar next = ctl.next();
+ if (prev != null && next != null) {
+ DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
+ validations.add(FormValidation.ok(Messages.TimerTrigger_would_last_have_run_at_would_next_run_at(fmt.format(prev.getTime()), fmt.format(next.getTime()))));
+ } else {
+ validations.add(FormValidation.warning(Messages.TimerTrigger_no_schedules_so_will_never_run()));
+ }
+ }
}
public static class TimerTriggerCause extends Cause {
diff --git a/core/src/main/java/jenkins/security/s2m/MasterKillSwitchConfiguration.java b/core/src/main/java/jenkins/security/s2m/MasterKillSwitchConfiguration.java
index c5b23e5290..69bb8e34bc 100644
--- a/core/src/main/java/jenkins/security/s2m/MasterKillSwitchConfiguration.java
+++ b/core/src/main/java/jenkins/security/s2m/MasterKillSwitchConfiguration.java
@@ -1,8 +1,6 @@
package jenkins.security.s2m;
import hudson.Extension;
-import hudson.ExtensionList;
-import hudson.ExtensionPoint;
import javax.inject.Inject;
import jenkins.model.GlobalConfiguration;
import jenkins.model.GlobalConfigurationCategory;
@@ -48,45 +46,7 @@ public class MasterKillSwitchConfiguration extends GlobalConfiguration {
* Unless this option is relevant, we don't let users choose this.
*/
public boolean isRelevant() {
- if (rule.getMasterKillSwitch()) {
- return true; // always relevant if it is enabled.
- }
- return jenkins.isUseSecurity() // if security is off, there's no point
- && (jenkins.getComputers().length>1 // if there's no slave,
- || !jenkins.clouds.isEmpty() // and no clouds, likewise this is pointless
- || Relevance.fromExtension() // unless a plugin thinks otherwise
- )
- ;
- }
-
- /**
- * Some plugins may cause the {@link MasterKillSwitchConfiguration} to be relevant for additional reasons,
- * by implementing this extension point they can indicate such additional conditions.
- *
- * @since FIXME
- */
- public static abstract class Relevance implements ExtensionPoint {
-
- /**
- * Is the {@link MasterKillSwitchConfiguration} relevant.
- *
- * @return {@code true} if the {@link MasterKillSwitchConfiguration} relevant.
- */
- public abstract boolean isRelevant();
-
- /**
- * Is the {@link MasterKillSwitchConfiguration} relevant for any of the {@link Relevance} extensions.
- *
- * @return {@code true} if and only if {@link Relevance#isRelevant()} for at least one extension.
- */
- public static boolean fromExtension() {
- for (Relevance r : ExtensionList.lookup(Relevance.class)) {
- if (r.isRelevant()) {
- return true;
- }
- }
- return false;
- }
+ return jenkins.hasPermission(Jenkins.RUN_SCRIPTS) && jenkins.isUseSecurity();
}
}
diff --git a/core/src/main/resources/hudson/Messages_bg.properties b/core/src/main/resources/hudson/Messages_bg.properties
new file mode 100644
index 0000000000..3f7b19a557
--- /dev/null
+++ b/core/src/main/resources/hudson/Messages_bg.properties
@@ -0,0 +1,108 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+FilePath.did_not_manage_to_validate_may_be_too_sl=\
+ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u0442\u0430 \u043d\u0430 \u201e{0}\u201c \u043d\u0435 \u0435 \u0437\u0430\u0432\u044a\u0440\u0448\u0438\u043b\u0430, \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440\u044a\u0442 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0435 \u043f\u0440\u0435\u043a\u0430\u043b\u0435\u043d\u043e \u0431\u0430\u0432\u0435\u043d.
+FilePath.validateAntFileMask.whitespaceSeprator=\
+ \u041f\u0440\u0430\u0437\u043d\u0438\u0442\u0435 \u0437\u043d\u0430\u0446\u0438 \u0432\u0435\u0447\u0435 \u043d\u0435 \u0441\u0435 \u043f\u043e\u043b\u0437\u0432\u0430\u0442 \u0437\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438. \u041f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043f\u0435\u0442\u0430\u044f \u2014 \u201e,\u201c.
+FilePath.validateAntFileMask.doesntMatchAndSuggest=\
+ \u201e{0}\u201c \u043d\u0435 \u0441\u044a\u0432\u043f\u0430\u0434\u0430 \u0441 \u043d\u0438\u0449\u043e, \u043d\u043e \u201e{1}\u201c \u0441\u044a\u0432\u043f\u0430\u0434\u0430. \u0422\u043e\u0432\u0430 \u043b\u0438 \u0438\u043c\u0430\u0445\u0442\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434?
+FilePath.validateAntFileMask.portionMatchAndSuggest=\
+ \u201e{0}\u201c \u043d\u0435 \u0441\u044a\u0432\u043f\u0430\u0434\u0430 \u0441 \u043d\u0438\u0449\u043e, \u043d\u043e \u201e{1}\u201c \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430.
+FilePath.validateAntFileMask.portionMatchButPreviousNotMatchAndSuggest=\
+ \u201e{0}\u201c \u043d\u0435 \u0441\u044a\u0432\u043f\u0430\u0434\u0430 \u0441 \u043d\u0438\u0449\u043e: \u201e{1}\u201c \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430, \u043d\u043e \u043d\u0435 \u0438 \u201e{1}\u201c.
+FilePath.validateAntFileMask.doesntMatchAnything=\
+ \u201e{0}\u201c \u043d\u0435 \u0441\u044a\u0432\u043f\u0430\u0434\u0430 \u0441 \u043d\u0438\u0449\u043e.
+FilePath.validateAntFileMask.matchWithCaseInsensitive=\
+ \u201e{0}\u201c \u043d\u0435 \u0441\u044a\u0432\u043f\u0430\u0434\u0430 \u0441 \u043d\u0438\u0449\u043e, \u0437\u0430\u0449\u043e\u0442\u043e \u043f\u0440\u0430\u0432\u0438 \u0440\u0430\u0437\u043b\u0438\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u0433\u043b\u0430\u0432\u043d\u0438 \u0438 \u043c\u0430\u043b\u043a\u0438 \u0431\u0443\u043a\u0432\u0438.\
+ \u041c\u043e\u0436\u0435 \u0434\u0430 \u0438\u0437\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0432\u0430\u043d\u0435\u0442\u043e, \u0437\u0430 \u0434\u0430 \u0438\u043c\u0430 \u0441\u044a\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f.
+FilePath.validateAntFileMask.doesntMatchAnythingAndSuggest=\
+ \u201e{0}\u201c \u043d\u0435 \u0441\u044a\u0432\u043f\u0430\u0434\u0430 \u0441 \u043d\u0438\u0449\u043e, \u0434\u043e\u0440\u0438 \u0438 \u201e{1}\u201c \u043d\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430.
+
+FilePath.validateRelativePath.wildcardNotAllowed=\
+ \u0417\u043d\u0430\u043a\u044a\u0442 \u201e*\u201c \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043f\u043e\u043b\u0437\u0432\u0430
+FilePath.validateRelativePath.notFile=\
+ \u201e{0}\u201c \u043d\u0435 \u0435 \u0444\u0430\u0439\u043b
+FilePath.validateRelativePath.notDirectory=\
+ \u201e{0}\u201c \u043d\u0435 \u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f
+FilePath.validateRelativePath.noSuchFile=\
+ \u041b\u0438\u043f\u0441\u0432\u0430 \u0444\u0430\u0439\u043b \u201e{0}\u201c
+FilePath.validateRelativePath.noSuchDirectory=\
+ \u041b\u0438\u043f\u0441\u0432\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u201e{0}\u201c
+
+PluginManager.PluginDoesntSupportDynamicLoad.RestartRequired=\
+ \u041f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u201e{0}\u201c \u043d\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435. \u041f\u0440\u043e\u043c\u044f\u043d\u0430\u0442\u0430 \u043d\u0430\u043b\u0430\u0433\u0430\
+ \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Jenkins.
+PluginManager.PluginIsAlreadyInstalled.RestartRequired=\
+ \u041f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u201e{0}\u201c \u0432\u0435\u0447\u0435 \u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0430. \u041f\u0440\u043e\u043c\u044f\u043d\u0430\u0442\u0430 \u043d\u0430\u043b\u0430\u0433\u0430 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Jenkins
+Util.millisecond=\
+ {0} {0,choice,0#\u043c\u0438\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0438|1#\u043c\u0438\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430|1<\u043c\u0438\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0438}
+Util.second=\
+ {0} {0,choice,0#\u0441\u0435\u043a\u0443\u043d\u0434\u0438|1#\u0441\u0435\u043a\u0443\u043d\u0434\u0430|1\u0441\u0435\u043a\u0443\u043d\u0434\u0438}
+Util.minute=\
+ {0} {0,choice,0#\u043c\u0438\u043d\u0443\u0442\u0438|1#\u043c\u0438\u043d\u0443\u0442\u0430|1<\u043c\u0438\u043d\u0443\u0442\u0438}
+Util.hour =\
+ {0} {0,choice,0#\u0447\u0430\u0441\u0430|1#\u0447\u0430\u0441|1<\u0447\u0430\u0441\u0430}
+Util.day =\
+ {0} {0,choice,0#\u0434\u043d\u0438|1#\u0434\u0435\u043d|1<\u0434\u043d\u0438}
+Util.month =\
+ {0} {0,choice,0#\u043c\u0435\u0441\u0435\u0446\u0430|1#\u043c\u0435\u0441\u0435\u0446|1<\u043c\u0435\u0441\u0435\u0446\u0430}
+Util.year =\
+ {0} {0,choice,0#\u0433\u043e\u0434\u0438\u043d\u0438|1#\u0433\u043e\u0434\u0438\u043d\u0430|1<\u0433\u043e\u0434\u0438\u043d\u0438}
+
+# ideally it should be "{0} ago" but this saves more space
+# another implication of this is that where we use this,
+# we often want to add "ago" there
+Util.pastTime=\
+ {0}
+FilePath.TildaDoesntWork=\
+ \u201e~\u201c \u0441\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0441\u0430\u043c\u043e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0438\u0442\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0438 \u043d\u0430 Unix \u0438 \u043d\u0438\u043a\u044a\u0434\u0435 \u0434\u0440\u0443\u0433\u0430\u0434\u0435.
+
+PluginManager.DisplayName=\
+ \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438
+PluginManager.PortNotANumber=\
+ \u0421\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0442\u0430 \u0437\u0430 \u043f\u043e\u0440\u0442\u0430 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0447\u0438\u0441\u043b\u043e
+PluginManager.PortNotInRange=\
+ \u0421\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0442\u0430 \u0437\u0430 \u043f\u043e\u0440\u0442\u0430 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 [{0}; {1}]
+PluginManager.UploadPluginsPermission.Description=\
+ \u041f\u0440\u0430\u0432\u043e\u0442\u043e \u0437\u0430 \u043a\u0430\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438 \u0434\u0430\u0432\u0430 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f \u0434\u0430 \u043a\u0430\u0447\u0438\
+ \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430.
+PluginManager.ConfigureUpdateCenterPermission.Description=\
+ \u041f\u0440\u0430\u0432\u043e\u0442\u043e \u0437\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u0434\u0430\u0432\u0430 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f \u0434\u0430 \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435\
+ \u043d\u0430 \u0441\u0430\u0439\u0442\u043e\u0432\u0435\u0442\u0435 \u0438 \u0441\u044a\u0440\u0432\u044a\u0440\u0430-\u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a.
+
+AboutJenkins.DisplayName=\
+ \u041e\u0442\u043d\u043e\u0441\u043d\u043e Jenkins
+AboutJenkins.Description=\
+ \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0432\u0435\u0440\u0441\u0438\u044f\u0442\u0430 \u0438 \u043b\u0438\u0446\u0435\u043d\u0437\u0430.
+
+ProxyConfiguration.TestUrlRequired=\
+ \u0418\u0437\u0438\u0441\u043a\u0432\u0430 \u0441\u0435 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043f\u0440\u043e\u0431\u0430.
+ProxyConfiguration.FailedToConnectViaProxy=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u043a\u044a\u043c \u201e{0}\u201c.
+ProxyConfiguration.FailedToConnect=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u043a\u044a\u043c \u201e{0}\u201c (\u043a\u043e\u0434: {1}).
+ProxyConfiguration.Success=\
+ \u0423\u0441\u043f\u0435\u0445
+
+Functions.NoExceptionDetails=\
+ \u041d\u044f\u043c\u0430 \u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u0442\u043e.
diff --git a/core/src/main/resources/hudson/cli/Messages.properties b/core/src/main/resources/hudson/cli/Messages.properties
index 1db074afcf..3f73403341 100644
--- a/core/src/main/resources/hudson/cli/Messages.properties
+++ b/core/src/main/resources/hudson/cli/Messages.properties
@@ -85,3 +85,4 @@ DeleteNodeCommand.ShortDescription=Deletes node(s)
ReloadJobCommand.ShortDescription=Reload job(s)
+OnlineNodeCommand.ShortDescription=Resume using a node for performing builds, to cancel out the earlier "offline-node" command.
diff --git a/core/src/main/resources/hudson/cli/Messages_bg.properties b/core/src/main/resources/hudson/cli/Messages_bg.properties
new file mode 100644
index 0000000000..c218a653cf
--- /dev/null
+++ b/core/src/main/resources/hudson/cli/Messages_bg.properties
@@ -0,0 +1,124 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+InstallPluginCommand.DidYouMean=\
+ \u201e{0}\u201c \u0435 \u043a\u0440\u0430\u0442\u043a\u043e \u0438\u043c\u0435 \u0437\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430. \u201e{1}\u201c \u043b\u0438 \u0438\u043c\u0430\u0442\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434?
+InstallPluginCommand.InstallingFromUpdateCenter=\
+ \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u201e{0}\u201c \u043e\u0442 \u0441\u0430\u0439\u0442\u0430 \u0437\u0430 \u043e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435
+InstallPluginCommand.InstallingPluginFromLocalFile=\
+ \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u043e\u0442 \u043b\u043e\u043a\u0430\u043b\u0435\u043d \u0444\u0430\u0439\u043b \u201e{0}\u201c
+InstallPluginCommand.InstallingPluginFromUrl=\
+ \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u201e{0}\u201c
+InstallPluginCommand.NoUpdateCenterDefined=\
+ \u041d\u0435 \u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0441\u0430\u0439\u0442 \u0437\u0430 \u043e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u0432 \u0442\u0430\u0437\u0438 \u0438\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438\u044f \u043d\u0430 Jenkins.
+InstallPluginCommand.NoUpdateDataRetrieved=\
+ \u0412\u0441\u0435 \u043e\u0449\u0435 \u043d\u0435 \u0441\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438 \u043d\u0438\u043a\u0430\u043a\u0432\u0438 \u0434\u0430\u043d\u043d\u0438 \u043e\u0442 \u0446\u0435\u043d\u0442\u044a\u0440\u0430 \u0437\u0430 \u043e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435: {0}
+InstallPluginCommand.NotAValidSourceName=\
+ \u201e{0}\u201c \u043d\u0435 \u0435 \u043d\u0438\u0442\u043e \u0444\u0430\u0439\u043b \u0441 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430, \u043d\u0438\u0442\u043e \u0430\u0434\u0440\u0435\u0441, \u043d\u0438\u0442\u043e \u0438\u043c\u0435 \u043d\u0430 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u043e\u0442 \u0441\u0430\u0439\u0442\u0430 \u0437\u0430\
+ \u043e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435.
+
+AddJobToViewCommand.ShortDescription=\
+ \u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u043a\u044a\u043c \u0438\u0437\u0433\u043b\u0435\u0434.
+BuildCommand.ShortDescription=\
+ \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0438 \u0438\u0437\u0447\u0430\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430\u043d\u0435\u0442\u043e \u045d (\u043f\u043e \u0438\u0437\u0431\u043e\u0440).
+ConsoleCommand.ShortDescription=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0445\u043e\u0434\u0430 \u043e\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u044a\u043c \u043a\u043e\u043d\u0437\u043e\u043b\u0430\u0442\u0430.
+CopyJobCommand.ShortDescription=\
+ \u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.
+CreateJobCommand.ShortDescription=\
+ \u0421\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430 \u0431\u0430\u0437\u0430\u0442\u0430 \u043d\u0430 \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u043d\u043e\u0442\u043e \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u044f \u0432\u0445\u043e\u0434 \u0432\u044a\u0432\
+ \u0444\u043e\u0440\u043c\u0430\u0442 XML.
+CreateNodeCommand.ShortDescription=\
+ \u0421\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0430 \u0431\u0430\u0437\u0430\u0442\u0430 \u043d\u0430 \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u043d\u043e\u0442\u043e \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u044f \u0432\u0445\u043e\u0434 \u0432\u044a\u0432\
+ \u0444\u043e\u0440\u043c\u0430\u0442 XML.
+DeleteBuildsCommand.ShortDescription=\
+ \u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430\u0442\u0430 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430.
+DeleteViewCommand.ShortDescription=\
+ \u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0433\u043b\u0435\u0434\u0438.
+DeleteJobCommand.ShortDescription=\
+ \u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438.
+GroovyCommand.ShortDescription=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Groovy.
+GroovyshCommand.ShortDescription=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043d\u0430 Groovy.
+HelpCommand.ShortDescription=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0438 \u0438\u043b\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430.
+InstallPluginCommand.ShortDescription=\
+ \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u043e\u0442 \u0444\u0430\u0439\u043b, \u0430\u0434\u0440\u0435\u0441 \u0438\u043b\u0438 \u0446\u0435\u043d\u0442\u044a\u0440\u0430 \u0437\u0430 \u043e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435.
+InstallToolCommand.ShortDescription=\
+ \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u0438\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u043c\u0443 \u043d\u0430\
+ \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u044f \u0438\u0437\u0445\u043e\u0434. \u041c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u0432\u0438\u043a\u0432\u0430 \u0441\u0430\u043c\u043e \u043e\u0442 \u0437\u0430\u0434\u0430\u0447\u0430.
+ListChangesCommand.ShortDescription=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0441 \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u0437\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0442\u0435 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f.
+ListJobsCommand.ShortDescription=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0438\u0437\u0433\u043b\u0435\u0434 \u0438\u043b\u0438 \u0433\u0440\u0443\u043f\u0430.
+ListPluginsCommand.ShortDescription=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0441\u043f\u0438\u0441\u044a\u043a\u0430 \u0441 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0438\u0442\u0435 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438.
+LoginCommand.ShortDescription=\
+ \u0417\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438 \u0437\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f, \u0437\u0430 \u0434\u0430 \u043c\u043e\u0433\u0430\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0449\u0438\u0442\u0435\
+ \u043a\u043e\u043c\u0430\u043d\u0434\u0438 \u0434\u0430 \u0441\u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430\u0442, \u0431\u0435\u0437 \u0442\u0435\u0437\u0438 \u0434\u0430\u043d\u043d\u0438 \u0434\u0430 \u0441\u0435 \u0432\u044a\u0432\u0435\u0436\u0434\u0430\u0442 \u043d\u0430\u043d\u043e\u0432\u043e.
+LogoutCommand.ShortDescription=\
+ \u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u0437\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f, \u0437\u0430\u043f\u0430\u0437\u0435\u043d\u0438 \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0442\u0430 \u0437\u0430 \u0432\u043b\u0438\u0437\u0430\u043d\u0435.
+MailCommand.ShortDescription=\
+ \u0418\u0437\u0447\u0438\u0442\u0430\u043d\u0435 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u044f \u0432\u0445\u043e\u0434 \u0438 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435 \u043f\u043e \u0435-\u043f\u043e\u0449\u0430.
+SetBuildDescriptionCommand.ShortDescription=\
+ \u0417\u0430\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435.
+SetBuildParameterCommand.ShortDescription=\
+ \u041f\u0440\u043e\u043c\u044f\u043d\u0430/\u0437\u0430\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u043e\u0442\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435.
+SetBuildResultCommand.ShortDescription=\
+ \u0417\u0430\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0430 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u043e\u0442\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435. \u041c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u0432\u0438\u043a\u0432\u0430 \u0441\u0430\u043c\u043e \u043e\u0442\
+ \u0437\u0430\u0434\u0430\u0447\u0430.
+RemoveJobFromViewCommand.ShortDescription=\
+ \u0418\u0437\u0432\u0430\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0442 \u0438\u0437\u0433\u043b\u0435\u0434.
+VersionCommand.ShortDescription=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f\u0442\u0430 \u043d\u0430 Jenkins.
+GetJobCommand.ShortDescription=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0434\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430\u0442\u0430 \u0432\u044a\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 XML \u043a\u044a\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u044f \u0438\u0437\u0445\u043e\u0434.
+GetNodeCommand.ShortDescription=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0434\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 \u0441\u044a\u0440\u0432\u044a\u0440 \u0432\u044a\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 XML \u043a\u044a\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u044f \u0438\u0437\u0445\u043e\u0434.
+GetViewCommand.ShortDescription=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0434\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u0432\u044a\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 XML \u043a\u044a\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u044f \u0438\u0437\u0445\u043e\u0434.
+SetBuildDisplayNameCommand.ShortDescription=\
+ \u0417\u0430\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u043c\u0435\u0442\u043e (displayName) \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435.
+WhoAmICommand.ShortDescription=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u0437\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438 \u043f\u0440\u0430\u0432\u0430\u0442\u0430.
+UpdateJobCommand.ShortDescription=\
+ \u041e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u044f \u0432\u0445\u043e\u0434 \u0432\u044a\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 XML.\
+ \u041e\u0431\u0440\u0430\u0442\u043d\u043e\u0442\u043e \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0442\u0430 \u201eget-job\u201c.
+UpdateNodeCommand.ShortDescription=\
+ \u041e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 \u0441\u044a\u0440\u0432\u044a\u0440 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u044f \u0432\u0445\u043e\u0434 \u0432\u044a\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 XML.\
+ \u041e\u0431\u0440\u0430\u0442\u043d\u043e\u0442\u043e \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0442\u0430 \u201eget-node\u201c.
+SessionIdCommand.ShortDescription=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043d\u0430 \u0441\u0435\u0441\u0438\u044f\u0442\u0430. \u0422\u043e\u0439 \u0441\u0435 \u0441\u043c\u0435\u043d\u044f \u043f\u0440\u0438 \u0432\u0441\u044f\u043a\u043e \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430\
+ Jenkins.
+UpdateViewCommand.ShortDescription=\
+ \u041e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 \u0438\u0437\u0433\u043b\u0435\u0434 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u044f \u0432\u0445\u043e\u0434 \u0432\u044a\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 XML.\
+ \u041e\u0431\u0440\u0430\u0442\u043d\u043e\u0442\u043e \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0442\u0430 \u201eget-view\u201c.
+
+BuildCommand.CLICause.ShortDescription=\
+ \u0417\u0430\u0434\u0430\u0447\u0430\u0442\u0430 \u0435 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0430 \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0438\u044f \u0440\u0435\u0434 \u043e\u0442 \u201e{0}\u201c
+BuildCommand.CLICause.CannotBuildDisabled=\
+ \u0417\u0430\u0434\u0430\u0447\u0430\u0442\u0430 \u201e{0}\u201c \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u0433\u0440\u0430\u0434\u0438.
+BuildCommand.CLICause.CannotBuildConfigNotSaved=\
+ \u0417\u0430\u0434\u0430\u0447\u0430\u0442\u0430 \u201e{0}\u201c \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u0433\u0440\u0430\u0434\u0438, \u0437\u0430\u0449\u043e\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u045d \u043d\u0435 \u0441\u0430 \u0437\u0430\u043f\u0430\u0437\u0435\u043d\u0438.
+BuildCommand.CLICause.CannotBuildUnknownReasons=\
+ \u0417\u0430\u0434\u0430\u0447\u0430\u0442\u0430 \u201e{0}\u201c \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u0433\u0440\u0430\u0434\u0438 \u043f\u043e \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0438.
diff --git a/core/src/main/resources/hudson/cli/Messages_da.properties b/core/src/main/resources/hudson/cli/Messages_da.properties
index 13079b94be..1bee62f87b 100644
--- a/core/src/main/resources/hudson/cli/Messages_da.properties
+++ b/core/src/main/resources/hudson/cli/Messages_da.properties
@@ -1,2 +1,4 @@
DeleteNodeCommand.ShortDescription=Sletter en node
DeleteJobCommand.ShortDescription=Sletter et job
+
+OnlineNodeCommand.ShortDescription=Genoptag brugen af en byggenode, for at annullere en tidligere udstedt "offline-node" kommando.
diff --git a/core/src/main/resources/hudson/cli/Messages_de.properties b/core/src/main/resources/hudson/cli/Messages_de.properties
index 21643e31c7..4df178a57b 100644
--- a/core/src/main/resources/hudson/cli/Messages_de.properties
+++ b/core/src/main/resources/hudson/cli/Messages_de.properties
@@ -1,2 +1,4 @@
DeleteNodeCommand.ShortDescription=Knoten l\u00f6schen.
DeleteJobCommand.ShortDescription=Job l\u00f6schen.
+
+OnlineNodeCommand.ShortDescription=Knoten wird wieder f\u00fcr neue Builds verwendet. Hebt ein vorausgegangenes "offline-node"-Kommando auf.
diff --git a/core/src/main/resources/hudson/cli/Messages_es.properties b/core/src/main/resources/hudson/cli/Messages_es.properties
index 4703a13dd9..b0f51daa04 100644
--- a/core/src/main/resources/hudson/cli/Messages_es.properties
+++ b/core/src/main/resources/hudson/cli/Messages_es.properties
@@ -50,3 +50,5 @@ SetBuildDescriptionCommand.ShortDescription=Establece la descripci
DeleteJobCommand.ShortDescription=Borrar una tarea
DeleteNodeCommand.ShortDescription=Borrar un nodo
+
+OnlineNodeCommand.ShortDescription=Continuar usando un nodo y candelar el comando "offline-node" mas reciente.
diff --git a/core/src/main/resources/hudson/cli/Messages_it.properties b/core/src/main/resources/hudson/cli/Messages_it.properties
index 6a79e3ab9d..c5010ed77a 100644
--- a/core/src/main/resources/hudson/cli/Messages_it.properties
+++ b/core/src/main/resources/hudson/cli/Messages_it.properties
@@ -1,2 +1,4 @@
DeleteNodeCommand.ShortDescription=Cancella un nodo
DeleteJobCommand.ShortDescription=Cancella un job
+
+OnlineNodeCommand.ShortDescription=Resume using a node for performing builds, to cancel out the earlier "offline-node" command.
diff --git a/core/src/main/resources/hudson/cli/Messages_ja.properties b/core/src/main/resources/hudson/cli/Messages_ja.properties
index a6cdca19f4..908949a71c 100644
--- a/core/src/main/resources/hudson/cli/Messages_ja.properties
+++ b/core/src/main/resources/hudson/cli/Messages_ja.properties
@@ -72,3 +72,5 @@ BuildCommand.CLICause.CannotBuildUnknownReasons=\
DeleteNodeCommand.ShortDescription=\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3057\u307e\u3059\u3002
DeleteJobCommand.ShortDescription=\u30b8\u30e7\u30d6\u3092\u524a\u9664\u3057\u307e\u3059\u3002
+
+OnlineNodeCommand.ShortDescription=\u76f4\u524d\u306b\u5b9f\u884c\u3057\u305f"online-node"\u30b3\u30de\u30f3\u30c9\u3092\u53d6\u308a\u6d88\u3057\u3001\u30d3\u30eb\u30c9\u3092\u5b9f\u884c\u3059\u308b\u30ce\u30fc\u30c9\u306e\u4f7f\u7528\u3092\u518d\u958b\u3057\u307e\u3059\u3002
diff --git a/core/src/main/resources/hudson/cli/Messages_pt_BR.properties b/core/src/main/resources/hudson/cli/Messages_pt_BR.properties
index c3a6726cde..6b924aa8de 100644
--- a/core/src/main/resources/hudson/cli/Messages_pt_BR.properties
+++ b/core/src/main/resources/hudson/cli/Messages_pt_BR.properties
@@ -118,3 +118,5 @@ DeleteJobCommand.ShortDescription=Remover uma job(s)
ReloadJobCommand.ShortDescription=\
Recarrega job(s) do disco.
+
+OnlineNodeCommand.ShortDescription=Continuar usando um n\u00f3 para realizar os builds
diff --git a/core/src/main/resources/hudson/diagnosis/Messages_bg.properties b/core/src/main/resources/hudson/diagnosis/Messages_bg.properties
new file mode 100644
index 0000000000..e3c18a009a
--- /dev/null
+++ b/core/src/main/resources/hudson/diagnosis/Messages_bg.properties
@@ -0,0 +1,33 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+MemoryUsageMonitor.USED=\
+ \u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0438
+MemoryUsageMonitor.TOTAL=\
+ \u041e\u0431\u0449\u043e
+OldDataMonitor.Description=\
+ \u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0437\u0430 \u0434\u0430 \u0441\u0435 \u0438\u0437\u0447\u0438\u0441\u0442\u044f\u0442 \u043e\u0441\u0442\u0430\u0442\u044a\u0446\u0438\u0442\u0435 \u043e\u0442 \u0441\u0442\u0430\u0440\u0438\
+ \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438 \u0438 \u0432\u0435\u0440\u0441\u0438\u0438.
+OldDataMonitor.DisplayName=\
+ \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0430\u0440\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438
+HudsonHomeDiskUsageMonitor.DisplayName=\
+ \u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e
diff --git a/core/src/main/resources/hudson/fsp/Messages_bg.properties b/core/src/main/resources/hudson/fsp/Messages_bg.properties
new file mode 100644
index 0000000000..c7382a4a99
--- /dev/null
+++ b/core/src/main/resources/hudson/fsp/Messages_bg.properties
@@ -0,0 +1,36 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+WorkspaceSnapshotSCM.NoSuchJob=\
+ \u0417\u0430\u0434\u0430\u0447\u0430 \u0441 \u0438\u043c\u0435 \u201e{0}\u201c \u043d\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430. \u201e{1}\u201c \u043b\u0438 \u0438\u043c\u0430\u0442\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434?
+WorkspaceSnapshotSCM.IncorrectJobType=\
+ \u0417\u0430\u0434\u0430\u0447\u0430\u0442\u0430 \u201e{0}\u201c \u043d\u044f\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.
+WorkspaceSnapshotSCM.NoBuild=\
+ \u041d\u0438\u043a\u043e\u0435 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u043d\u0435 \u0441\u044a\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0430 \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u0442\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u201e{0}\u201c \u043a\u044a\u043c \u043d\u0430\u0441\u043b\u0435\u0434\u0435\u043d\u043e\u0442\u043e\
+ \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043e\u0442 \u201e{1}\u201c.
+WorkspaceSnapshotSCM.NoSuchPermalink=\
+ \u041b\u0438\u043f\u0441\u0432\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u0442\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u201e{0}\u201c \u043a\u044a\u043c \u043d\u0430\u0441\u043b\u0435\u0434\u0435\u043d\u043e\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043e\u0442 \u201e{1}\u201c.
+WorkspaceSnapshotSCM.NoWorkspace=\
+ \u041b\u0438\u043f\u0441\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043a\u044a\u043c \u0437\u0430\u0434\u0430\u0447\u0430 {0} \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0430\
+ {1}.\n\u041d\u0430\u0439-\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0430\u0442\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0435, \u0447\u0435 \u043d\u0438\u043a\u043e\u044f \u0434\u0440\u0443\u0433\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u0441\u0435 \u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u043b\u0430 \u043e\u0442\
+ \u0440\u0430\u0431\u043e\u0442\u043d\u043e\u0442\u043e \u045d \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u043e \u0432\u0440\u0435\u043c\u0435 \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435\u0442\u043e.\n\u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u043e\
+ \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 {0}, \u0437\u0430 \u0434\u0430 \u0441\u0435 \u0437\u0430\u043f\u0430\u0437\u0438 \u0441\u044a\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u043d\u043e\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.
diff --git a/core/src/main/resources/hudson/init/impl/Messages_bg.properties b/core/src/main/resources/hudson/init/impl/Messages_bg.properties
new file mode 100644
index 0000000000..01a1bfd123
--- /dev/null
+++ b/core/src/main/resources/hudson/init/impl/Messages_bg.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GroovyInitScript.init=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u0449 \u0441\u043a\u0440\u0438\u043f\u0442
+InitialUserContent.init=\
+ \u041f\u043e\u0434\u0433\u043e\u0442\u0432\u044f\u043d\u0435 \u043d\u0430 \u043f\u044a\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u043d\u043e\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
diff --git a/core/src/main/resources/hudson/lifecycle/Messages_bg.properties b/core/src/main/resources/hudson/lifecycle/Messages_bg.properties
new file mode 100644
index 0000000000..9c994c04f8
--- /dev/null
+++ b/core/src/main/resources/hudson/lifecycle/Messages_bg.properties
@@ -0,0 +1,36 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+WindowsInstallerLink.DisplayName=\
+ \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043a\u0430\u0442\u043e \u0443\u0441\u043b\u0443\u0433\u0430 \u043d\u0430 Windows
+WindowsInstallerLink.Description=\
+ \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Jenkins \u043a\u0430\u0442\u043e \u0443\u0441\u043b\u0443\u0433\u0430 \u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0438\u044f \u043d\u0430 \u0442\u0430\u0437\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 Windows, \u0437\u0430\
+ \u0434\u0430 \u043c\u043e\u0436\u0435 \u0442\u043e\u0439 \u0434\u0430 \u0441\u0435 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430 \u0437\u0430\u0435\u0434\u043d\u043e \u0441 \u043c\u0430\u0448\u0438\u043d\u0430\u0442\u0430.
+WindowsSlaveInstaller.ConfirmInstallation=\
+ \u0422\u043e\u0432\u0430 \u0449\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u0430\u0433\u0435\u043d\u0442 \u043a\u0430\u0442\u043e \u0443\u0441\u043b\u0443\u0433\u0430 \u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0438\u044f \u043d\u0430 \u0442\u0430\u0437\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\
+ Windows, \u0437\u0430 \u0434\u0430 \u043c\u043e\u0436\u0435 \u0442\u043e\u0439 \u0434\u0430 \u0441\u0435 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430 \u0437\u0430\u0435\u0434\u043d\u043e \u0441 \u043c\u0430\u0448\u0438\u043d\u0430\u0442\u0430.
+WindowsSlaveInstaller.DotNetRequired=\
+ \u0417\u0430 \u0442\u043e\u0432\u0430 \u0441\u0435 \u0438\u0437\u0438\u0441\u043a\u0432\u0430 .NET Framework, \u0432\u0435\u0440\u0441\u0438\u044f 2.0 \u0438\u043b\u0438 \u043f\u043e-\u0432\u0438\u0441\u043e\u043a\u0430
+WindowsSlaveInstaller.InstallationSuccessful=\
+ \u0423\u0441\u043f\u0435\u0448\u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438\u044f. \u0414\u0430 \u0441\u0435 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430 \u043b\u0438 \u0443\u0441\u043b\u0443\u0433\u0430\u0442\u0430?
+WindowsSlaveInstaller.RootFsDoesntExist=\
+ \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u0442\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u044f \u0430\u0433\u0435\u043d\u0442 \u201e{0}\u201c \u043d\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430.
diff --git a/core/src/main/resources/hudson/logging/Messages_bg.properties b/core/src/main/resources/hudson/logging/Messages_bg.properties
new file mode 100644
index 0000000000..2c8f53b916
--- /dev/null
+++ b/core/src/main/resources/hudson/logging/Messages_bg.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+LogRecorderManager.init=\
+ \u041f\u043e\u0434\u0433\u043e\u0442\u0432\u044f\u043d\u0435 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0442\u0435
+LogRecorderManager.DisplayName=\
+ \u0436\u0443\u0440\u043d\u0430\u043b
diff --git a/core/src/main/resources/hudson/markup/Messages_bg.properties b/core/src/main/resources/hudson/markup/Messages_bg.properties
new file mode 100644
index 0000000000..e1a1c9c1e8
--- /dev/null
+++ b/core/src/main/resources/hudson/markup/Messages_bg.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+EscapedMarkupFormatter.DisplayName=\
+ \u041e\u0431\u0438\u043a\u043d\u043e\u0432\u0435\u043d \u0442\u0435\u043a\u0441\u0442
diff --git a/core/src/main/resources/hudson/model/Messages.properties b/core/src/main/resources/hudson/model/Messages.properties
index bda3db8304..571ec8867f 100644
--- a/core/src/main/resources/hudson/model/Messages.properties
+++ b/core/src/main/resources/hudson/model/Messages.properties
@@ -95,7 +95,6 @@ CLI.disable-job.shortDescription=Disables a job.
CLI.enable-job.shortDescription=Enables a job.
CLI.disconnect-node.shortDescription=Disconnects from a node.
CLI.connect-node.shortDescription=Reconnect to a node.
-CLI.online-node.shortDescription=Resume using a node for performing builds, to cancel out the earlier "offline-node" command.
CLI.offline-node.shortDescription=Stop using a node for performing builds temporarily, until the next "online-node" command.
CLI.wait-node-online.shortDescription=Wait for a node to become online.
CLI.wait-node-offline.shortDescription=Wait for a node to become offline.
diff --git a/core/src/main/resources/hudson/model/Messages_bg.properties b/core/src/main/resources/hudson/model/Messages_bg.properties
index b9c6f20f19..0230072dea 100644
--- a/core/src/main/resources/hudson/model/Messages_bg.properties
+++ b/core/src/main/resources/hudson/model/Messages_bg.properties
@@ -1 +1,682 @@
-ParametersDefinitionProperty.DisplayName=\u0422\u043E\u0437\u0438 \u0431\u0438\u043B\u0434 \u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438\u0437\u0438\u0440\u0430\u043D
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+AbstractBuild.BuildingRemotely=\
+ \u041e\u0442\u0434\u0430\u043b\u0435\u0447\u0435\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0432\u044a\u0440\u0445\u0443 \u201e{0}\u201c
+AbstractBuild.BuildingOnMaster=\
+ \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0432\u044a\u0440\u0445\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u044f \u0441\u044a\u0440\u0432\u044a\u0440
+AbstractBuild_Building=\
+ \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+AbstractBuild.BuildingInWorkspace=\
+ \ \u0432 \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u201e{0}\u201c
+AbstractBuild.KeptBecause=\
+ \u0422\u043e\u0432\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0441\u0435 \u043f\u0430\u0437\u0438, \u0437\u0430\u0440\u0430\u0434\u0438 \u201e{0}\u201c.
+
+AbstractItem.NoSuchJobExists=\
+ \u041d\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430 \u0438\u043c\u0435 \u201e{0}\u201c. \u201e{1}\u201c \u043b\u0438 \u0438\u043c\u0430\u0445\u0442\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434?
+AbstractItem.NoSuchJobExistsWithoutSuggestion=\
+ \u041d\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430 \u0438\u043c\u0435 \u201e{0}\u201c.
+AbstractItem.Pronoun=\
+ \u0415\u043b\u0435\u043c\u0435\u043d\u0442
+AbstractProject.AssignedLabelString_NoMatch_DidYouMean=\
+ \u041d\u0438\u043a\u043e\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u043e\u0442\u0433\u043e\u0432\u0430\u0440\u044f \u0437\u0430 \u0442\u0430\u0437\u0438 \u0437\u0430\u0434\u0430\u0447\u0430. \u0414\u0430 \u043d\u044f\u043c\u0430\u0442\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434 \u201e{1}\u201c \u0432\u043c\u0435\u0441\u0442\u043e \u201e{0}\u201c?
+AbstractProject.NewBuildForWorkspace=\
+ \u041d\u0430\u0441\u0440\u043e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435, \u0437\u0430 \u0434\u0430 \u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0438 \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.
+AbstractProject.AwaitingBuildForWorkspace=\
+ \u0418\u0437\u0447\u0430\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435, \u0437\u0430 \u0434\u0430 \u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0438 \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.
+AbstractProject.AwaitingWorkspaceToComeOnline=\
+ \u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0441\u0435 \u043d\u0430\u0441\u0440\u043e\u0447\u0438 \u043d\u043e\u0432\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435, \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438 \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.\
+ \u0417\u0430\u0431\u0430\u0432\u044f\u043d\u0435 \u043e\u0442 {0}\u200ams \u0441 \u043d\u0430\u0434\u0435\u0436\u0434\u0430 \u0434\u0430 \u0441\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438 \u043d\u044f\u043a\u043e\u0435 \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e
+AbstractProject.Pronoun=\
+ \u041f\u0440\u043e\u0435\u043a\u0442
+AbstractProject.Aborted=\
+ \u041f\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d
+AbstractProject.BuildInProgress=\
+ \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u2116\u200a{0} \u0432\u0435\u0447\u0435 \u0441\u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430{1}
+AbstractProject.BuildNow=\
+ \u041d\u0435\u0437\u0430\u0431\u0430\u0432\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+AbstractProject.build_with_parameters=\
+ \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438
+AbstractProject.UpstreamBuildInProgress=\
+ \u201e{0}\u201c \u2014 \u0437\u0430\u0434\u0430\u0447\u0430, \u043e\u0442 \u043a\u043e\u044f\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438 \u0442\u0435\u043a\u0443\u0449\u043e\u0442\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435, \u0432\u0435\u0447\u0435 \u0435 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0430.
+AbstractProject.DownstreamBuildInProgress=\
+ \u201e{0}\u201c \u2014 \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u044f\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u043e\u0442\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435, \u0432\u0435\u0447\u0435 \u0435 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0430.
+AbstractProject.Disabled=\
+ \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435\u0442\u043e \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u043e
+AbstractProject.ETA=\
+ \ (\u043e\u0441\u0442\u0430\u0432\u0430\u0442:{0})
+AbstractProject.NoBuilds=\
+ \u041d\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435. \u041d\u0430\u0441\u0440\u043e\u0447\u0432\u0430 \u0441\u0435 \u043d\u043e\u0432\u043e.
+AbstractProject.NoSCM=\
+ \u041d\u044f\u043c\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438\u0442\u0435
+AbstractProject.NoWorkspace=\
+ \u041d\u044f\u043c\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438 \u0437\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.
+AbstractProject.WorkspaceTitle=\
+ \u0420\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u201e{0}\u201c
+AbstractProject.WorkspaceTitleOnComputer=\
+ \u0420\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u201e{0}\u201c \u043d\u0430 \u201e{1}\u201c
+AbstractProject.PollingABorted=\
+ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u0442\u0430 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0438\u0442\u0435 \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438\u0442\u0435 \u0435 \u043f\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d\u0430
+AbstractProject.ScmAborted=\
+ \u0418\u0437\u0442\u0435\u0433\u043b\u044f\u043d\u0435\u0442\u043e \u043e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0438\u0442\u0435 \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438\u0442\u0435 \u0435 \u043f\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d\u043e
+AbstractProject.WorkspaceOffline=\
+ \u0420\u0430\u0431\u043e\u0442\u043d\u043e\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043d\u0435 \u0435 \u043d\u0430\u043b\u0438\u0447\u043d\u043e.
+AbstractProject.BuildPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e\u0442\u043e \u0437\u0430 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435.
+AbstractProject.WorkspacePermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0434\u0430 \u0441\u0435 \u0440\u0430\u0437\u0433\u043b\u0435\u0436\u0434\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u043d\u043e\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u0438\
+ \u0438\u0437\u0432\u044a\u0440\u0448\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f \u043e\u0442 Jenkins. \u041e\u0442\u043d\u0435\u043c\u0435\u0442\u0435 \u0433\u043e, \u0430\u043a\u043e \u043d\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\
+ \u0434\u0430 \u0434\u043e\u0441\u0442\u044a\u043f\u0432\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435 \u0432 \u0440\u0430\u0431\u043e\u0442\u043d\u043e\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e (\u043d\u0430\u043f\u0440. \u0438\u0437\u0445\u043e\u0434\u043d\u0438\u044f \u043a\u043e\u0434, \u0438\u0437\u0442\u0435\u0433\u043b\u0435\u043d\
+ \u043e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438\u0442\u0435 \u0438\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0438\u0442\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u0435 \u043f\u0440\u0438 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435\u0442\u043e).
+AbstractProject.ExtendedReadPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430\u0442\u0430 \u0437\u0430 \u0447\u0435\u0442\u0435\u043d\u0435 \u0438 \u043c\u043e\u0436\u0435 \u0434\u0430\
+ \u0434\u043e\u0432\u0435\u0434\u0435 \u0434\u043e \u0440\u0430\u0437\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u0430\u0439\u043d\u0438, \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0438 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430 \u2014 \u043a\u0430\u0442\u043e \u043f\u0430\u0440\u043e\u043b\u0438\
+ \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0438 \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438\u0442\u0435.
+AbstractProject.DiscoverPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435 \u0438 \u0438\u0437\u0431\u0440\u043e\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438\u0442\u0435. \u041f\u0440\u0430\u0432\u043e\u0442\u043e \u0435 \u043f\u043e-\u0441\u043b\u0430\u0431\u043e \u043e\u0442\
+ \u0434\u043e\u0441\u0442\u044a\u043f\u0430 \u0434\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430\u0442\u0430 \u0437\u0430 \u0447\u0435\u0442\u0435\u043d\u0435, \u043d\u043e \u0432\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430 \u0434\u0430 \u043f\u0440\u0435\u043d\u0430\u0441\u043e\u0447\u0438\u0442\u0435\
+ \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0438\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438 \u043a\u044a\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0442\u0430 \u0437\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0430\u0442\u043e \u0441\u0435 \u043e\u043f\u0438\u0442\u0430\u0442 \u0434\u0430\
+ \u043e\u0442\u0432\u043e\u0440\u044f\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0442\u0430 \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430. \u0410\u043a\u043e \u043f\u0440\u0430\u0432\u043e\u0442\u043e \u043d\u0435 \u0435 \u0434\u0430\u0434\u0435\u043d\u043e, \u043e\u0442\u0433\u043e\u0432\u043e\u0440\u044a\u0442\
+ \u043d\u0430 \u0437\u0430\u044f\u0432\u043a\u0438\u0442\u0435 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0438\u0442\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438\u0442\u0435 \u0449\u0435 \u0435 \u0433\u0440\u0435\u0448\u043a\u0430 404 \u0438 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0438\u0442\u0435\
+ \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438 \u043d\u044f\u043c\u0430 \u0434\u0430 \u043d\u0430\u0443\u0447\u0430\u0432\u0430\u0442 \u0438\u043c\u0435\u043d\u0430\u0442\u0430 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0442\u0435.
+# hudson.security.WipeOutPermission is set to true
+AbstractProject.WipeOutPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0438\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0446\u044f\u043b\u043e\u0442\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.
+AbstractProject.CancelPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u043e\u0442\u043c\u044f\u043d\u0430 \u043d\u0430 \u0437\u0430\u043f\u043b\u0430\u043d\u0443\u0432\u0430\u043d\u043e \u0438 \u0441\u043f\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435.
+AbstractProject.AssignedLabelString.InvalidBooleanExpression=\
+ \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u0431\u0443\u043b\u0435\u0432 \u0438\u0437\u0440\u0430\u0437: {0}
+AbstractProject.AssignedLabelString.NoMatch=\
+ \u041d\u0438\u043a\u043e\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0438\u043b\u0438 \u043e\u0431\u043b\u0430\u043a \u043d\u0435 \u043e\u0442\u0433\u043e\u0432\u0430\u0440\u044f \u043d\u0430 \u0442\u0430\u0437\u0438 \u0437\u0430\u0434\u0430\u0447\u0430.
+AbstractProject.CustomWorkspaceEmpty=\
+ \u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0435 \u043f\u0440\u0430\u0437\u043d\u043e.
+AbstractProject.LabelLink=\
+ \u0415\u0442\u0438\u043a\u0435\u0442\u044a\u0442 \u0441\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0432\u0430 \u043e\u0442\
+ {2,choice,0#\u043d\u0438\u043a\u043e\u043b\u043a\u043e \u043c\u0430\u0448\u0438\u043d\u0438|1#1 \u043c\u0430\u0448\u0438\u043d\u0430|1<{2} \u043c\u0430\u0448\u0438\u043d\u0438}{3,choice,0#|1# \u0438 1 \u043e\u0431\u043b\u0430\u043a|1< \u0438 {3} \u043e\u0431\u043b\u0430\u043a\u0430}
+
+Api.MultipleMatch=\
+ \u0418\u0437\u0440\u0430\u0437\u044a\u0442 \u0447\u0440\u0435\u0437 XPath \u201e{0}\u201c \u043e\u0442\u0433\u043e\u0432\u0430\u0440\u044f \u043d\u0430 {1} \u043c\u0430\u0448\u0438\u043d\u0438. \u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0438\u0437\u0440\u0430\u0437, \u043a\u043e\u0439\u0442\u043e \u0434\u0430
+ \u043d\u0430\u043f\u0430\u0441\u0432\u0430 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0438\u043b\u0438 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u044a\u0440\u0430 \u201ewrapper\u201c, \u0437\u0430 \u0434\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\
+ \u0432\u0441\u0438\u0447\u043a\u0438 \u0442\u0435\u0437\u0438 \u043c\u0430\u0448\u0438\u043d\u0438 \u0432 \u043e\u0431\u0449 \u0435\u043b\u0435\u043c\u0435\u043d\u0442.
+Api.NoXPathMatch=\
+ \u0418\u0437\u0440\u0430\u0437\u044a\u0442 \u0447\u0440\u0435\u0437 XPath \u201e{0}\u201c \u043d\u0435 \u043d\u0430\u043f\u0430\u0441\u0432\u0430 \u0441 \u043d\u0438\u043a\u043e\u044f \u043c\u0430\u0448\u0438\u043d\u0430.
+
+BallColor.Aborted=\
+ \u041e\u0442\u043c\u0435\u043d\u0435\u043d\u043e
+BallColor.Disabled=\
+ \u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u043e
+BallColor.Failed=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e
+BallColor.InProgress=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435
+BallColor.NotBuilt=\
+ \u041d\u0435\u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u043e
+BallColor.Pending=\
+ \u041f\u0440\u0435\u0434\u0441\u0442\u043e\u0438
+BallColor.Success=\
+ \u0423\u0441\u043f\u0435\u0448\u043d\u043e
+BallColor.Unstable=\
+ \u041d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u043d\u043e
+
+Build.post_build_steps_failed=\
+ \u0421\u0442\u044a\u043f\u043a\u0438\u0442\u0435 \u0441\u043b\u0435\u0434 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435\u0442\u043e \u0441\u0430 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0438
+CLI.clear-queue.shortDescription=\
+ \u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u043f\u0430\u0448\u043a\u0430\u0442\u0430 \u0441\u044a\u0441 \u0437\u0430\u0434\u0430\u0447\u0438.
+CLI.delete-job.shortDescription=\
+ \u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.
+CLI.reload-job.shortDescription=\
+ \u041f\u0440\u0435\u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430\u0442\u0430 \u043e\u0442 \u0434\u0438\u0441\u043a\u0430.
+CLI.disable-job.shortDescription=\
+ \u0418\u0437\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.
+CLI.enable-job.shortDescription=\
+ \u0412\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.
+CLI.delete-node.shortDescription=\
+ \u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430.
+CLI.disconnect-node.shortDescription=\
+ \u041f\u0440\u0435\u043a\u044a\u0441\u0432\u0430\u043d\u0435 \u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0441 \u043c\u0430\u0448\u0438\u043d\u0430.
+CLI.connect-node.shortDescription=\
+ \u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u043a\u044a\u043c \u043c\u0430\u0448\u0438\u043d\u0430.
+CLI.online-node.shortDescription=\
+ \u041e\u0442\u043d\u043e\u0432\u043e \u0434\u0430 \u0441\u0435 \u043f\u043e\u043b\u0437\u0432\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f. \u041e\u0442\u043c\u0435\u043d\u044f\u043d\u0435 \u043d\u0430 \u043f\u0440\u0435\u0434\u0445\u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\
+ \u201eoffline-node\u201c.
+CLI.offline-node.shortDescription=\
+ \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f \u0434\u043e\u043a\u0430\u0442\u043e \u043d\u0435 \u0441\u0435\
+ \u0432\u044a\u0432\u0435\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0442\u0430 \u201eonline-node\u201c.
+CLI.wait-node-online.shortDescription=\
+ \u0418\u0437\u0447\u0430\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0434\u0430 \u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f.
+CLI.wait-node-offline.shortDescription=\
+ \u0418\u0437\u0447\u0430\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0434\u0430 \u043d\u0435 \u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f.
+
+Computer.Caption=\
+ \u041a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u201e{0}\u201c
+Computer.NoSuchSlaveExists=\
+ \u041d\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u201e{0}\u201c. \u201e{1}\u201c \u043b\u0438 \u0438\u043c\u0430\u0442\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434?
+Computer.Permissions.Title=\
+ \u041f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440
+Computer.ExtendedReadPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0437\u0430 \u0447\u0435\u0442\u0435\u043d\u0435 \u0434\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438.
+Computer.ConfigurePermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438.
+Computer.DeletePermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u043c\u0430\u0445\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438.
+Computer.CreatePermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0434\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438.
+Computer.ConnectPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0434\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438 \u0438 \u043e\u0431\u044f\u0432\u044f\u0432\u0430\u043d\u0435\u0442\u043e \u0438\u043c, \u0447\u0435 \u0441\u0430 \u043d\u0430\
+ \u043b\u0438\u043d\u0438\u044f.
+Computer.DisconnectPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u043c\u0430\u0445\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438 \u0438 \u043e\u0431\u044f\u0432\u044f\u0432\u0430\u043d\u0435\u0442\u043e \u0438\u043c, \u0447\u0435 \u043d\u0435 \u0441\u0430 \u043d\u0430\
+ \u043b\u0438\u043d\u0438\u044f.
+Computer.BuildPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438\u0442\u0435 \u0434\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0442 \u0441\u0432\u043e\u0435 \u0438\u043c\u0435 \u043d\u0430\
+ \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438.
+Computer.BadChannel=\
+ \u0410\u043a\u043e \u0442\u043e\u0432\u0430 \u0435 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440, \u0442\u043e\u0439 \u043d\u0435 \u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f.
+
+ComputerSet.NoSuchSlave=\
+ \u041d\u044f\u043c\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u043d\u0430 \u0438\u043c\u0435 \u201e{0}\u201c.
+ComputerSet.SlaveAlreadyExists=\
+ \u0412\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u043d\u0430 \u0438\u043c\u0435 \u201e{0}\u201c.
+ComputerSet.SpecifySlaveToCopy=\
+ \u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u0437\u0430 \u043a\u043e\u043f\u0438\u0440\u0430\u043d\u0435
+ComputerSet.DisplayName=\
+ \u041a\u043e\u043c\u043f\u044e\u0442\u0440\u0438
+
+Descriptor.From=\
+ (\u043e\u0442 {0})
+
+Executor.NotAvailable=\
+ \u041b\u0438\u043f\u0441\u0432\u0430
+
+FreeStyleProject.DisplayName=\
+ \u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0430
+
+HealthReport.EmptyString=
+
+Hudson.BadPortNumber=\
+ \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u043d\u043e\u043c\u0435\u0440 \u043d\u0430 \u043f\u043e\u0440\u0442 \u201e{0}\u201c
+Hudson.Computer.Caption=\
+ \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0432\u0430\u0449 \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440
+Hudson.Computer.DisplayName=\
+ \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0432\u0430\u0449 \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440
+Hudson.ControlCodeNotAllowed=\
+ \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043d\u0438 \u0437\u043d\u0430\u0446\u0438 \u043d\u0435 \u0441\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u0438: {0}
+Hudson.DisplayName=\
+ Jenkins
+Hudson.JobAlreadyExists=\
+ \u0412\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430 \u0438\u043c\u0435 \u201e{0}\u201c.
+Hudson.NoJavaInPath=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u0438\u043c\u0438\u044f\u0442 \u0444\u0430\u0439\u043b \u201ejava\u201c \u043d\u0435 \u0435 \u0432 \u043f\u044a\u0442\u0438\u0449\u0430\u0442\u0430, \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438 \u0432 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0430\u0442\u0430 \u043d\u0430 \u0441\u0440\u0435\u0434\u0430\u0442\u0430\
+ \u201ePATH\u201c. \u041f\u0440\u043e\u0431\u0432\u0430\u0439\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0441\u0440\u0435\u0434\u0430\u0442\u0430 \u0437\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430\
+ \u043d\u0430 Java (JDK).
+Hudson.NoName=\
+ \u041d\u0435 \u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043c\u0435.
+Hudson.NoSuchDirectory=\
+ \u041d\u044f\u043c\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043d\u0430 \u0438\u043c\u0435 \u201e{0}\u201c
+Hudson.NodeBeingRemoved=\
+ \u041a\u043e\u043c\u043f\u044e\u0442\u044a\u0440\u0430 \u0441\u0435 \u0438\u0437\u0432\u0430\u0436\u0434\u0430 \u043e\u0442 \u043a\u043b\u044a\u0441\u0442\u044a\u0440\u0430
+Hudson.NotAPlugin=\
+ \u201e{0}\u201c \u043d\u0435 \u0435 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u043d\u0430 Jenkins.
+Hudson.NotJDKDir=\
+ \u201e{0}\u201c \u043d\u0435 \u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043d\u0430 \u0441\u0440\u0435\u0434\u0430\u0442\u0430 \u0437\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 Java (JDK).
+Hudson.Permissions.Title=\
+ \u041e\u0431\u0449\u043e
+Hudson.USER_CONTENT_README=\
+ \u0424\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435 \u0432 \u0442\u0430\u0437\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0449\u0435 \u0441\u0430 \u0434\u043e\u0441\u0442\u044a\u043f\u043d\u0438 \u043f\u0440\u0435\u0437 \u0430\u0434\u0440\u0435\u0441\u0430 \
+ \u201ehttp://server/jenkins/userContent/\u201c.
+Hudson.UnsafeChar=\
+ \u041e\u043f\u0430\u0441\u043d\u043e \u0435 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0437\u043d\u0430\u043a\u0430 \u201e{0}\u201c.
+Hudson.ViewAlreadyExists=\
+ \u0412\u0435\u0447\u0435 \u0438\u043c\u0430 \u0438\u0437\u0433\u043b\u0435\u0434 \u0441 \u0438\u043c\u0435 \u201e{0}\u201c.
+Hudson.ViewName=\
+ \u0412\u0441\u0438\u0447\u043a\u0438
+Hudson.NotANumber=\
+ \u041d\u0435 \u0435 \u0447\u0438\u0441\u043b\u043e.
+Hudson.NotAPositiveNumber=\
+ \u041d\u0435 \u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u043d\u043e \u0447\u0438\u0441\u043b\u043e.
+Hudson.NotANonNegativeNumber=\
+ \u0427\u0438\u0441\u043b\u043e\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u043d\u043e.
+Hudson.NotANegativeNumber=\
+ \u0427\u0438\u0441\u043b\u043e\u0442\u043e \u043d\u0435 \u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u043d\u043e.
+Hudson.NotUsesUTF8ToDecodeURL=\
+ \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044a\u0442 \u0437\u0430 \u0441\u044a\u0440\u0432\u043b\u0435\u0442\u0438 \u043d\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 UTF-8 \u0437\u0430 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0438. \u0417\u043d\u0430\u0446\u0438\
+ \u0438\u0437\u0432\u044a\u043d ASCII \u0432 \u0438\u043c\u0435\u043d\u0430\u0442\u0430 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0434\u0440. \u0449\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044f\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438. \u0417\u0430 \u043f\u043e\u0432\u0435\u0447\u0435\
+ \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e\u0433\u043b\u0435\u0434\u043d\u0435\u0442\u0435\
+ \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\
+ \u0438\
+ \
+ \u0418\u043d\u0442\u0435\u0440\u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 Tomcat.
+Hudson.AdministerPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u043f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043a\u0430\u043a\u0442\u043e \u0438 \u043f\u044a\u043b\u0435\u043d \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e\
+ \u043b\u043e\u043a\u0430\u043b\u043d\u0430\u0442\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432 \u0440\u0430\u043c\u043a\u0438\u0442\u0435 \u043d\u0430 \u043f\u0440\u0430\u0432\u0430\u0442\u0430 \u0441\u043f\u043e\u0440\u0435\u0434 \u0440\u0430\u0431\u043e\u0442\u0435\u0449\u0430\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\
+ \u0441\u0438\u0441\u0442\u0435\u043c\u0430.
+Hudson.ReadPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0440\u0430\u0437\u0433\u043b\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0438 \u043d\u0430 Jenkins. \u0410\u043a\u043e \u043d\u0435\
+ \u0438\u0441\u043a\u0430\u0442\u0435 \u043d\u0435\u043f\u043e\u0437\u043d\u0430\u0442\u0438\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438 \u0434\u0430 \u0432\u0438\u0436\u0434\u0430\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0438\u0442\u0435 \u043d\u0430 Jenkins, \u043e\u0442\u043d\u0435\u043c\u0435\u0442\u0435 \u0442\u043e\u0432\u0430\
+ \u043f\u0440\u0430\u0432\u043e \u043d\u0430 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b (\u201eanonymous\u201c) \u0438 \u0433\u043e \u0434\u0430\u0439\u0442\u0435 \u043d\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u043b\u0438\u0442\u0435 \u0441\u0435\
+ \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438 (\u201eauthenticated\u201c).
+Hudson.RunScriptsPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0435 \u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0430 \u043d\u0430 \u043f\u0440\u0435\u0437 \u043a\u043e\u043d\u0437\u043e\u043b\u0430\u0442\u0430 \u043d\u0430\
+ Groovy \u0438\u043b\u0438 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438\u0442\u0435 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0438\u044f \u0440\u0435\u0434.
+Hudson.NodeDescription=\
+ \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0432\u0430\u0449\u0438\u044f\u0442 \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u043d\u0430 Jenkins
+
+Item.Permissions.Title=\
+ \u0417\u0430\u0434\u0430\u0447\u0430
+Item.CREATE.description=\
+ \u0421\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.
+Item.DELETE.description=\
+ \u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.
+Item.CONFIGURE.description=\
+ \u041f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.
+Item.READ.description=\
+ \u041f\u0440\u0435\u0433\u043b\u0435\u0434 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430. (\u041c\u043e\u0436\u0435 \u0434\u0430 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u0435 \u0442\u043e\u0432\u0430 \u043f\u0440\u0430\u0432\u043e, \u043d\u043e \u0447\u0440\u0435\u0437 \u043f\u0440\u0430\u0432\u043e\u0442\u043e \u0437\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435\
+ \u0434\u0430 \u043d\u0430\u043a\u0430\u0440\u0430\u0442\u0435 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0438\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438 \u0434\u0430 \u0441\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u0442, \u0437\u0430 \u0434\u0430 \u0432\u0438\u0434\u044f\u0442 \u0437\u0430\u0434\u0430\u0447\u0430\u0442\u0430.)
+
+Job.AllRecentBuildFailed=\
+ \u0412\u0441\u0438\u0447\u043a\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f \u0441\u0430 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0438.
+Job.BuildStability=\
+ \u0421\u0442\u0430\u0431\u0438\u043b\u043d\u043e\u0441\u0442 \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430: {0}
+Job.NOfMFailed=\
+ {0} \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0442\u0435 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f {1} \u0441\u0430 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0438.
+Job.NoRecentBuildFailed=\
+ \u0421\u043a\u043e\u0440\u043e \u043d\u0435 \u0435 \u0438\u043c\u0430\u043b\u043e \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0438 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f.
+Job.Pronoun=\
+ \u041f\u0440\u043e\u0435\u043a\u0442
+Job.minutes=\
+ \u043c\u0438\u043d.
+
+Job.you_must_use_the_save_button_if_you_wish=\
+ \u0417\u0430 \u0434\u0430 \u043f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430, \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0431\u0443\u0442\u043e\u043d\u0430 \u201e\u0417\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435\u201c.
+Label.GroupOf=\
+ \u0433\u0440\u0443\u043f\u0430\u0442\u0430 \u043d\u0430 {0}
+Label.InvalidLabel=\
+ \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u0435\u0442\u0438\u043a\u0435\u0442
+Label.ProvisionedFrom=\
+ \u041d\u0430\u0431\u0430\u0432\u0435\u043d\u0430 \u043e\u0442 {0}
+ManageJenkinsAction.DisplayName=\
+ \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 Jenkins
+MultiStageTimeSeries.EMPTY_STRING=
+Queue.AllNodesOffline=\
+ \u041d\u0438\u043a\u043e\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0441 \u0435\u0442\u0438\u043a\u0435\u0442 \u201e{0}\u201c \u043d\u0435 \u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f.
+Queue.LabelHasNoNodes=\
+ \u041d\u044f\u043c\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0441 \u0435\u0442\u0438\u043a\u0435\u0442 \u201e{0}\u201c.
+Queue.BlockedBy=\
+ \u0411\u043b\u043e\u043a\u0438\u0440\u0430\u043d\u043e \u043e\u0442 \u201e{0}\u201c.
+Queue.HudsonIsAboutToShutDown=\
+ Jenkins \u0449\u0435 \u0441\u0435 \u0441\u043f\u0440\u0435.
+Queue.InProgress=\
+ \u0418\u0437\u0432\u044a\u0440\u0448\u0432\u0430 \u0441\u0435 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435.
+Queue.InQuietPeriod=\
+ \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0442\u0438\u0448\u0438\u043d\u0430, \u0438\u0437\u0442\u0438\u0447\u0430 \u0441\u043b\u0435\u0434 {0}
+Queue.NodeOffline=\
+ \u201e{0}\u201c \u043d\u0435 \u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f.
+Queue.Unknown=\
+ \u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e
+Queue.WaitingForNextAvailableExecutor=\
+ \u0418\u0437\u0447\u0430\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0432\u0430\u0449\u0438\u044f \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440.
+Queue.WaitingForNextAvailableExecutorOn=\
+ \u0418\u0437\u0447\u0430\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0432\u0430\u0449\u0438\u044f \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u0437\u0430 \u201e{0}\u201c.
+Queue.init=\
+ \u0412\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u043f\u0430\u0448\u043a\u0430\u0442\u0430 \u0441 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f.
+
+ResultTrend.Aborted=\
+ \u041f\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d\u043e
+ResultTrend.Failure=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e
+ResultTrend.Fixed=\
+ \u041e\u043f\u0440\u0430\u0432\u0435\u043d\u043e
+ResultTrend.NotBuilt=\
+ \u041d\u0435\u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u043e
+ResultTrend.NowUnstable=\
+ \u041d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u043d\u043e
+ResultTrend.StillFailing=\
+ \u0412\u0441\u0435 \u043e\u0449\u0435 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e
+ResultTrend.StillUnstable=\
+ \u0412\u0441\u0435 \u043e\u0449\u0435 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u043d\u043e
+ResultTrend.Success=\
+ \u0423\u0441\u043f\u0435\u0448\u043d\u043e
+ResultTrend.Unstable=\
+ \u041d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u043d\u043e
+Run._is_waiting_for_a_checkpoint_on_=\
+ {0} \u0438\u0437\u0447\u0430\u043a\u0432\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u043d\u0438\u044f \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430 {1}
+Run.BuildAborted=\
+ \u041f\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+Run.MarkedExplicitly=\
+ \u0422\u043e\u0437\u0438 \u0437\u0430\u043f\u0438\u0441 \u0435 \u043e\u0442\u0431\u0435\u043b\u044f\u0437\u0430\u043d \u0437\u0430 \u0441\u044a\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435.
+Run.Permissions.Title=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435
+Run.running_as_=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u0430\u0442\u043e \u201e{0}\u201c
+Run.UnableToDelete=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u201e{0}\u201c: {1}
+Run.DeletePermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0438\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u043f\u043e\u0441\u043e\u0447\u0435\u043d\u0438 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f \u043e\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044f\u0442\u0430 \u043d\u0430\
+ \u0437\u0430\u0434\u0430\u0447\u0438\u0442\u0435.
+Run.UpdatePermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u043f\u0440\u043e\u043c\u044f\u043d\u0430\u0442\u0430 \u043d\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u0442\u043e \u0438 \u0434\u0440\u0443\u0433\u0438\u0442\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435.\
+ \u0422\u0430\u043a\u0430 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0441\u0435 \u0437\u0430\u043f\u0430\u0437\u0432\u0430\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u0438\u0442\u0435 \u0437\u0430 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440.
+Run.ArtifactsPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0438\u0442\u0435, \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438 \u043e\u0442 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430. \u041d\u0435\
+ \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u043e\u0432\u0430 \u043f\u0440\u0430\u0432\u043e, \u0430\u043a\u043e \u0438\u0441\u043a\u0430\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438\u0442\u0435 \u0434\u0430 \u043d\u0435 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0438\u0437\u0442\u0435\u0433\u043b\u044f\u0442\
+ \u0438\u0437\u0433\u0440\u0430\u0434\u0435\u043d\u043e\u0442\u043e.
+Run.InProgressDuration=\
+ {0} \u0438 \u0440\u0430\u0441\u0442\u0435
+Run.NotStartedYet=\
+ \u041e\u0449\u0435 \u043d\u0435 \u0435 \u0437\u0430\u043f\u043e\u0447\u043d\u0430\u043b\u043e
+Run.ArtifactsBrowserTitle=
+ \u0410\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0438 \u043d\u0430 {0} {1}
+
+Run.Summary.Stable=\
+ \u0441\u0442\u0430\u0431\u0438\u043b\u043d\u043e
+Run.Summary.Unstable=\
+ \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u043d\u043e
+Run.Summary.Aborted=\
+ \u043f\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d\u043e
+Run.Summary.NotBuilt=\
+ \u043d\u0435\u0438\u0437\u0433\u0440\u0430\u0434\u0435\u043d\u043e
+Run.Summary.BackToNormal=\
+ \u043d\u043e\u0440\u043c\u0430\u043b\u043d\u043e
+Run.Summary.BrokenForALongTime=\
+ \u0441\u0447\u0443\u043f\u0435\u043d\u043e \u043e\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435
+Run.Summary.BrokenSinceThisBuild=\
+ \u0441\u0447\u0443\u043f\u0435\u043d\u043e \u043e\u0442 \u0442\u043e\u0432\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+Run.Summary.BrokenSince=\
+ \u0441\u0447\u0443\u043f\u0435\u043d\u043e \u043e\u0442 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u2116\u200a{0}
+Run.Summary.Unknown=\
+ \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e
+
+Slave.InvalidConfig.Executors=\
+ \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u201e{0}\u201c \u2014 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u0431\u0440\u043e\u0439 \u043d\u0430\
+ \u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u0438\u0442\u0435.
+Slave.InvalidConfig.NoName=\
+ \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u2014 \u0438\u043c\u0435\u0442\u043e \u0435 \u043f\u0440\u0430\u0437\u043d\u043e.
+Slave.InvalidConfig.NoRemoteDir=\
+ \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u201e{0}\u201c \u2014 \u043b\u0438\u043f\u0441\u0432\u0430 \u043e\u0442\u0434\u0430\u043b\u0435\u0447\u0435\u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f.
+Slave.Launching=\
+ {0} \u2014 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441
+Slave.Network.Mounted.File.System.Warning=\
+ \u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0441\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043c\u043e\u043d\u0442\u0438\u0440\u0430\u043d\u0430 \u043f\u043e\
+ \u043c\u0440\u0435\u0436\u0430\u0442\u0430, \u043a\u0430\u0442\u043e \u043a\u043e\u0440\u0435\u043d\u043e\u0432\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f? \u041d\u044f\u043c\u0430 \u043d\u0443\u0436\u0434\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u0442\u0430 \u0434\u0430 \u0441\u0435 \u0432\u0438\u0436\u0434\u0430 \u043e\u0442\
+ \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0432\u0430\u0449\u0438\u044f \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440.
+Slave.Remote.Director.Mandatory=\
+ \u041e\u0442\u0434\u0430\u043b\u0435\u0447\u0435\u043d\u0430\u0442\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u0430.
+Slave.Terminated=\
+ {0} \u2014 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u044f\u0442 \u043f\u0440\u043e\u0446\u0435\u0441 \u0431\u0435 \u043f\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d
+Slave.Remote.Relative.Path.Warning=\
+ \u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0441\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0435\u043d \u043f\u044a\u0442 \u043a\u0430\u0442\u043e \u043a\u043e\u0440\u0435\u043d\u043e\u0432\u0430\
+ \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f? \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0434\u0430\u043b\u0438 \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u044f\u0442 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0449 \u043f\u0440\u043e\u0446\u0435\u0441 \u043e\u0441\u0438\u0433\u0443\u0440\u044f\u0432\u0430 \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\
+ \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f. \u041f\u0440\u0435\u043f\u043e\u0440\u044a\u0447\u0438\u0442\u0435\u043b\u043d\u043e \u0435 \u0434\u0430 \u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u0435\u043d \u043f\u044a\u0442.
+Slave.UnableToLaunch=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441 \u0437\u0430 \u201e{0}{1}\u201c
+Slave.UnixSlave=\
+ \u041f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u0441 Unix.
+Slave.WindowsSlave=\
+ \u041f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u0441 Windows.
+
+TopLevelItemDescriptor.NotApplicableIn=\
+ {0} \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043d\u0435 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0430\u0442 \u0432 {1}
+
+UpdateCenter.DownloadButNotActivated=\
+ \u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0437\u0442\u0435\u0433\u043b\u044f\u043d\u0435. \u0429\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0438 \u0441\u043b\u0435\u0434 \u0441\u043b\u0435\u0434\u0432\u0430\u0449\u043e\u0442\u043e \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435.
+UpdateCenter.n_a=\
+ \u041b\u0438\u043f\u0441\u0432\u0430
+View.Permissions.Title=\
+ \u0418\u0437\u0433\u043b\u0435\u0434
+View.CreatePermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0441\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u0438 \u0438\u0437\u0433\u043b\u0435\u0434\u0438.
+View.DeletePermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0438\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430\u0449\u0438 \u0438\u0437\u0433\u043b\u0435\u0434\u0438.
+View.ConfigurePermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u043f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u043d\u0430 \u0438\u0437\u0433\u043b\u0435\u0434\u0438\u0442\u0435.
+View.ReadPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0432\u0438\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0433\u043b\u0435\u0434\u0438\u0442\u0435 (\u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430 \u0441\u0435 \u043f\u0440\u0438 \u043e\u0431\u0449\u043e \u043f\u0440\u0430\u0432\u043e \u0437\u0430\
+ \u0434\u043e\u0441\u0442\u044a\u043f).
+View.MissingMode=\
+ \u0412\u0438\u0434\u044a\u0442 \u043d\u0430 \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u043d\u0435 \u0435 \u0438\u0437\u0431\u0440\u0430\u043d.
+
+UpdateCenter.Status.CheckingInternet=\
+ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u043a\u044a\u043c \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442
+UpdateCenter.Status.CheckingJavaNet=\
+ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u043a\u044a\u043c \u0446\u0435\u043d\u0442\u044a\u0440\u0430 \u0437\u0430 \u043e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435
+UpdateCenter.Status.Success=\
+ \u0423\u0441\u043f\u0435\u0445
+UpdateCenter.Status.UnknownHostException=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u201e{0}\u201c.\
+ \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435\
+ \u0441\u044a\u0440\u0432\u044a\u0440-\u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a \u0437\u0430 HTTP.
+UpdateCenter.Status.ConnectionFailed=\
+ \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435\
+ \u0441\u044a\u0440\u0432\u044a\u0440-\u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a \u0437\u0430 HTTP.
+UpdateCenter.init=\
+ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0446\u0435\u043d\u0442\u044a\u0440\u0430 \u0437\u0430 \u043e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435
+UpdateCenter.PluginCategory.android=\
+ \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0438\u0440\u0430\u043d\u0435 \u0437\u0430 Android
+UpdateCenter.PluginCategory.builder=\
+ \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+UpdateCenter.PluginCategory.buildwrapper=\
+ \u0421\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0435, \u043e\u0431\u0432\u0438\u0432\u0430\u0449\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438\u0442\u0435 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+UpdateCenter.PluginCategory.cli=\
+ \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0438\u044f \u0440\u0435\u0434
+UpdateCenter.PluginCategory.cloud=\
+ \u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u0446\u0438 \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u0438 \u0443\u0441\u043b\u0443\u0433\u0438
+UpdateCenter.PluginCategory.cluster=\
+ \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043b\u044a\u0441\u0442\u044a\u0440\u0430 \u0438 \u0440\u0430\u0437\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e\u0442\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+UpdateCenter.PluginCategory.database=\
+ \u0411\u0430\u0437\u0438 \u043e\u0442 \u0434\u0430\u043d\u043d\u0438
+UpdateCenter.PluginCategory.deployment=\
+ \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435
+UpdateCenter.PluginCategory.devops=\
+ DevOps
+UpdateCenter.PluginCategory.dotnet=\
+ \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0438\u0440\u0430\u043d\u0435 \u0437\u0430 .NET
+UpdateCenter.PluginCategory.external=\
+ \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441\u044a\u0441 \u0441\u0430\u0439\u0442\u043e\u0432\u0435 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438
+UpdateCenter.PluginCategory.groovy-related=\
+ \u0421\u0432\u044a\u0440\u0437\u0430\u043d\u0438 \u0441 Groovy
+UpdateCenter.PluginCategory.ios=\
+ \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0438\u0440\u0430\u043d\u0435 \u0437\u0430 iOS
+UpdateCenter.PluginCategory.library=\
+ \u041f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442 \u0441\u0435 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438)
+UpdateCenter.PluginCategory.listview-column=\
+ \u041a\u043e\u043b\u043e\u043d\u0438 \u0432 \u0441\u043f\u0438\u0441\u044a\u0447\u043d\u0438\u044f \u0438\u0437\u0433\u043b\u0435\u0434
+UpdateCenter.PluginCategory.maven=\
+ Maven
+UpdateCenter.PluginCategory.misc=\
+ \u0420\u0430\u0437\u043d\u0438
+UpdateCenter.PluginCategory.notifier=\
+ \u0418\u0437\u0432\u0435\u0441\u0442\u044f\u0432\u0430\u043d\u0435 \u043f\u0440\u0438 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+UpdateCenter.PluginCategory.page-decorator=\
+ \u0414\u0435\u043a\u043e\u0440\u0430\u0446\u0438\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0438\u0442\u0435
+UpdateCenter.PluginCategory.parameter=\
+ \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+UpdateCenter.PluginCategory.post-build=\
+ \u0414\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043b\u0435\u0434 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+UpdateCenter.PluginCategory.python=\
+ \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Python
+UpdateCenter.PluginCategory.report=\
+ \u041e\u0442\u0447\u0435\u0442\u0438 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430
+UpdateCenter.PluginCategory.ruby=\
+ \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Ruby
+UpdateCenter.PluginCategory.runcondition=\
+ \u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0437\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 (\u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u0441\u0435 \u043e\u0442 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442 RunConditions)
+UpdateCenter.PluginCategory.scala=\
+ \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Scala
+UpdateCenter.PluginCategory.scm=\
+ \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438\u0442\u0435
+UpdateCenter.PluginCategory.scm-related=\
+ \u041e\u0449\u0435 \u0437\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438\u0442\u0435
+UpdateCenter.PluginCategory.security=\
+ \u0421\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442
+UpdateCenter.PluginCategory.slaves=\
+ \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u0442\u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u0438 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438
+UpdateCenter.PluginCategory.test=\
+ \u0422\u0435\u0441\u0442\u0432\u0430\u043d\u0435
+UpdateCenter.PluginCategory.trigger=\
+ \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f
+UpdateCenter.PluginCategory.ui=\
+ \u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441
+UpdateCenter.PluginCategory.upload=\
+ \u041a\u0430\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0438
+UpdateCenter.PluginCategory.user=\
+ \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438
+UpdateCenter.PluginCategory.view=\
+ \u0418\u0437\u0433\u043b\u0435\u0434\u0438
+UpdateCenter.PluginCategory.must-be-labeled=\
+ \u0411\u0435\u0437 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f
+UpdateCenter.PluginCategory.unrecognized=\
+ \u0420\u0430\u0437\u043d\u0438 ({0})
+
+Permalink.LastBuild=\
+ \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+Permalink.LastStableBuild=\
+ \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+Permalink.LastUnstableBuild=\
+ \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u043e \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+Permalink.LastUnsuccessfulBuild=\
+ \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u043e \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+Permalink.LastSuccessfulBuild=\
+ \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+Permalink.LastFailedBuild=\
+ \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u043e \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+Permalink.LastCompletedBuild=\
+ \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u043e \u0437\u0430\u0432\u044a\u0440\u0448\u0435\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+
+ParameterAction.DisplayName=\
+ \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438
+ParametersDefinitionProperty.DisplayName=\
+ \u0422\u043e\u0432\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0435 \u043f\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438
+StringParameterDefinition.DisplayName=\
+ \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u044a\u0440-\u043d\u0438\u0437
+TextParameterDefinition.DisplayName=\
+ \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u044a\u0440-\u0442\u0435\u043a\u0441\u0442
+FileParameterDefinition.DisplayName=\
+ \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u044a\u0440-\u0444\u0430\u0439\u043b
+BooleanParameterDefinition.DisplayName=\
+ \u0411\u0443\u043b\u0435\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u044a\u0440
+ChoiceParameterDefinition.DisplayName=\
+ \u0421\u043f\u0438\u0441\u044a\u0447\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u044a\u0440
+ChoiceParameterDefinition.MissingChoices=\
+ \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0435 \u0441\u043f\u0438\u0441\u044a\u043a \u043e\u0442 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0438.
+RunParameterDefinition.DisplayName=\
+ \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u044a\u0440 \u0437\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435
+PasswordParameterDefinition.DisplayName=\
+ \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u044a\u0440-\u043f\u0430\u0440\u043e\u043b\u0430
+
+Node.BecauseNodeIsReserved=\
+ \u201e{0}\u201c \u0435 \u0437\u0430\u043f\u0430\u0437\u0435\u043d\u0430 \u0437\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u043e\u0442\u0433\u043e\u0432\u0430\u0440\u044f\u0449 \u0435\u0442\u0438\u043a\u0435\u0442.
+Node.BecauseNodeIsNotAcceptingTasks=\
+ \u201e{0}\u201c \u043d\u0435 \u043f\u0440\u0438\u0435\u043c\u0430 \u0437\u0430\u0434\u0430\u0447\u0438.
+Node.LabelMissing=\
+ \u201e{0}\u201c \u043d\u044f\u043c\u0430 \u0435\u0442\u0438\u043a\u0435\u0442\u0430 \u201e{1}\u201c.
+Node.LackingBuildPermission=\
+ \u201e{0}\u201c \u043d\u044f\u043c\u0430 \u043f\u0440\u0430\u0432\u043e \u0434\u0430 \u0441\u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430 \u043e\u0442 \u201e{1}\u201c.
+Node.Mode.NORMAL=\
+ \u0422\u0430\u0437\u0438 \u043c\u0430\u0448\u0438\u043d\u0430 \u0434\u0435 \u0441\u0435 \u043f\u043e\u043b\u0437\u0432\u0430 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439-\u043c\u043d\u043e\u0433\u043e.
+Node.Mode.EXCLUSIVE=\
+ \u0414\u0430 \u0441\u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u0435\u0442\u0438\u043a\u0435\u0442\u0438 \u043e\u0442\u0433\u043e\u0432\u0430\u0440\u044f\u0449\u0438 \u043d\u0430 \u0442\u0430\u0437\u0438 \u043c\u0430\u0448\u0438\u043d\u0430.
+
+ListView.DisplayName=\
+ \u0421\u043f\u0438\u0441\u044a\u0447\u0435\u043d \u0438\u0437\u0433\u043b\u0435\u0434
+
+MyView.DisplayName=\
+ \u041c\u043e\u044f\u0442 \u0438\u0437\u0433\u043b\u0435\u0434
+
+LoadStatistics.Legends.DefinedExecutors=\
+ \u0414\u0435\u0444\u0438\u043d\u0438\u0440\u0430\u043d\u0438 \u043c\u0430\u0448\u0438\u043d\u0438-\u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u0438
+LoadStatistics.Legends.OnlineExecutors=\
+ \u041c\u0430\u0448\u0438\u043d\u0438-\u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u0438 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f
+LoadStatistics.Legends.ConnectingExecutors=\
+ \u0421\u0432\u044a\u0440\u0437\u0430\u043d\u0438 \u043c\u0430\u0448\u0438\u043d\u0438-\u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u0438
+LoadStatistics.Legends.TotalExecutors=\
+ \u041e\u0431\u0449\u043e \u043c\u0430\u0448\u0438\u043d\u0438-\u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u0438
+LoadStatistics.Legends.BusyExecutors=\
+ \u0417\u0430\u0435\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u0438-\u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u0438
+LoadStatistics.Legends.IdleExecutors=\
+ \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u0438 \u043c\u0430\u0448\u0438\u043d\u0438-\u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u0438
+LoadStatistics.Legends.AvailableExecutors=\
+ \u041d\u0430\u043b\u0438\u0447\u043d\u0438 \u043c\u0430\u0448\u0438\u043d\u0438-\u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u0438
+LoadStatistics.Legends.QueueLength=\
+ \u0414\u044a\u043b\u0436\u0438\u043d\u0430 \u043d\u0430 \u043e\u043f\u0430\u0448\u043a\u0430\u0442\u0430
+
+Cause.LegacyCodeCause.ShortDescription=\
+ \u0421\u0442\u0430\u0440 \u043a\u043e\u0434 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430 \u0442\u0430\u0437\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043b\u0438\u043f\u0441\u0432\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u0442\u0430.
+Cause.UpstreamCause.ShortDescription=\
+ \u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0430 \u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u201e{0}\u201c, \u043e\u0442 \u043a\u043e\u0439\u0442\u043e \u0442\u044f \u0437\u0430\u0432\u0438\u0441\u0438, \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u2116\u200a{1}
+Cause.UpstreamCause.CausedBy=\
+ \u043f\u044a\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u043d\u043e \u043f\u043e\u0440\u0430\u0434\u0438:
+Cause.UserCause.ShortDescription=\
+ \u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0430 \u043e\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b: \u201e{0}\u201c
+Cause.UserIdCause.ShortDescription=\
+ \u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0430 \u043e\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b: \u201e{0}\u201c
+Cause.RemoteCause.ShortDescription=\
+ \u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u043e \u043e\u0442 \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440\u0430: \u201e{0}\u201c
+Cause.RemoteCause.ShortDescriptionWithNote=\
+ \u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u043e \u043e\u0442 \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440\u0430: \u201e{0}\u201c \u0441\u044a\u0441 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0431\u0435\u043b\u0435\u0436\u043a\u0430: \u201e{1}\u201c
+
+ProxyView.NoSuchViewExists=\
+ \u0413\u043b\u043e\u0431\u0430\u043b\u043d\u0438\u044f\u0442 \u0438\u0437\u0433\u043b\u0435\u0434 \u201e{0}\u201c \u043d\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430
+ProxyView.DisplayName=\
+ \u0412\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u0435\u043d \u0438\u0437\u0433\u043b\u0435\u0434
+
+MyViewsProperty.DisplayName=\
+ \u041c\u043e\u0438\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0438
+MyViewsProperty.GlobalAction.DisplayName=\
+ \u041c\u043e\u0438\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0438
+MyViewsProperty.ViewExistsCheck.NotExist=\
+ \u0418\u0437\u0433\u043b\u0435\u0434 \u0441 \u0438\u043c\u0435 \u201e{0}\u201c \u043d\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430
+MyViewsProperty.ViewExistsCheck.AlreadyExists=\
+ \u0418\u0437\u0433\u043b\u0435\u0434 \u0441 \u0438\u043c\u0435 \u201e{0}\u201c \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430
+
+CLI.restart.shortDescription=\
+ \u0420\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Jenkins
+CLI.safe-restart.shortDescription=\
+ \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Jenkins
+CLI.keep-build.shortDescription=\
+ \u041e\u0442\u0431\u0435\u043b\u044f\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435\u0442\u043e \u0434\u0430 \u0441\u0435 \u0437\u0430\u043f\u0430\u0437\u0438 \u0437\u0430\u0432\u0438\u043d\u0430\u0433\u0438.
+CLI.quiet-down.shortDescription=\
+ \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043d\u0430 Jenkins \u0437\u0430 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435. \u0414\u0430 \u043d\u0435 \u0441\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0442 \u043d\u043e\u0432\u0438 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f.
+CLI.cancel-quiet-down.shortDescription=\
+ \u041e\u0442\u043c\u044f\u043d\u0430 \u043d\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u2014 \u0449\u0435 \u0441\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0442 \u043d\u043e\u0432\u0438 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f.
+CLI.reload-configuration.shortDescription=\
+ \u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u0430\u043c\u0435\u0442\u0442\u0430 \u0438 \u043f\u0440\u0435\u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u043e \u043d\u0430\u043d\u043e\u0432\u043e \u043e\u0442 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430.\
+ \u0422\u043e\u0432\u0430 \u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u0440\u0438 \u043f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043d\u043e \u043f\u043e \u0434\u0438\u0441\u043a\u0430.
+
+BuildAuthorizationToken.InvalidTokenProvided=\
+ \u0417\u0430\u0434\u0430\u0434\u0435\u043d \u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u0436\u0435\u0442\u043e\u043d \u0437\u0430 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442.
+
+Jenkins.CheckDisplayName.NameNotUniqueWarning=\
+ \u0418\u043c\u0435\u0442\u043e \u201e{0}\u201c \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u0438 \u0437\u0430 \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0435\u0442\u043e \u043c\u043e\u0436\u0435 \u0434\u0430 \u0434\u043e\u0432\u0435\u0434\u0435 \u0434\u043e \u043e\u0431\u044a\u0440\u043a\u0432\u0430\u043d\u0435 \u043f\u0440\u0438\
+ \u0442\u044a\u0440\u0441\u0435\u043d\u0435.
+Jenkins.CheckDisplayName.DisplayNameNotUniqueWarning=\
+ \u0418\u043c\u0435\u0442\u043e \u201e{0}\u201c \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u0437\u0430 \u0434\u0440\u0443\u0433\u0430 \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0435\u0442\u043e \u043c\u043e\u0436\u0435 \u0434\u0430 \u0434\u043e\u0432\u0435\u0434\u0435 \u0434\u043e \u0437\u0430\u0431\u0430\u0432\u044f\u043d\u0435 \u0438\
+ \u043e\u0431\u044a\u0440\u043a\u0432\u0430\u043d\u0435 \u043f\u0440\u0438 \u0442\u044a\u0440\u0441\u0435\u043d\u0435.
+
+Jenkins.NotAllowedName=\
+ \u041d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0438\u043c\u0435\u0442\u043e \u201e{0}\u201c
+Jenkins.IsRestarting=\
+ Jenkins \u0441\u0435 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442\u0430
+
+User.IllegalUsername=\
+ \u041d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u201e{0}\u201c \u0437\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0437\u0430\u0440\u0430\u0434\u0438 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442\u0442\u0430.
+User.IllegalFullname=\
+ \u041d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u201e{0}\u201c \u0437\u0430 \u043f\u044a\u043b\u043d\u043e \u0438\u043c\u0435 \u0437\u0430\u0440\u0430\u0434\u0438 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442\u0442\u0430.
diff --git a/core/src/main/resources/hudson/model/Messages_da.properties b/core/src/main/resources/hudson/model/Messages_da.properties
index 0d56bd9348..398a544ac9 100644
--- a/core/src/main/resources/hudson/model/Messages_da.properties
+++ b/core/src/main/resources/hudson/model/Messages_da.properties
@@ -216,7 +216,6 @@ Queue.InProgress=Et byg er allerede i gang
Computer.DeletePermission.Description=Denne rettighed tillader brugere at slette eksisterende slaver.
UpdateCenter.Status.ConnectionFailed=
UpdateCenter.PluginCategory.maven=Maven
-CLI.online-node.shortDescription=Genoptag brugen af en byggenode, for at annullere en tidligere udstedt "offline-node" kommando.
Computer.Permissions.Title=Slave
BallColor.Success=Succes
UpdateCenter.PluginCategory.upload=Artifaktsendere
diff --git a/core/src/main/resources/hudson/model/Messages_de.properties b/core/src/main/resources/hudson/model/Messages_de.properties
index 224c57120b..5200d02ed0 100644
--- a/core/src/main/resources/hudson/model/Messages_de.properties
+++ b/core/src/main/resources/hudson/model/Messages_de.properties
@@ -84,7 +84,6 @@ CLI.enable-job.shortDescription=Job aktivieren.
CLI.connect-node.shortDescription=Erneut mit Knoten verbinden.
CLI.disconnect-node.shortDescription=Knoten trennen.
CLI.offline-node.shortDescription=Knoten wird bis zum n\u00e4chsten "online-node"-Kommando f\u00fcr keine neuen Builds verwendet.
-CLI.online-node.shortDescription=Knoten wird wieder f\u00fcr neue Builds verwendet. Hebt ein vorausgegangenes "offline-node"-Kommando auf.
CLI.safe-restart.shortDescription=Startet Jenkins neu.
Queue.init=Build-Warteschlange neu initialisieren
diff --git a/core/src/main/resources/hudson/model/Messages_es.properties b/core/src/main/resources/hudson/model/Messages_es.properties
index 80298ea215..6d34cc004d 100644
--- a/core/src/main/resources/hudson/model/Messages_es.properties
+++ b/core/src/main/resources/hudson/model/Messages_es.properties
@@ -61,7 +61,6 @@ CLI.disable-job.shortDescription=Desactivar una tarea
CLI.enable-job.shortDescription=Activar una tarea
CLI.disconnect-node.shortDescription=Desconectarse de un nodo
CLI.connect-node.shortDescription=Reconectarse con un nodo
-CLI.online-node.shortDescription=Continuar usando un nodo y candelar el comando "offline-node" mas reciente.
CLI.offline-node.shortDescription=Dejar de utilizar un nodo temporalmente hasta que se ejecute el comando "online-node".
Computer.Caption=Remoto {0}
diff --git a/core/src/main/resources/hudson/model/Messages_it.properties b/core/src/main/resources/hudson/model/Messages_it.properties
index e4fcfab23f..6b5ceb2116 100644
--- a/core/src/main/resources/hudson/model/Messages_it.properties
+++ b/core/src/main/resources/hudson/model/Messages_it.properties
@@ -78,7 +78,6 @@ CLI.disable-job.shortDescription=Disabilita un job
CLI.enable-job.shortDescription=Abilita un job
CLI.disconnect-node.shortDescription=Disconnects from a node
CLI.connect-node.shortDescription=Riconnettersi ad un nodo
-CLI.online-node.shortDescription=Resume using a node for performing builds, to cancel out the earlier "offline-node" command.
CLI.offline-node.shortDescription=Stop using a node for performing builds temporarily, until the next "online-node" command.
CLI.wait-node-online.shortDescription=Attende che il nodo sia attivo
CLI.wait-node-offline.shortDescription=Attende che un nodo sia disattivo
diff --git a/core/src/main/resources/hudson/model/Messages_ja.properties b/core/src/main/resources/hudson/model/Messages_ja.properties
index 688164d11f..a861286d67 100644
--- a/core/src/main/resources/hudson/model/Messages_ja.properties
+++ b/core/src/main/resources/hudson/model/Messages_ja.properties
@@ -320,7 +320,6 @@ CLI.disable-job.shortDescription=\u30b8\u30e7\u30d6\u3092\u7121\u52b9\u5316\u305
CLI.enable-job.shortDescription=\u30b8\u30e7\u30d6\u3092\u6709\u52b9\u5316\u3057\u307e\u3059\u3002
CLI.disconnect-node.shortDescription=\u30ce\u30fc\u30c9\u3068\u306e\u63a5\u7d9a\u3092\u5207\u65ad\u3057\u307e\u3059\u3002
CLI.connect-node.shortDescription=\u30ce\u30fc\u30c9\u3068\u518d\u63a5\u7d9a\u3057\u307e\u3059\u3002
-CLI.online-node.shortDescription=\u76f4\u524d\u306b\u5b9f\u884c\u3057\u305f"online-node"\u30b3\u30de\u30f3\u30c9\u3092\u53d6\u308a\u6d88\u3057\u3001\u30d3\u30eb\u30c9\u3092\u5b9f\u884c\u3059\u308b\u30ce\u30fc\u30c9\u306e\u4f7f\u7528\u3092\u518d\u958b\u3057\u307e\u3059\u3002
CLI.offline-node.shortDescription="online-node"\u30b3\u30de\u30f3\u30c9\u304c\u5b9f\u884c\u3055\u308c\u308b\u307e\u3067\u3001\u30d3\u30eb\u30c9\u3092\u5b9f\u884c\u3059\u308b\u30ce\u30fc\u30c9\u306e\u4f7f\u7528\u3092\u4e00\u6642\u7684\u306b\u505c\u6b62\u3057\u307e\u3059\u3002
CLI.wait-node-online.shortDescription=\u30ce\u30fc\u30c9\u304c\u30aa\u30f3\u30e9\u30a4\u30f3\u306b\u306a\u308b\u306e\u3092\u5f85\u3061\u307e\u3059\u3002
CLI.wait-node-offline.shortDescription=\u30ce\u30fc\u30c9\u304c\u30aa\u30d5\u30e9\u30a4\u30f3\u306b\u306a\u308b\u306e\u3092\u5f85\u3061\u307e\u3059\u3002
diff --git a/core/src/main/resources/hudson/model/Messages_pt_BR.properties b/core/src/main/resources/hudson/model/Messages_pt_BR.properties
index b3c522587d..4f2f98122b 100644
--- a/core/src/main/resources/hudson/model/Messages_pt_BR.properties
+++ b/core/src/main/resources/hudson/model/Messages_pt_BR.properties
@@ -357,8 +357,6 @@ UpdateCenter.Status.ConnectionFailed=Erro ao conectar {0} /
UpdateCenter.PluginCategory.maven=Maven
# Slave
Computer.Permissions.Title=Slave
-# Resume using a node for performing builds, to cancel out the earlier "offline-node" command.
-CLI.online-node.shortDescription=Continuar usando um n\u00f3 para realizar os builds
# Artifact Uploaders
UpdateCenter.PluginCategory.upload=Carregadores de artefatos
# Last unstable build
diff --git a/core/src/main/resources/hudson/model/queue/Messages_bg.properties b/core/src/main/resources/hudson/model/queue/Messages_bg.properties
new file mode 100644
index 0000000000..ecdebcf22b
--- /dev/null
+++ b/core/src/main/resources/hudson/model/queue/Messages_bg.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+QueueSorter.installDefaultQueueSorter=\
+ \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u0430 \u0437\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430 \u043f\u043e\u0434\u0440\u0435\u0434\u0431\u0430 \u043d\u0430 \u043e\u043f\u0430\u0448\u043a\u0438
diff --git a/core/src/main/resources/hudson/node_monitors/Messages_bg.properties b/core/src/main/resources/hudson/node_monitors/Messages_bg.properties
new file mode 100644
index 0000000000..cbbb31c381
--- /dev/null
+++ b/core/src/main/resources/hudson/node_monitors/Messages_bg.properties
@@ -0,0 +1,46 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+ArchitectureMonitor.DisplayName=\
+ \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430
+ClockMonitor.DisplayName=\
+ \u0420\u0430\u0437\u043b\u0438\u043a\u0430 \u0432 \u0447\u0430\u0441\u043e\u0432\u043d\u0438\u0446\u0438\u0442\u0435
+DiskSpaceMonitor.MarkedOffline=\
+ \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0437\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u201e{0}\u201c \u2014 \u043d\u044f\u043c\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u044a\u0447\u043d\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e
+DiskSpaceMonitor.MarkedOnline=\
+ \u0412\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u201e{0}\u201c \u2014 \u0438\u043c\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u044a\u0447\u043d\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e
+DiskSpaceMonitor.DisplayName=\
+ \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e
+ResponseTimeMonitor.DisplayName=\
+ \u0412\u0440\u0435\u043c\u0435 \u0437\u0430 \u043e\u0442\u0433\u043e\u0432\u043e\u0440
+ResponseTimeMonitor.MarkedOffline=\
+ \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0437\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u201e{0}\u201c \u2014 \u043b\u0438\u043f\u0441\u0432\u0430 \u043e\u0442\u0433\u043e\u0432\u043e\u0440
+ResponseTimeMonitor.TimeOut=\
+ \u0418\u0437\u0442\u0435\u0447\u0435 \u0432\u0440\u0435\u043c\u0435\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u044f \u043e\u043f\u0438\u0442 \u0437\u0430 \u201e{0}\u201c
+SwapSpaceMonitor.DisplayName=\
+ \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0437\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0438\u0440\u0430\u043d\u0435
+TemporarySpaceMonitor.DisplayName=\
+ \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0437\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438
+AbstractNodeMonitorDescriptor.NoDataYet=\
+ \u041d\u044f\u043c\u0430 \u0434\u0430\u043d\u043d\u0438
+DiskSpaceMonitorDescriptor.DiskSpace.FreeSpaceTooLow=\
+ \u0414\u0438\u0441\u043a\u043e\u0432\u043e\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u0432\u044a\u0440\u0448\u0432\u0430. \u041d\u0430 {1} \u043e\u0441\u0442\u0430\u0432\u0430\u0442 \u0441\u0430\u043c\u043e {0}\u200aGB.
diff --git a/core/src/main/resources/hudson/scheduler/Messages_bg.properties b/core/src/main/resources/hudson/scheduler/Messages_bg.properties
new file mode 100644
index 0000000000..50e8002162
--- /dev/null
+++ b/core/src/main/resources/hudson/scheduler/Messages_bg.properties
@@ -0,0 +1,37 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+BaseParser.StartEndReversed=\
+ \u0420\u0430\u0437\u043c\u0435\u043d\u0435\u043d\u0438 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0438\u043c\u0430\u0442\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434 \u201e{0}-{1}\u201c?
+BaseParser.MustBePositive=\
+ \u0421\u0442\u044a\u043f\u043a\u0430\u0442\u0430 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u043d\u043e \u0447\u0438\u0441\u043b\u043e, \u0430 \u043d\u0435 \u201e{0}\u201c
+BaseParser.OutOfRange=\
+ \u201e{0}\u201c \u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u0430 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442. \u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u043c\u0435\u0436\u0434\u0443 \u201e{1}\u201c \u0438 \u201e{2}\u201c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u043d\u043e
+CronTab.do_you_really_mean_every_minute_when_you=\
+ \u0421\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0442\u0430 \u201e{0}\u201c \u043e\u0437\u043d\u0430\u0447\u0430\u0432\u0430 \u201e\u0432\u0441\u044f\u043a\u0430 \u043c\u0438\u043d\u0443\u0442\u0430\u201c. \u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0442\u043e\u0432\u0430?\
+ \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0438\u043c\u0430\u0442\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434 \u201e{0}\u201c \u2014 \u0432\u0435\u0434\u043d\u044a\u0436 \u043d\u0430 \u0432\u0441\u0435\u043a\u0438 \u0447\u0430\u0441.
+CronTab.short_cycles_in_the_day_of_month_field_w=\
+ \u041a\u044a\u0441\u0438 \u0446\u0438\u043a\u043b\u0438 \u0432 \u043f\u043e\u043b\u0435\u0442\u043e \u201e\u0434\u0435\u043d \u043e\u0442 \u043c\u0435\u0441\u0435\u0446\u0430\u201c \u0432\u043e\u0434\u044f\u0442 \u0434\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043a\u0440\u0430\u044f \u043d\u0430 \u043c\u0435\u0441\u0435\u0446\u0430
+CronTab.spread_load_evenly_by_using_rather_than_=\
+ \u0420\u0430\u0437\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u043d\u0430\u0442\u043e\u0432\u0430\u0440\u0432\u0430\u043d\u0435\u0442\u043e \u0447\u0440\u0435\u0437 \u201e{0}\u201c, \u0430 \u043d\u0435 \u201e{1}\u201c
+CronTabList.InvalidInput=\
+ \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u0438 \u0432\u0445\u043e\u0434\u043d\u0438 \u0434\u0430\u043d\u043d\u0438: \u201e{0}\u201c: {1}
diff --git a/core/src/main/resources/hudson/scm/Messages_bg.properties b/core/src/main/resources/hudson/scm/Messages_bg.properties
new file mode 100644
index 0000000000..f61305da6d
--- /dev/null
+++ b/core/src/main/resources/hudson/scm/Messages_bg.properties
@@ -0,0 +1,29 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+NullSCM.DisplayName=\
+ \u041d\u044f\u043c\u0430
+SCM.Permissions.Title=\
+ \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438\u0442\u0435
+SCM.TagPermission.Description=\
+ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0434\u0430 \u0441\u0435 \u0441\u044a\u0437\u0434\u0430\u0432\u0430 \u043d\u043e\u0432 \u0435\u0442\u0438\u043a\u0435\u0442 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043d\u0430\
+ \u0432\u0435\u0440\u0441\u0438\u0438\u0442\u0435 \u043f\u0440\u0438 \u0432\u0441\u044f\u043a\u043e \u043d\u043e\u0432\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435.
diff --git a/core/src/main/resources/hudson/search/Messages_bg.properties b/core/src/main/resources/hudson/search/Messages_bg.properties
new file mode 100644
index 0000000000..98eebcad2c
--- /dev/null
+++ b/core/src/main/resources/hudson/search/Messages_bg.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+UserSearchProperty.DisplayName=\
+ \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435\u0442\u043e
diff --git a/core/src/main/resources/hudson/security/Messages_bg.properties b/core/src/main/resources/hudson/security/Messages_bg.properties
new file mode 100644
index 0000000000..8fbddade1a
--- /dev/null
+++ b/core/src/main/resources/hudson/security/Messages_bg.properties
@@ -0,0 +1,104 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GlobalSecurityConfiguration.DisplayName=\
+ \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442\u0442\u0430
+GlobalSecurityConfiguration.Description=\
+ \u041e\u0441\u0438\u0433\u0443\u0440\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442\u0442\u0430 \u043d\u0430 Jenkins \u2014 \u043a\u043e\u0439 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0433\u043e \u0434\u043e\u0441\u0442\u044a\u043f\u0432\u0430 \u0438 \u043f\u043e\u043b\u0437\u0432\u0430.
+
+HudsonPrivateSecurityRealm.WouldYouLikeToSignUp=\
+ \u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u0442 \u043d\u0430 \u201e{0} {1}\u201c \u0435 \u043d\u0435\u043f\u043e\u0437\u043d\u0430\u0442 \u0437\u0430 Jenkins. \u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u0442\u0435?
+LegacyAuthorizationStrategy.DisplayName=\
+ \u041e\u0441\u0442\u0430\u0440\u044f\u043b \u0440\u0435\u0436\u0438\u043c
+
+HudsonPrivateSecurityRealm.DisplayName=\
+ \u0411\u0430\u0437\u0430\u0442\u0430 \u043e\u0442 \u0434\u0430\u043d\u043d\u0438 \u0441 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438 \u043d\u0430 Jenkins
+HudsonPrivateSecurityRealm.Details.DisplayName=\
+ \u041f\u0430\u0440\u043e\u043b\u0430
+HudsonPrivateSecurityRealm.Details.PasswordError=\
+ \u0414\u0432\u0435\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u0438 \u043d\u0435 \u0441\u044a\u0432\u043f\u0430\u0434\u0430\u0442, \u0430 \u0442\u0440\u044f\u0431\u0432\u0430. \u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u0433\u0438 \u043e\u0442\u043d\u043e\u0432\u043e.
+HudsonPrivateSecurityRealm.ManageUserLinks.DisplayName=\
+ \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438\u0442\u0435
+HudsonPrivateSecurityRealm.ManageUserLinks.Description=\
+ \u0421\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435/\u0438\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435/\u043f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438\u0442\u0435 \u043d\u0430 Jenkins
+
+HudsonPrivateSecurityRealm.CreateAccount.TextNotMatchWordInImage=\
+ \u0422\u0435\u043a\u0441\u0442\u044a\u0442 \u043d\u0435 \u043e\u0442\u0433\u043e\u0432\u0430\u0440\u044f \u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e\u0442\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435
+HudsonPrivateSecurityRealm.CreateAccount.PasswordNotMatch=\
+ \u041f\u0430\u0440\u043e\u043b\u0430\u0442\u0430 \u043d\u0435 \u0441\u044a\u0432\u043f\u0430\u0434\u0430
+HudsonPrivateSecurityRealm.CreateAccount.PasswordRequired=\
+ \u041f\u0430\u0440\u043e\u043b\u0430\u0442\u0430 \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u0430
+HudsonPrivateSecurityRealm.CreateAccount.UserNameRequired=\
+ \u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e
+HudsonPrivateSecurityRealm.CreateAccount.InvalidEmailAddress=\
+ \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u0435-\u043f\u043e\u0449\u0430
+HudsonPrivateSecurityRealm.CreateAccount.UserNameAlreadyTaken=\
+ \u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f \u0435 \u0437\u0430\u0435\u0442\u043e
+
+FullControlOnceLoggedInAuthorizationStrategy.DisplayName=\
+ \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u043b\u0438\u0442\u0435 \u0441\u0435, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438, \u043c\u043e\u0433\u0430\u0442 \u0432\u0441\u0438\u0447\u043a\u043e
+
+AuthorizationStrategy.DisplayName=\
+ \u0412\u0441\u0435\u043a\u0438 \u043c\u043e\u0436\u0435 \u0432\u0441\u0438\u0447\u043a\u043e
+
+LDAPSecurityRealm.DisplayName=\
+ LDAP
+LDAPSecurityRealm.SyntaxOfServerField=\
+ \u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u044a\u0442 \u043d\u0430 \u043f\u043e\u043b\u0435\u0442\u043e \u0437\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0430 \u0435: \u0421\u042a\u0420\u0412\u042a\u0420 \u0438\u043b\u0438 \u0421\u042a\u0420\u0412\u042a\u0420:\u041f\u041e\u0420\u0422, \u0438\u043b\u0438\
+ ldaps://\u0421\u042a\u0420\u0412\u042a\u0420[:\u041f\u041e\u0420\u0422]
+LDAPSecurityRealm.UnknownHost=\
+ \u041d\u0435\u043f\u043e\u0437\u043d\u0430\u0442 \u0445\u043e\u0441\u0442: {0}
+LDAPSecurityRealm.UnableToConnect=\
+ \u041d\u044f\u043c\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u0441 \u201e{0}\u201c : {1}
+LDAPSecurityRealm.InvalidPortNumber=\
+ \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u043d\u043e\u043c\u0435\u0440 \u043d\u0430 \u043f\u043e\u0440\u0442
+
+LegacySecurityRealm.Displayname=\
+ \u041e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0437\u0430 \u0441\u044a\u0440\u0432\u043b\u0435\u0442\u0438 \u0434\u0430 \u0441\u0435 \u0433\u0440\u0438\u0436\u0438 \u0437\u0430 \u0442\u043e\u0432\u0430
+
+UserDetailsServiceProxy.UnableToQuery=\
+ \u041d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f \u201e{0}\u201c
+
+PAMSecurityRealm.DisplayName=\
+ \u0411\u0430\u0437\u0430\u0442\u0430 \u043e\u0442 \u0434\u0430\u043d\u043d\u0438 \u0441 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438 \u0438 \u0433\u0440\u0443\u043f\u0438 \u043d\u0430 Unix
+PAMSecurityRealm.ReadPermission=\
+ Jenkins \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0447\u0435\u0442\u0435 \u0444\u0430\u0439\u043b\u0430 \u201e/etc/shadow\u201c.
+PAMSecurityRealm.BelongToGroup=\
+ \u201e{0}\u201c \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0432 \u0433\u0440\u0443\u043f\u0430 \u201e{1}\u201c, \u0437\u0430 \u0434\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0447\u0435\u0442\u0435 \u0444\u0430\u0439\u043b\u0430 \u201e/etc/shadow\u201c.
+PAMSecurityRealm.RunAsUserOrBelongToGroupAndChmod=\
+ Jenkins \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d \u043a\u0430\u0442\u043e \u201e{0}\u201c \u0438\u043b\u0438 \u201e{1}\u201c \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0432 \u0433\u0440\u0443\u043f\u0430 \u201e{2}\u201c \u0438\
+ \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0441\u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0442\u0430 \u201echmod g+r /etc/shadow\u201c, \u0437\u0430 \u0434\u0430 \u0441\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438 \u043d\u0430\
+ Jenkins \u0434\u0430 \u0447\u0435\u0442\u0435 \u0444\u0430\u0439\u043b\u0430 \u201e/etc/shadow\u201c.
+PAMSecurityRealm.Success=\
+ \u0423\u0441\u043f\u0435\u0445
+PAMSecurityRealm.User=\
+ \u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b \u201e{0}\u201c
+PAMSecurityRealm.CurrentUser=\
+ \u0422\u0435\u043a\u0443\u0449\u0438\u044f\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b
+PAMSecurityRealm.Uid=\
+ \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b: {0}
+
+# not in use
+Permission.Permissions.Title=\
+ \u041b\u0438\u043f\u0441\u0432\u0430
+AccessDeniedException2.MissingPermission=\
+ \u201e{0}\u201c \u043d\u044f\u043c\u0430 \u043f\u0440\u0430\u0432\u043e\u0442\u043e \u201e{1}\u201c
diff --git a/core/src/main/resources/hudson/security/csrf/Messages_bg.properties b/core/src/main/resources/hudson/security/csrf/Messages_bg.properties
new file mode 100644
index 0000000000..c44141cacd
--- /dev/null
+++ b/core/src/main/resources/hudson/security/csrf/Messages_bg.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+DefaultCrumbIssuer.DisplayName=\
+ \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e \u0441\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u044a\u0442\u0435\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438
diff --git a/core/src/main/resources/hudson/slaves/Messages_bg.properties b/core/src/main/resources/hudson/slaves/Messages_bg.properties
new file mode 100644
index 0000000000..dccd5efbbd
--- /dev/null
+++ b/core/src/main/resources/hudson/slaves/Messages_bg.properties
@@ -0,0 +1,66 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+RetentionStrategy.Always.displayName=\
+ \u0422\u043e\u0437\u0438 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u0434\u0430 \u0435 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439-\u0434\u044a\u043b\u0433\u043e \u043d\u0430 \u043b\u0438\u043d\u0438\u044f.
+RetentionStrategy.Demand.displayName=\
+ \u0422\u043e\u0437\u0438 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u0434\u0430 \u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442 \u0438 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d \u0432 \u0434\u0440\u0443\u0433\u043e\u0442\u043e\
+ \u0432\u0440\u0435\u043c\u0435.
+RetentionStrategy.Demand.OfflineIdle=\
+ \u041d\u0435 \u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f, \u0437\u0430\u0449\u043e\u0442\u043e \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440\u044a\u0442 \u0431\u0435\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0430. \u0429\u0435 \u0441\u0435 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442.
+CommandLauncher.displayName=\
+ \u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u0447\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u044f.
+JNLPLauncher.displayName=\
+ \u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u044f Jenkins \u0447\u0440\u0435\u0437 Java Web Start
+ComputerLauncher.unexpectedError=\
+ \u041d\u0435\u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u044f Jenkins. \u0422\u043e\u0432\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0435\
+ \u0433\u0440\u0435\u0448\u043a\u0430 \u0432 \u0441\u0430\u043c\u0438\u044f Jenkins
+ComputerLauncher.abortedLaunch=\
+ \u041f\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u044f Jenkins.
+CommandLauncher.NoLaunchCommand=\
+ \u041d\u0435 \u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435.
+ConnectionActivityMonitor.OfflineCause=\
+ \u041c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u0438\u0442\u0435 \u043e\u043f\u0438\u0442\u0438 \u0437\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u0447\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0442\u0430 \u201eping\u201c \u0441\u0430 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0438
+DumbSlave.displayName=\
+ \u0418\u0437\u0446\u044f\u043b\u043e \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d Jenkins
+NodeProvisioner.EmptyString=
+OfflineCause.LaunchFailed=\
+ \u041c\u0430\u0448\u0438\u043d\u0430\u0442\u0430 \u0435 \u0434\u043e\u043a\u043b\u0430\u0434\u0432\u0430\u043d\u0430 \u043a\u0430\u0442\u043e \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u0437\u0430\u0449\u043e\u0442\u043e \u043e\u043f\u0438\u0442\u044a\u0442 \u0437\u0430 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\
+ \u043f\u0440\u043e\u0446\u0435\u0441 \u043d\u0430 Jenkins \u0431\u0435 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u0435\u043d.
+OfflineCause.connection_was_broken_=\
+ \u0412\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0431\u0435 \u043f\u0440\u0435\u043a\u044a\u0441\u043d\u0430\u0442\u0430: {0}
+SimpleScheduledRetentionStrategy.FinishedUpTime=\
+ \u041a\u043e\u043c\u043f\u044e\u0442\u044a\u0440\u044a\u0442 \u043f\u0440\u0438\u0432\u044a\u0440\u0448\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u0430\u043d\u043e\u0442\u043e \u0432\u0440\u0435\u043c\u0435 \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0430
+SimpleScheduledRetentionStrategy.displayName=\
+ \u0412\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u044f Jenkins \u043f\u043e \u043f\u043b\u0430\u043d
+EnvironmentVariablesNodeProperty.displayName=\
+ \u041f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0438 \u043d\u0430 \u0441\u0440\u0435\u0434\u0430\u0442\u0430
+SlaveComputer.DisconnectedBy=\
+ \u0412\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0431\u0435 \u043f\u0440\u0435\u043a\u044a\u0441\u043d\u0430\u0442\u0430 \u043e\u0442 \u201e{0}{1}\u201c
+NodeDescripter.CheckName.Mandatory=\
+ \u0418\u043c\u0435\u0442\u043e \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e
+ComputerLauncher.NoJavaFound=\
+ \u041e\u0442\u043a\u0440\u0438\u0442\u0430 \u0431\u0435 \u0432\u0435\u0440\u0441\u0438\u044f \u201e{0}\u201c \u043d\u0430 Java, \u043d\u043e \u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e\u043d\u0435 \u201e1.6\u201c.
+ComputerLauncher.JavaVersionResult=\
+ \u041a\u043e\u043c\u0430\u043d\u0434\u0430\u0442\u0430 \u201e{0} -version\u201c \u0432\u044a\u0440\u043d\u0430 \u201e{1}\u201c.
+ComputerLauncher.UknownJavaVersion=\
+ \u0412\u0435\u0440\u0441\u0438\u044f\u0442\u0430 \u043d\u0430 Java \u043d\u0430 \u201e{0}\u201c \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430
diff --git a/core/src/main/resources/hudson/tasks/Messages_bg.properties b/core/src/main/resources/hudson/tasks/Messages_bg.properties
new file mode 100644
index 0000000000..fae5360a11
--- /dev/null
+++ b/core/src/main/resources/hudson/tasks/Messages_bg.properties
@@ -0,0 +1,136 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Ant.DisplayName=\
+ \u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 ant.
+Ant.ExecFailed=\
+ \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430.
+Ant.ExecutableNotFound=\
+ \u0412 \u0443\u043a\u0430\u0437\u0430\u043d\u0430\u0442\u0430 \u0438\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438\u044f \u043d\u0430 ant \u201e{0}\u201c \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043e\u0442\u043a\u0440\u0438\u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u0438\u043c\u0438\u044f\u0442 \u0444\u0430\u0439\u043b.
+Ant.GlobalConfigNeeded=\
+ \u041f\u0440\u043e\u0431\u0432\u0430\u0439\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 ant.
+Ant.NotADirectory=\
+ \u201e{0}\u201c \u043d\u0435 \u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f.
+Ant.NotAntDirectory=\
+ \u201e{0}\u201c \u043d\u0435 \u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441 ant.
+Ant.ProjectConfigNeeded= \
+ \u041f\u0440\u043e\u0431\u0432\u0430\u0439\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 ant \u0437\u0430 \u0437\u0430\u0434\u0430\u0447\u0430\u0442\u0430.
+
+ArtifactArchiver.ARCHIVING_ARTIFACTS=\
+ \u0410\u0440\u0445\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0438\u0442\u0435
+ArtifactArchiver.DisplayName=\
+ \u0410\u0440\u0445\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0438\u0442\u0435
+ArtifactArchiver.SkipBecauseOnlyIfSuccessful=\
+ \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0435 \u043d\u0430 \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0430\u043d\u0435\u0442\u043e, \u0437\u0430\u0449\u043e\u0442\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435\u0442\u043e \u0435 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e.
+ArtifactArchiver.FailedToArchive=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0438: {0}
+ArtifactArchiver.NoIncludes=\
+ \u041d\u0435 \u0441\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0438 \u0437\u0430 \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0430\u043d\u0435.\n\\u041f\u0440\u043e\u0431\u0432\u0430\u0439\u0442\u0435\
+ \u0434\u0430 \u0443\u043a\u0430\u0436\u0435\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u0437\u0430 \u0438\u043c\u0435 \u043d\u0430 \u0444\u0430\u0439\u043b \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435.\n\\u0410\u043a\u043e\
+ \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0430\u0442\u0435 \u0432\u0441\u0438\u0447\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u0435 \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u043d\u043e\u0442\u043e \u043c\u044f\u0441\u0442\u043e, \u0443\u043a\u0430\u0436\u0435\u0442\u0435 \u201e**\u201c.
+ArtifactArchiver.NoMatchFound=\
+ \u041d\u0438\u043a\u043e\u0439 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u043d\u0435 \u0441\u044a\u0432\u043f\u0430\u0434\u0430 \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u201e{0}\u201c. \u0422\u043e\u0432\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u043b\u0438 \u0435?
+
+BatchFile.DisplayName=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0438 \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043d\u0430 Windows
+
+BuildTrigger.Disabled=\
+ \u0417\u0430\u0434\u0430\u0447\u0430\u0442\u0430 \u201e{0}\u201c \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0435 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435\u0442\u043e \u045d
+BuildTrigger.DisplayName=\
+ \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438
+BuildTrigger.InQueue=\
+ \u201e{0}\u201c \u0432\u0435\u0447\u0435 \u0435 \u0432 \u043e\u043f\u0430\u0448\u043a\u0430\u0442\u0430
+BuildTrigger.NoSuchProject=
+ \u041d\u044f\u043c\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0438\u043c\u0435 \u201e{0}\u201c. \u201e{1}\u201c \u043b\u0438 \u0438\u043c\u0430\u0442\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434?
+BuildTrigger.NoProjectSpecified=\
+ \u041d\u0435 \u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u043e\u0435\u043a\u0442
+BuildTrigger.NotBuildable=\
+ \u201e{0}\u201c \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u0433\u0440\u0430\u0434\u0438
+BuildTrigger.Triggering=\
+ \u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u201e{0}\u201c
+BuildTrigger.warning_access_control_for_builds_in_glo=\
+ \u041f\u0420\u0415\u0414\u0423\u041f\u0420\u0415\u0416\u0414\u0415\u041d\u0418\u0415: \u041f\u043e\u043b\u0435\u0442\u043e \u201e\u041f\u0440\u0430\u0432\u0430 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430\u201c \u0432 \u043e\u0431\u0449\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\
+ \u0437\u0430 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442\u0442\u0430 \u043d\u0435 \u0435 \u043f\u043e\u043f\u044a\u043b\u043d\u0435\u043d\u043e. \u0429\u0435 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043e\u0441\u0442\u0430\u0440\u044f\u043b\u043e\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\
+ \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438, \u0437\u0430\u0432\u0438\u0441\u0435\u0449\u0438 \u043e\u0442 \u0442\u0430\u0437\u0438
+BuildTrigger.warning_this_build_has_no_associated_aut=\
+ \u041f\u0420\u0415\u0414\u0423\u041f\u0420\u0415\u0416\u0414\u0415\u041d\u0418\u0415: \u043b\u0438\u043f\u0441\u0432\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0437\u0430 \u0442\u043e\u0432\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435, \u0437\u0430\u0442\u043e\u0432\u0430 \u0438 \u043f\u0440\u0430\u0432\u0430\u0442\u0430 \u043a\u044a\u043c\
+ \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435\u0442\u043e \u043d\u044f\u043c\u0430 \u0434\u0430 \u0441\u0430 \u043f\u044a\u043b\u043d\u0438. \u0417\u0430\u0432\u0438\u0441\u0435\u0449\u0438\u0442\u0435 \u043e\u0442 \u0442\u043e\u0432\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438, \u043a\u043e\u0438\u0442\u043e\
+ \u043d\u0435 \u0441\u0435 \u0432\u0438\u0436\u0434\u0430\u0442 \u043e\u0442 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438, \u0449\u0435 \u0431\u044a\u0434\u0430\u0442 \u043f\u0440\u043e\u043f\u0443\u0441\u043d\u0430\u0442\u0438.
+BuildTrigger.warning_you_have_no_plugins_providing_ac=\
+ \u041f\u0420\u0415\u0414\u0423\u041f\u0420\u0415\u0416\u0414\u0415\u041d\u0418\u0415: \u043b\u0438\u043f\u0441\u0432\u0430\u0442 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u043f\u0440\u0430\u0432\u0430 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f. \u0429\u0435\
+ \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043e\u0441\u0442\u0430\u0440\u044f\u043b\u043e\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u0438\
+ \u0437\u0430\u0434\u0430\u0447\u0438, \u0437\u0430\u0432\u0438\u0441\u0435\u0449\u0438 \u043e\u0442 \u0442\u0430\u0437\u0438
+BuildTrigger.you_have_no_permission_to_build_=\
+ \u041d\u044f\u043c\u0430\u0442\u0435 \u043f\u0440\u0430\u0432\u0430 \u0434\u0430 \u0438\u0437\u0433\u0440\u0430\u0434\u0438\u0442\u0435 \u201e{0}\u201c
+
+CommandInterpreter.CommandFailed=\
+ \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430
+CommandInterpreter.UnableToDelete=\
+ \u0421\u043a\u0440\u0438\u043f\u0442\u044a\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u0442\u0440\u0438\u0435 \u201e{0}\u201c
+CommandInterpreter.UnableToProduceScript=\
+ \u041d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430 \u0441\u043a\u0440\u0438\u043f\u0442
+
+Fingerprinter.Aborted=\
+ \u041f\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d\u043e
+Fingerprinter.Action.DisplayName=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u0438\u0442\u0435 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u044a\u0446\u0438
+Fingerprinter.DigestFailed=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0437\u0447\u0438\u0441\u043b\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u0438\u044f \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u044a\u043a \u043d\u0430 \u201e{0}\u201c
+Fingerprinter.DisplayName=\
+ \u0417\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u0438\u0442\u0435 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u044a\u0446\u0438 \u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435 \u0437\u0430 \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u044f\u0432\u0430\u043d\u0435 \u043d\u0430\
+ \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u043e\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e
+Fingerprinter.Failed=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u0438\u0442\u0435 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u044a\u0446\u0438
+Fingerprinter.FailedFor=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u0438\u044f \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u044a\u043a \u043d\u0430 \u201e{0}\u201c
+Fingerprinter.Recording=\
+ \u0417\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u0438\u0442\u0435 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u044a\u0446\u0438
+
+InstallFromApache=\
+ \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043e\u0442 \u0441\u0430\u0439\u0442\u0430 \u043d\u0430 Apache
+
+JavadocArchiver.DisplayName=\
+ \u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430 \u0437\u0430 Java
+JavadocArchiver.DisplayName.Generic=\
+ \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442
+JavadocArchiver.DisplayName.Javadoc=\
+ \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0437\u0430 Java
+TestJavadocArchiver.DisplayName.Javadoc=\
+ \u0422\u0435\u0441\u0442\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430 \u0437\u0430 Java
+JavadocArchiver.NoMatchFound=\
+ \u041b\u0438\u043f\u0441\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0437\u0430 Java \u0432 \u201e{0}\u201c: {1}
+JavadocArchiver.Publishing=\
+ \u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430 \u0437\u0430 Java
+JavadocArchiver.UnableToCopy=\
+ \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430 \u0437\u0430 Java \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043a\u043e\u043f\u0438\u0440\u0430 \u043e\u0442 \u201e{0}\u201c \u0432 \u201e{1}\u201c
+
+Maven.DisplayName=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0430 \u0446\u0435\u043b \u043d\u0430 Maven
+Maven.ExecFailed=\
+ \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430
+Maven.NotMavenDirectory=\
+ \u201e{0}\u201c \u043d\u0435 \u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043d\u0430 Maven
+Maven.NoExecutable=\
+ \u041d\u044f\u043c\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u0438\u043c \u0444\u0430\u0439\u043b \u0432 \u201e{0}\u201c
+
+Shell.DisplayName=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440
diff --git a/core/src/main/resources/hudson/tools/Messages_bg.properties b/core/src/main/resources/hudson/tools/Messages_bg.properties
new file mode 100644
index 0000000000..478d54594f
--- /dev/null
+++ b/core/src/main/resources/hudson/tools/Messages_bg.properties
@@ -0,0 +1,61 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+ToolLocationNodeProperty.displayName=\
+ \u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438\u0442\u0435
+CommandInstaller.DescriptorImpl.displayName=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430 \u043e\u0431\u0432\u0438\u0432\u043a\u0430\u0442\u0430
+CommandInstaller.no_command=\
+ \u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0443\u043a\u0430\u0436\u0435\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043a\u043e\u044f\u0442\u043e \u0434\u0430 \u0441\u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u0438.
+CommandInstaller.no_toolHome=\
+ \u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0443\u043a\u0430\u0436\u0435\u0442\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438\u0442\u0435
+BatchCommandInstaller.DescriptorImpl.displayName=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0444\u0430\u0439\u043b
+JDKInstaller.FailedToInstallJDK=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 JDK (\u0440\u0430\u0437\u0432\u043e\u0439\u043d\u0438\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u0437\u0430 Java). \u0418\u0437\u0445\u043e\u0434\u043d\u0438\u044f\u0442 \u043a\u043e\u0434\
+ \u0435 {0}
+JDKInstaller.RequireOracleAccount=\
+ \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435\u0442\u043e \u043d\u0430 JDK (\u0440\u0430\u0437\u0432\u043e\u0439\u043d\u0438\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u0437\u0430 Java) \u0438\u0437\u0438\u0441\u043a\u0432\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f\
+ \u043a\u044a\u043c Oracle. \u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e\u0442\u043e \u0441\u0438 \u0438\u043c\u0435 \u0438\
+ \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430
+JDKInstaller.UnableToInstallUntilLicenseAccepted=\
+ \u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043f\u0440\u0438\u0435\u043c\u0435\u0442\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0430 \u0437\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0442\u043e \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 JDK (\u0440\u0430\u0437\u0432\u043e\u0439\u043d\u0438\u0442\u0435\
+ \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u0437\u0430 Java).
+ZipExtractionInstaller.DescriptorImpl.displayName=\
+ \u0420\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435 \u0441 \u0440\u0430\u0437\u0448\u0438\u0440\u0435\u043d\u0438\u0435 *.zip/*.tar.gz
+ZipExtractionInstaller.bad_connection=\
+ \u0421\u044a\u0440\u0432\u044a\u0440\u044a\u0442 \u043e\u0442\u043a\u0430\u0437\u0430 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430.
+ZipExtractionInstaller.malformed_url=\
+ \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u0430\u0434\u0440\u0435\u0441.
+ZipExtractionInstaller.could_not_connect=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u043a\u044a\u043c \u0430\u0434\u0440\u0435\u0441\u0430.
+InstallSourceProperty.DescriptorImpl.displayName=\
+ \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435
+JDKInstaller.DescriptorImpl.displayName=\
+ \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043e\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 java.sun.com
+JDKInstaller.DescriptorImpl.doCheckId=\
+ \u0423\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043d\u0430 JDK (\u0440\u0430\u0437\u0432\u043e\u0439\u043d\u0438\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u0437\u0430 Java)
+JDKInstaller.DescriptorImpl.doCheckAcceptLicense=\
+ \u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043f\u0440\u0438\u0435\u043c\u0435\u0442\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0430, \u0437\u0430 \u0434\u0430 \u0441\u0432\u0430\u043b\u0438\u0442\u0435 JDK (\u0440\u0430\u0437\u0432\u043e\u0439\u043d\u0438\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u0437\u0430 Java).
+ToolDescriptor.NotADirectory=\
+ \u201e{0}\u201c \u043d\u0435 \u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u044f \u0441\u044a\u0440\u0432\u044a\u0440 \u043d\u0430 Jenkins (\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e \u0435 \u0434\u0430 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430\
+ \u043d\u0430 \u043d\u044f\u043a\u043e\u0438 \u043e\u0442 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u0442\u0435 \u043c\u0430\u0448\u0438\u043d\u0438)
diff --git a/core/src/main/resources/hudson/triggers/Messages_bg.properties b/core/src/main/resources/hudson/triggers/Messages_bg.properties
new file mode 100644
index 0000000000..676b066393
--- /dev/null
+++ b/core/src/main/resources/hudson/triggers/Messages_bg.properties
@@ -0,0 +1,42 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+SCMTrigger.DisplayName=\
+ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438\u0442\u0435
+SCMTrigger.getDisplayName=\
+ \u0416\u0443\u0440\u043d\u0430\u043b \u0437\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438\u0442\u0435 \u043d\u0430 \u201e{0}\u201c
+SCMTrigger.BuildAction.DisplayName=\
+ \u0416\u0443\u0440\u043d\u0430\u043b \u0437\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438\u0442\u0435
+SCMTrigger.SCMTriggerCause.ShortDescription=\
+ \u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u043e \u043e\u0442 \u043f\u0440\u043e\u043c\u044f\u043d\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438\u0442\u0435
+TimerTrigger.DisplayName=\
+ \u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+TimerTrigger.MissingWhitespace=\
+ \u041b\u0438\u043f\u0441\u0432\u0430 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0430\u0442\u0430 \u0437\u043d\u0430\u043a\u0430 \u201e*\u201c.
+TimerTrigger.no_schedules_so_will_never_ru\u00a7n=\
+ \u041d\u044f\u043c\u0430 \u043f\u043b\u0430\u043d \u0437\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435, \u043d\u0438\u0449\u043e \u043d\u044f\u043c\u0430 \u0434\u0430 \u0441\u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u0438.
+TimerTrigger.TimerTriggerCause.ShortDescription=\
+ \u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d \u043e\u0442 \u0445\u0440\u043e\u043d\u043e\u043c\u0435\u0442\u044a\u0440
+TimerTrigger.would_last_have_run_at_would_next_run_at=\
+ \u041f\u0440\u0435\u0434\u0438\u0448\u043d\u043e\u0442\u043e \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u0438 \u0431\u0438\u043b\u043e \u0432 {0}. \u0421\u043b\u0435\u0434\u0432\u0430\u0449\u043e\u0442\u043e \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0432\u0430 \u0434\u0430 \u0435 \u0432 {1}.
+Trigger.init=\
+ \u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u0442\u043e \u043d\u0430 \u0445\u0440\u043e\u043d\u043e\u043c\u0435\u0442\u0440\u0438\u0442\u0435
diff --git a/core/src/main/resources/hudson/util/Messages_bg.properties b/core/src/main/resources/hudson/util/Messages_bg.properties
new file mode 100644
index 0000000000..54e52ee25b
--- /dev/null
+++ b/core/src/main/resources/hudson/util/Messages_bg.properties
@@ -0,0 +1,38 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+ClockDifference.InSync=\
+ \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0430\u043d
+ClockDifference.Ahead=\
+ {0} \u043d\u0430\u043f\u0440\u0435\u0434
+ClockDifference.Behind=\
+ {0} \u043d\u0430\u0437\u0430\u0434
+ClockDifference.Failed=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430
+FormFieldValidator.did_not_manage_to_validate_may_be_too_sl=\
+ \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 {0} (\u043c\u043e\u0436\u0435 Jenkins \u0434\u0430 \u0435 \u043f\u0440\u0435\u043a\u0430\u043b\u0435\u043d\u043e \u0431\u0430\u0432\u0435\u043d)
+FormValidation.ValidateRequired=\
+ \u0417\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u0430 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442
+FormValidation.Error.Details=\
+ (\u0434\u0435\u0442\u0430\u0439\u043b\u0438)
+HttpResponses.Saved=\
+ \u0417\u0430\u043f\u0430\u0437\u0435\u043d\u043e
diff --git a/core/src/main/resources/hudson/views/Messages_bg.properties b/core/src/main/resources/hudson/views/Messages_bg.properties
new file mode 100644
index 0000000000..517870597a
--- /dev/null
+++ b/core/src/main/resources/hudson/views/Messages_bg.properties
@@ -0,0 +1,42 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+BuildButtonColumn.DisplayName=\
+ \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+JobColumn.DisplayName=\
+ \u0418\u043c\u0435
+LastDurationColumn.DisplayName=\
+ \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u0442\u0440\u0430\u0435\u043d\u0435
+LastFailureColumn.DisplayName=\
+ \u041f\u043e\u0441\u043b\u0435\u0434\u0435\u043d \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+LastStableColumn.DisplayName=\
+ \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f
+LastSuccessColumn.DisplayName=\
+ \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435
+StatusColumn.DisplayName=\
+ \u0421\u044a\u0441\u0442\u043e\u044f\u043d\u0438\u0435
+WeatherColumn.DisplayName=\
+ \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430
+DefaultViewsTabsBar.DisplayName=\
+ \u041b\u0435\u043d\u0442\u0430 \u0437\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0438
+DefaultMyViewsTabsBar.DisplayName=\
+ \u041b\u0435\u043d\u0442\u0430 \u0437\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u0438 \u0438\u0437\u0433\u043b\u0435\u0434\u0438
diff --git a/core/src/main/resources/hudson/widgets/Messages_bg.properties b/core/src/main/resources/hudson/widgets/Messages_bg.properties
new file mode 100644
index 0000000000..861f6002f3
--- /dev/null
+++ b/core/src/main/resources/hudson/widgets/Messages_bg.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+BuildHistoryWidget.DisplayName=\
+ \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043d\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f\u0442\u0430
diff --git a/core/src/main/resources/jenkins/management/Messages_bg.properties b/core/src/main/resources/jenkins/management/Messages_bg.properties
index f5fcc33c85..960e9bf8ed 100644
--- a/core/src/main/resources/jenkins/management/Messages_bg.properties
+++ b/core/src/main/resources/jenkins/management/Messages_bg.properties
@@ -1,7 +1,6 @@
-#
# The MIT License
#
-# Copyright (c) 2012, CloudBees, Intl., Nicolas De loof
+# Bulgarian translation copyright 2015 Alexander Shopov .
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -20,16 +19,61 @@
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-#
-PluginsLink.Description=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435, \u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435, \u0441\u043F\u0438\u0440\u0430\u043D\u0435 \u0438 \u043F\u0443\u0441\u043A\u0430\u043D\u0435 \u043D\u0430 \u043F\u043B\u044A\u0433\u0438\u043D\u0438, \u043A\u043E\u0438\u0442\u043E \u043C\u043E\u0433\u0430\u0442 \u0434\u0430 \u0440\u0430\u0437\u0448\u0438\u0440\u044F\u0442 \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u043D\u043E\u0441\u0442\u0442\u0430 \u043D\u0430 Jenkins.
-ConfigureLink.DisplayName=\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u0430 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430
-ConfigureLink.Description=\u041A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0433\u043B\u0430\u0432\u043D\u0438\u0442\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0438 \u043F\u044A\u0442\u0435\u043A\u0438
-SystemInfoLink.Description=\u041F\u043E\u043A\u0430\u0437\u0432\u0430 \u0440\u0430\u0437\u043D\u043E\u043E\u0431\u0440\u0430\u0437\u043D\u0430 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u0437\u0430 \u0441\u0440\u0435\u0434\u0430\u0442\u0430 \u0441 \u0446\u0435\u043B \u0434\u0430 \u0430\u0441\u0438\u0441\u0442\u0438\u0440\u0430 \u043E\u0442\u0441\u0442\u0440\u0430\u043D\u044F\u0432\u0430\u043D\u0435\u0442\u043E \u043D\u0430 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0438.
-StatisticsLink.DisplayName=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430 \u043D\u0430 \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043D\u0435\u0442\u043E
-NodesLink.DisplayName=\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u0430 \u043C\u0430\u0448\u0438\u043D\u0438
-PluginsLink.DisplayName=\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u0430 \u043F\u043B\u044A\u0433\u0438\u043D\u0438
-ShutdownLink.DisplayName_prepare=\u041F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043A\u0430 \u0437\u0430 \u0438\u0437\u043A\u043B\u044E\u0447\u0432\u0430\u043D\u0435
-ReloadLink.DisplayName=\u041F\u0440\u0435\u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043D\u0435 \u043D\u0430 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043E\u0442 \u0434\u0438\u0441\u043A\n\
- \u041F\u043E\u043B\u0435\u0437\u043D\u043E \u0435 \u0430\u043A\u043E \u0441\u0442\u0435 \u043C\u043E\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u043B\u0438 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u043E\u0432\u0435 \u0434\u0438\u0440\u0435\u043A\u0442\u043D\u043E \u043D\u0430 \u0434\u0438\u0441\u043A\u0430.
-SystemInfoLink.DisplayName=\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u0430 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F.
+ConfigureLink.DisplayName=\
+ \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430
+ConfigureLink.Description=\
+ \u041e\u0431\u0449\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043f\u044a\u0442\u0438\u0449\u0430.
+
+ReloadLink.DisplayName=\
+ \u041f\u0440\u0435\u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u043e\u0442 \u0434\u0438\u0441\u043a\u0430
+ReloadLink.Description=\
+ \u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u0432 \u043f\u0430\u043c\u0435\u0442\u0442\u0430 \u0438 \u043f\u0440\u0435\u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043e\u0442\
+ \u0434\u0438\u0441\u043a\u0430.\n\u0422\u043e\u0432\u0430 \u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u043a\u043e\u0433\u0430\u0442\u043e \u0441\u0442\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e \u0434\u0438\u0441\u043a\u0430.
+
+PluginsLink.DisplayName=\
+ \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438\u0442\u0435
+PluginsLink.Description=\
+ \u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435, \u043f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435, \u0441\u043f\u0438\u0440\u0430\u043d\u0435 \u0438 \u043f\u0443\u0441\u043a\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438, \u043a\u043e\u0438\u0442\u043e \u0434\u043e\u043f\u044a\u043b\u0432\u0430\u0442 \u0438\
+ \u0440\u0430\u0437\u0448\u0438\u0440\u044f\u0432\u0430\u0442 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\u0442\u0435 \u043d\u0430 Jenkins.
+
+SystemInfoLink.DisplayName=\
+ \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430
+SystemInfoLink.Description=\
+ \u0418\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0441\u0440\u0435\u0434\u0430\u0442\u0430 \u0441 \u0446\u0435\u043b \u043e\u0442\u0441\u0442\u0440\u0430\u043d\u044f\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438.
+
+SystemLogLink.DisplayName=\
+ \u0421\u0438\u0441\u0442\u0435\u043c\u0435\u043d \u0436\u0443\u0440\u043d\u0430\u043b
+SystemLogLink.Description=\
+ \u0412 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0438\u044f \u0436\u0443\u0440\u043d\u0430\u043b \u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0432\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u043e\u0442 java.util.logging \u0437\u0430\
+ Jenkins.
+
+StatisticsLink.DisplayName=\
+ \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043d\u0430 \u043d\u0430\u0442\u043e\u0432\u0430\u0440\u0432\u0430\u043d\u0435\u0442\u043e
+StatisticsLink.Description=\
+ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0438\u0442\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0438, \u0437\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0435\u0432\u0435\u043d\u0442\u0443\u0430\u043b\u043d\u0430\u0442\u0430 \u043d\u0443\u0436\u0434\u0430 \u043e\u0442 \u043e\u0449\u0435\
+ \u043c\u0430\u0448\u0438\u043d\u0438 \u0437\u0430 Jenkins.
+
+CliLink.DisplayName=\
+ Jenkins \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0438\u044f \u0440\u0435\u0434
+CliLink.Description=\
+ \u0414\u043e\u0441\u0442\u044a\u043f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 Jenkins \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0438\u044f \u0440\u0435\u0434 \u0438\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442.
+
+ConsoleLink.DisplayName=\
+ \u041a\u043e\u043d\u0437\u043e\u043b\u0430
+ConsoleLink.Description=\
+ \u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u0435\u043d \u0441\u043a\u0440\u0438\u043f\u0442 \u0437\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d\u0435, \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435 \u0438 \u043e\u0442\u0441\u0442\u0440\u0430\u043d\u044f\u0432\u0430\u043d\u0435\
+ \u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438.
+
+NodesLink.DisplayName=\
+ \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0438
+NodesLink.Description=\
+ \u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435, \u043f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0438\u0442\u0435 \u043c\u0430\u0448\u0438\u043d\u0438, \u043d\u0430 \u043a\u043e\u0438\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0438 Jenkins.
+
+ShutdownLink.DisplayName_prepare=\
+ \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0437\u0430 \u0438\u0437\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435
+ShutdownLink.DisplayName_cancel=\
+ \u041e\u0442\u043c\u044f\u043d\u0430 \u043d\u0430 \u0438\u0437\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435\u0442\u043e
+ShutdownLink.Description=\
+ \u041d\u0435\u0434\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u0438 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f, \u0437\u0430 \u0434\u0430 \u043c\u043e\u0436\u0435 \u0432 \u0434\u0430\u0434\u0435\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u0430\u0448\u0438\u043d\u0430\u0442\u0430 \u0434\u0430 \u0431\u044a\u0434\u0435\
+ \u0441\u043f\u0440\u044f\u043d\u0430.
diff --git a/core/src/main/resources/jenkins/model/Messages_bg.properties b/core/src/main/resources/jenkins/model/Messages_bg.properties
index 3ecd599250..21bcd85721 100644
--- a/core/src/main/resources/jenkins/model/Messages_bg.properties
+++ b/core/src/main/resources/jenkins/model/Messages_bg.properties
@@ -1 +1,116 @@
-BuildDiscarderProperty.displayName=\u041F\u0440\u0435\u043D\u0435\u0431\u0440\u0435\u0433\u0432\u0430\u043D\u0435 \u043D\u0430 \u0441\u0442\u0430\u0440\u0438\u0442\u0435 \u0431\u0438\u043B\u0434\u043E\u0432\u0435
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+Hudson.BadPortNumber=\
+ \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u043d\u043e\u043c\u0435\u0440 \u043d\u0430 \u043f\u043e\u0440\u0442: {0}
+Hudson.Computer.Caption=\
+ \u041e\u0441\u043d\u043e\u0432\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440
+Hudson.Computer.DisplayName=\
+ \u043e\u0441\u043d\u043e\u0432\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440
+Hudson.ControlCodeNotAllowed=\
+ \u041d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043d\u0438 \u0437\u043d\u0430\u0446\u0438: {0}
+Hudson.DisplayName=\
+ Jenkins
+Hudson.JobAlreadyExists=\
+ \u0412\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441 \u0438\u043c\u0435 \u201e{0}\u201c
+Hudson.NoJavaInPath=\
+ \u0412 \u043f\u044a\u0442\u0438\u0449\u0430\u0442\u0430 \u0441\u043e\u0447\u0435\u043d\u0438 \u043e\u0442 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0430\u0442\u0430 \u201ePATH\u201c \u043b\u0438\u043f\u0441\u0432\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0442\u0430 \u201ejava\u201c.\u00a0\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\
+ \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u0437\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 JAVA\
+ \u2014 JDK?
+Hudson.NoName=\
+ \u041b\u0438\u043f\u0441\u0432\u0430 \u0438\u043c\u0435
+Hudson.NodeBeingRemoved=\
+ \u0418\u0437\u0432\u0430\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430\u0442\u0430 \u043e\u0442 \u0433\u0440\u0443\u043f\u0430\u0442\u0430
+Hudson.UnsafeChar=\
+ \u0417\u043d\u0430\u0446\u0438 \u043a\u0430\u0442\u043e \u201e{0}\u201c \u0435 \u043e\u043f\u0430\u0441\u043d\u043e \u0434\u0430 \u0441\u0435 \u043f\u043e\u043b\u0437\u0432\u0430\u0442
+Hudson.JobNameConventionNotApplyed=\
+ \u201e{0}\u201c \u043d\u0435 \u043d\u0430\u043f\u0430\u0441\u0432\u0430 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0437\u0430 \u0438\u043c\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u201e{1}\u201c
+Hudson.ViewAlreadyExists=\
+ \u0412\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u0438\u0437\u0433\u043b\u0435\u0434 \u0441 \u0438\u043c\u0435 \u201e{0}\u201c
+Hudson.ViewName=\
+ \u0412\u0441\u0438\u0447\u043a\u0438
+Hudson.NotUsesUTF8ToDecodeURL=\
+ \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044a\u0442 \u0437\u0430 \u0441\u044a\u0440\u0432\u043b\u0435\u0442\u0438, \u0432 \u043a\u043e\u0439\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0438 Jenkins, \u043d\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 UTF-8 \u0437\u0430\
+ \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0438\u0442\u0435. \u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0437\u043d\u0430\u0446\u0438 \u0438\u0437\u0432\u044a\u043d ASCII \u0432 \u0438\u043c\u0435\u043d\u0430\u0442\u0430 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438\
+ \u0438 \u0434\u0440. \u043c\u043e\u0436\u0435 \u0434\u0430 \u0434\u043e\u0432\u0435\u0434\u0435 \u0434\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438. \u0417\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e\u0433\u043b\u0435\u0434\u043d\u0435\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0437\u0430\
+ \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\
+ \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0437\u0430 \
+ \u0438\u043d\u0442\u0435\u0440\u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 Tomcat i18n.
+Hudson.NodeDescription=\
+ \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u044f\u0442 \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u043d\u0430 Jenkins
+
+
+CLI.restart.shortDescription=\
+ \u0420\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Jenkins.
+CLI.safe-restart.shortDescription=\
+ \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Jenkins.
+CLI.keep-build.shortDescription=\
+ \u0422\u043e\u0432\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0434\u0430 \u0441\u0435 \u0437\u0430\u043f\u0430\u0437\u0438 \u0437\u0430\u0432\u0438\u043d\u0430\u0433\u0438.
+CLI.quiet-down.shortDescription=\
+ \u041f\u0440\u0438\u0432\u044a\u0440\u0448\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u0430 \u043d\u0430 Jenkins \u043f\u0440\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435. \u0414\u0430 \u043d\u0435\
+ \u0437\u0430\u043f\u043e\u0447\u0432\u0430\u0442 \u043d\u043e\u0432\u0438 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f.
+CLI.cancel-quiet-down.shortDescription=\
+ \u041e\u0442\u043c\u044f\u043d\u0430 \u043d\u0430 \u0435\u0444\u0435\u043a\u0442\u0430 \u043d\u0430 \u043f\u0440\u0438\u0432\u044a\u0440\u0448\u0432\u0430\u043d\u0435\u0442\u043e.
+CLI.reload-configuration.shortDescription=\
+ \u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u0430\u043c\u0435\u0442\u0442\u0430 \u0438 \u043f\u0440\u0435\u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u043e \u043e\u0442 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430.\
+ \u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0438 \u043f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0435 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e \u0434\u0438\u0441\u043a\u0430.
+CauseOfInterruption.ShortDescription=\
+ \u041f\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d\u043e \u043e\u0442 \u201e{0}\u201c
+CLI.shutdown.shortDescription=\
+ \u041d\u0435\u0437\u0430\u0431\u0430\u0432\u043d\u043e \u0441\u043f\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Jenkins.
+CLI.safe-shutdown.shortDescription=\
+ \u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 Jenkins \u0432 \u0440\u0435\u0436\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u0432\u044a\u0440\u0448\u0432\u0430\u043d\u0435 \u2014 \u043d\u0435 \u0441\u0435 \u043f\u0440\u0438\u0435\u043c\u0430\u0442 \u043d\u043e\u0432\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0437\u0430\
+ \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435, \u0430 \u0432\u0435\u0447\u0435 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0438\u0442\u0435 \u0441\u0435 \u0438\u0437\u0447\u0430\u043a\u0432\u0430\u0442.
+
+DefaultProjectNamingStrategy.DisplayName=\
+ \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e
+
+IdStrategy.CaseInsensitive.DisplayName=\
+ \u0411\u0435\u0437 \u0440\u0430\u0437\u043b\u0438\u043a\u0430 \u0433\u043b\u0430\u0432\u043d\u0438/\u043c\u0430\u043b\u043a\u0438
+IdStrategy.CaseSensitive.DisplayName=\
+ \u0420\u0430\u0437\u043b\u0438\u043a\u0430 \u0433\u043b\u0430\u0432\u043d\u0438/\u043c\u0430\u043b\u043a\u0438
+IdStrategy.CaseSensitiveEmailAddress.DisplayName=\
+ \u0420\u0430\u0437\u043b\u0438\u043a\u0430 \u0433\u043b\u0430\u0432\u043d\u0438/\u043c\u0430\u043b\u043a\u0438 (\u0437\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430 \u0435-\u043f\u043e\u0449\u0430)
+
+Mailer.Address.Not.Configured=\
+ \u0430\u0434\u0440\u0435\u0441\u044a\u0442 \u043d\u0435 \u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d
+Mailer.Localhost.Error=\
+ \u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0434\u0440\u0443\u0433\u043e \u0438\u043c\u0435 \u043d\u0430 \u0445\u043e\u0441\u0442, \u0430 \u043d\u0435 \u201elocalhost\u201c
+
+PatternProjectNamingStrategy.DisplayName=\
+ \u0428\u0430\u0431\u043b\u043e\u043d
+PatternProjectNamingStrategy.NamePatternRequired=\
+ \u0418\u0437\u0438\u0441\u043a\u0432\u0430 \u0441\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u0437\u0430 \u0438\u043c\u0435\u0442\u043e
+PatternProjectNamingStrategy.NamePatternInvalidSyntax=\
+ \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u0435\u043d \u0438\u0437\u0440\u0430\u0437.
+ParameterizedJobMixIn.build_with_parameters=\
+ \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438
+ParameterizedJobMixIn.build_now=\
+ \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0441\u0435\u0433\u0430
+BlockedBecauseOfBuildInProgress.shortDescription=\
+ \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u2116\u200a{0} \u0432\u0435\u0447\u0435 \u0441\u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430{1}
+BlockedBecauseOfBuildInProgress.ETA=\
+ \ (\u043e\u0441\u0442\u0430\u0432\u0430\u0442: {0})
+BuildDiscarderProperty.displayName=\
+ \u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0441\u0442\u0430\u0440\u0438\u0442\u0435 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u044f
diff --git a/core/src/main/resources/jenkins/mvn/Messages_bg.properties b/core/src/main/resources/jenkins/mvn/Messages_bg.properties
new file mode 100644
index 0000000000..c74aae881b
--- /dev/null
+++ b/core/src/main/resources/jenkins/mvn/Messages_bg.properties
@@ -0,0 +1,30 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+DefaultSettingsProvider.DisplayName=\
+ \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 maven
+DefaultGlobalSettingsProvider.DisplayName=\
+ \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u043d\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 maven
+FilePathGlobalSettingsProvider.DisplayName=\
+ \u0413\u043b\u043e\u0431\u0430\u043b\u043d\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0442 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430
+FilePathSettingsProvider.DisplayName=\
+ \u0424\u0430\u0439\u043b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u044a\u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430
diff --git a/core/src/main/resources/jenkins/security/Messages_bg.properties b/core/src/main/resources/jenkins/security/Messages_bg.properties
new file mode 100644
index 0000000000..f11e5d4a0b
--- /dev/null
+++ b/core/src/main/resources/jenkins/security/Messages_bg.properties
@@ -0,0 +1,33 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+ApiTokenProperty.DisplayName=\
+ \u041d\u0438\u0437 \u0437\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0437\u0430 API
+ApiTokenProperty.ChangeToken.TokenIsHidden=\
+ \u041d\u0438\u0437\u044a\u0442 \u0437\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0435 \u0441\u043a\u0440\u0438\u0442
+ApiTokenProperty.ChangeToken.Success=\
+
+RekeySecretAdminMonitor.DisplayName=\
+ \u0421\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432 \u043a\u043b\u044e\u0447
diff --git a/core/src/main/resources/jenkins/slaves/systemInfo/Messages_bg.properties b/core/src/main/resources/jenkins/slaves/systemInfo/Messages_bg.properties
new file mode 100644
index 0000000000..7a8edaa248
--- /dev/null
+++ b/core/src/main/resources/jenkins/slaves/systemInfo/Messages_bg.properties
@@ -0,0 +1,30 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+SystemPropertySlaveInfo.DisplayName=\
+ \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430
+EnvVarsSlaveInfo.DisplayName=\
+ \u041f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0438 \u043d\u0430 \u0441\u0440\u0435\u0434\u0430\u0442\u0430
+ThreadDumpSlaveInfo.DisplayName=\
+ \u0421\u044a\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0441\u0442\u0435\u043a\u043e\u0432\u0435 \u043d\u0430 \u043d\u0438\u0448\u043a\u0438\u0442\u0435
+ClassLoaderStatisticsSlaveInfo.DisplayName=\
+ \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043d\u0430 \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u043e\u0442\u0434\u0430\u043b\u0435\u0447\u0435\u043d\u0438 \u043a\u043b\u0430\u0441\u043e\u0432\u0435
diff --git a/core/src/main/resources/jenkins/triggers/Messages_bg.properties b/core/src/main/resources/jenkins/triggers/Messages_bg.properties
new file mode 100644
index 0000000000..0037907e8a
--- /dev/null
+++ b/core/src/main/resources/jenkins/triggers/Messages_bg.properties
@@ -0,0 +1,27 @@
+# The MIT License
+#
+# Bulgarian translation copyright 2015 Alexander Shopov .
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+ReverseBuildTrigger.build_after_other_projects_are_built=\
+ \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0441\u043b\u0435\u0434 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0434\u0440\u0443\u0433\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438.
+ReverseBuildTrigger.running_as_cannot_even_see_for_trigger_f=\
+ \u041f\u0440\u043e\u0446\u0435\u0441, \u0440\u0430\u0431\u043e\u0442\u0435\u0449 \u0441 \u043f\u0440\u0430\u0432\u0430\u0442\u0430 \u043d\u0430 \u201e{0}\u201c \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0432\u0438\u0434\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u0442\u0430 \u201e{1}\u201c \u043e\u0442\
+ \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0442\u043e \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u201e{2}\u201c.
diff --git a/core/src/main/resources/lib/form/enum.jelly b/core/src/main/resources/lib/form/enum.jelly
index 667f0c10d2..9cfb41829c 100644
--- a/core/src/main/resources/lib/form/enum.jelly
+++ b/core/src/main/resources/lib/form/enum.jelly
@@ -32,10 +32,13 @@ THE SOFTWARE.
Used for databinding. TBD.
+
+ The name of the enum to set as default value for the first configuration.
+