From 054408063444a643fb8e75993da8386375a3bb49 Mon Sep 17 00:00:00 2001 From: Student Main Date: Thu, 23 Apr 2020 16:47:49 +0800 Subject: [PATCH 1/8] add statistic event --- .../Controller/Service/TCPRelay.cs | 69 ++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/shadowsocks-csharp/Controller/Service/TCPRelay.cs b/shadowsocks-csharp/Controller/Service/TCPRelay.cs index c15eb198..f68ead1b 100644 --- a/shadowsocks-csharp/Controller/Service/TCPRelay.cs +++ b/shadowsocks-csharp/Controller/Service/TCPRelay.cs @@ -97,8 +97,62 @@ namespace Shadowsocks.Controller } } + class SSRelayEventArgs : EventArgs + { + public readonly Server server; + + public SSRelayEventArgs(Server server) + { + this.server = server; + } + } + + class SSInboundEventArgs : SSRelayEventArgs + { + public readonly long length; + public SSInboundEventArgs(Server server, long length) : base(server) + { + this.length = length; + } + } + + class SSOutboundEventArgs : SSRelayEventArgs + { + public readonly long length; + + public SSOutboundEventArgs(Server server, long length) : base(server) + { + this.length = length; + } + } + + class SSTCPConnectedEventArgs : SSRelayEventArgs + { + public readonly TimeSpan latency; + + public SSTCPConnectedEventArgs(Server server, TimeSpan latency) : base(server) + { + this.latency = latency; + } + } + + class SSTCPClosedEventArgs : SSRelayEventArgs + { + public readonly TCPHandler handler; + + public SSTCPClosedEventArgs(Server server, TCPHandler handler) : base(server) + { + this.handler = handler; + } + } + internal class TCPHandler { + public event EventHandler OnConnected; + public event EventHandler OnInbound; + public event EventHandler OnOutbound; + public event EventHandler OnClosed; + class AsyncSession { public IProxy Remote { get; } @@ -245,6 +299,9 @@ namespace Shadowsocks.Controller if (_closed) return; _closed = true; } + + OnClosed?.Invoke(this, new SSTCPClosedEventArgs(_server, this)); + lock (_tcprelay.Handlers) { _tcprelay.Handlers.Remove(this); @@ -344,7 +401,7 @@ namespace Shadowsocks.Controller if (bytesRead >= 5) { _command = _connetionRecvBuffer[1]; - switch(_command) + switch (_command) { case CMD_CONNECT: @@ -472,7 +529,7 @@ namespace Shadowsocks.Controller break; } - Logger.Debug($"connect to {dstAddr}:{dstPort}"); + Logger.Debug($"connect to {dstAddr}:{dstPort}"); _destEndPoint = SocketUtil.GetEndPoint(dstAddr, dstPort); @@ -755,6 +812,9 @@ namespace Shadowsocks.Controller Logger.Debug($"Socket connected to ss server: {_server.FriendlyName()}"); var latency = DateTime.Now - _startConnectTime; + + OnConnected?.Invoke(this, new SSTCPConnectedEventArgs(_server, latency)); + IStrategy strategy = _controller.GetCurrentStrategy(); strategy?.UpdateLatency(_server, latency); _tcprelay.UpdateLatency(_server, latency); @@ -816,6 +876,9 @@ namespace Shadowsocks.Controller var session = (AsyncSession)ar.AsyncState; int bytesRead = session.Remote.EndReceive(ar); _totalRead += bytesRead; + + OnInbound?.Invoke(this, new SSInboundEventArgs(_server, bytesRead)); + _tcprelay.UpdateInboundCounter(_server, bytesRead); if (bytesRead > 0) { @@ -907,6 +970,8 @@ namespace Shadowsocks.Controller return; } } + + OnOutbound?.Invoke(this, new SSOutboundEventArgs(_server, bytesToSend)); _tcprelay.UpdateOutboundCounter(_server, bytesToSend); _startSendingTime = DateTime.Now; session.Remote.BeginSend(_connetionSendBuffer, 0, bytesToSend, SocketFlags.None, From b7530921448ec91996c35e512a08416cef2603f7 Mon Sep 17 00:00:00 2001 From: Student Main Date: Thu, 23 Apr 2020 16:57:59 +0800 Subject: [PATCH 2/8] decouple TCPHandler and statistic --- .../Controller/Service/TCPRelay.cs | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/shadowsocks-csharp/Controller/Service/TCPRelay.cs b/shadowsocks-csharp/Controller/Service/TCPRelay.cs index f68ead1b..30e45e12 100644 --- a/shadowsocks-csharp/Controller/Service/TCPRelay.cs +++ b/shadowsocks-csharp/Controller/Service/TCPRelay.cs @@ -39,7 +39,15 @@ namespace Shadowsocks.Controller || (length < 2 || firstPacket[0] != 5)) return false; socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true); - TCPHandler handler = new TCPHandler(_controller, _config, this, socket); + TCPHandler handler = new TCPHandler(_controller, _config, socket); + + handler.OnConnected += (_, arg) => UpdateLatency(arg.server, arg.latency); + handler.OnInbound += (_, arg) => UpdateInboundCounter(arg.server, arg.length); + handler.OnOutbound += (_, arg) => UpdateOutboundCounter(arg.server, arg.length); + handler.OnClosed += (_, arg) => + { + lock (Handlers) { Handlers.Remove(arg.handler); } + }; IList handlersToClose = new List(); lock (Handlers) @@ -93,6 +101,8 @@ namespace Shadowsocks.Controller public void UpdateLatency(Server server, TimeSpan latency) { + IStrategy strategy = _controller.GetCurrentStrategy(); + strategy?.UpdateLatency(server, latency); _controller.UpdateLatency(server, latency); } } @@ -199,7 +209,6 @@ namespace Shadowsocks.Controller private ShadowsocksController _controller; private Configuration _config; - private TCPRelay _tcprelay; private Socket _connection; private IEncryptor _encryptor; @@ -251,11 +260,10 @@ namespace Shadowsocks.Controller private EndPoint _destEndPoint = null; - public TCPHandler(ShadowsocksController controller, Configuration config, TCPRelay tcprelay, Socket socket) + public TCPHandler(ShadowsocksController controller, Configuration config, Socket socket) { _controller = controller; _config = config; - _tcprelay = tcprelay; _connection = socket; _proxyTimeout = config.proxy.proxyTimeout * 1000; _serverTimeout = config.GetCurrentServer().timeout * 1000; @@ -302,10 +310,6 @@ namespace Shadowsocks.Controller OnClosed?.Invoke(this, new SSTCPClosedEventArgs(_server, this)); - lock (_tcprelay.Handlers) - { - _tcprelay.Handlers.Remove(this); - } try { _connection.Shutdown(SocketShutdown.Both); @@ -815,10 +819,6 @@ namespace Shadowsocks.Controller OnConnected?.Invoke(this, new SSTCPConnectedEventArgs(_server, latency)); - IStrategy strategy = _controller.GetCurrentStrategy(); - strategy?.UpdateLatency(_server, latency); - _tcprelay.UpdateLatency(_server, latency); - StartPipe(session); } catch (ArgumentException) @@ -878,8 +878,6 @@ namespace Shadowsocks.Controller _totalRead += bytesRead; OnInbound?.Invoke(this, new SSInboundEventArgs(_server, bytesRead)); - - _tcprelay.UpdateInboundCounter(_server, bytesRead); if (bytesRead > 0) { lastActivity = DateTime.Now; @@ -972,7 +970,6 @@ namespace Shadowsocks.Controller } OnOutbound?.Invoke(this, new SSOutboundEventArgs(_server, bytesToSend)); - _tcprelay.UpdateOutboundCounter(_server, bytesToSend); _startSendingTime = DateTime.Now; session.Remote.BeginSend(_connetionSendBuffer, 0, bytesToSend, SocketFlags.None, PipeRemoteSendCallback, new object[] { session, bytesToSend }); From 8575d6fbaa6c623900388548f025c776d824839f Mon Sep 17 00:00:00 2001 From: Student Main Date: Fri, 24 Apr 2020 01:23:29 +0800 Subject: [PATCH 3/8] decouple statistic and TCPRelay --- .../Controller/Service/TCPRelay.cs | 84 ++++++------------- .../Controller/ShadowsocksController.cs | 48 ++++++----- 2 files changed, 52 insertions(+), 80 deletions(-) diff --git a/shadowsocks-csharp/Controller/Service/TCPRelay.cs b/shadowsocks-csharp/Controller/Service/TCPRelay.cs index 30e45e12..308f05f2 100644 --- a/shadowsocks-csharp/Controller/Service/TCPRelay.cs +++ b/shadowsocks-csharp/Controller/Service/TCPRelay.cs @@ -18,6 +18,11 @@ namespace Shadowsocks.Controller { class TCPRelay : Listener.Service { + public event EventHandler OnConnected; + public event EventHandler OnInbound; + public event EventHandler OnOutbound; + public event EventHandler OnFailed; + private static Logger logger = LogManager.GetCurrentClassLogger(); private ShadowsocksController _controller; private DateTime _lastSweepTime; @@ -41,12 +46,13 @@ namespace Shadowsocks.Controller socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true); TCPHandler handler = new TCPHandler(_controller, _config, socket); - handler.OnConnected += (_, arg) => UpdateLatency(arg.server, arg.latency); - handler.OnInbound += (_, arg) => UpdateInboundCounter(arg.server, arg.length); - handler.OnOutbound += (_, arg) => UpdateOutboundCounter(arg.server, arg.length); - handler.OnClosed += (_, arg) => + handler.OnConnected += OnConnected; + handler.OnInbound += OnInbound; + handler.OnOutbound += OnOutbound; + handler.OnFailed += OnFailed; + handler.OnClosed += (h, arg) => { - lock (Handlers) { Handlers.Remove(arg.handler); } + lock (Handlers) { Handlers.Remove(handler); } }; IList handlersToClose = new List(); @@ -88,26 +94,9 @@ namespace Shadowsocks.Controller } handlersToClose.ForEach(h => h.Close()); } - - public void UpdateInboundCounter(Server server, long n) - { - _controller.UpdateInboundCounter(server, n); - } - - public void UpdateOutboundCounter(Server server, long n) - { - _controller.UpdateOutboundCounter(server, n); - } - - public void UpdateLatency(Server server, TimeSpan latency) - { - IStrategy strategy = _controller.GetCurrentStrategy(); - strategy?.UpdateLatency(server, latency); - _controller.UpdateLatency(server, latency); - } } - class SSRelayEventArgs : EventArgs + public class SSRelayEventArgs : EventArgs { public readonly Server server; @@ -117,26 +106,16 @@ namespace Shadowsocks.Controller } } - class SSInboundEventArgs : SSRelayEventArgs + public class SSTransmitEventArgs : SSRelayEventArgs { public readonly long length; - public SSInboundEventArgs(Server server, long length) : base(server) + public SSTransmitEventArgs(Server server, long length) : base(server) { this.length = length; } } - class SSOutboundEventArgs : SSRelayEventArgs - { - public readonly long length; - - public SSOutboundEventArgs(Server server, long length) : base(server) - { - this.length = length; - } - } - - class SSTCPConnectedEventArgs : SSRelayEventArgs + public class SSTCPConnectedEventArgs : SSRelayEventArgs { public readonly TimeSpan latency; @@ -146,22 +125,13 @@ namespace Shadowsocks.Controller } } - class SSTCPClosedEventArgs : SSRelayEventArgs - { - public readonly TCPHandler handler; - - public SSTCPClosedEventArgs(Server server, TCPHandler handler) : base(server) - { - this.handler = handler; - } - } - internal class TCPHandler { public event EventHandler OnConnected; - public event EventHandler OnInbound; - public event EventHandler OnOutbound; - public event EventHandler OnClosed; + public event EventHandler OnInbound; + public event EventHandler OnOutbound; + public event EventHandler OnClosed; + public event EventHandler OnFailed; class AsyncSession { @@ -308,7 +278,7 @@ namespace Shadowsocks.Controller _closed = true; } - OnClosed?.Invoke(this, new SSTCPClosedEventArgs(_server, this)); + OnClosed?.Invoke(this, new SSRelayEventArgs(_server)); try { @@ -788,8 +758,7 @@ namespace Shadowsocks.Controller var session = timer.Session; Server server = timer.Server; - IStrategy strategy = _controller.GetCurrentStrategy(); - strategy?.SetFailure(server); + OnFailed?.Invoke(this, new SSRelayEventArgs(_server)); Logger.Info($"{server.FriendlyName()} timed out"); session.Remote.Close(); Close(); @@ -828,8 +797,7 @@ namespace Shadowsocks.Controller { if (_server != null) { - IStrategy strategy = _controller.GetCurrentStrategy(); - strategy?.SetFailure(_server); + OnFailed?.Invoke(this, new SSRelayEventArgs(_server)); } Logger.LogUsefulException(e); Close(); @@ -877,7 +845,7 @@ namespace Shadowsocks.Controller int bytesRead = session.Remote.EndReceive(ar); _totalRead += bytesRead; - OnInbound?.Invoke(this, new SSInboundEventArgs(_server, bytesRead)); + OnInbound?.Invoke(this, new SSTransmitEventArgs(_server, bytesRead)); if (bytesRead > 0) { lastActivity = DateTime.Now; @@ -906,8 +874,6 @@ namespace Shadowsocks.Controller Logger.Trace($"start sending {bytesToSend}"); _connection.BeginSend(_remoteSendBuffer, 0, bytesToSend, SocketFlags.None, PipeConnectionSendCallback, new object[] { session, bytesToSend }); - IStrategy strategy = _controller.GetCurrentStrategy(); - strategy?.UpdateLastRead(_server); } else { @@ -969,12 +935,10 @@ namespace Shadowsocks.Controller } } - OnOutbound?.Invoke(this, new SSOutboundEventArgs(_server, bytesToSend)); + OnOutbound?.Invoke(this, new SSTransmitEventArgs(_server, bytesToSend)); _startSendingTime = DateTime.Now; session.Remote.BeginSend(_connetionSendBuffer, 0, bytesToSend, SocketFlags.None, PipeRemoteSendCallback, new object[] { session, bytesToSend }); - IStrategy strategy = _controller.GetCurrentStrategy(); - strategy?.UpdateLastWrite(_server); } private void PipeRemoteSendCallback(IAsyncResult ar) diff --git a/shadowsocks-csharp/Controller/ShadowsocksController.cs b/shadowsocks-csharp/Controller/ShadowsocksController.cs index e1df6186..5b293e54 100644 --- a/shadowsocks-csharp/Controller/ShadowsocksController.cs +++ b/shadowsocks-csharp/Controller/ShadowsocksController.cs @@ -218,25 +218,25 @@ namespace Shadowsocks.Controller StatisticsStrategyConfiguration.Save(configuration); } - public bool AskAddServerBySSURL(string ssURL) - { - var dr = MessageBox.Show(I18N.GetString("Import from URL: {0} ?", ssURL), I18N.GetString("Shadowsocks"), MessageBoxButtons.YesNo); - if (dr == DialogResult.Yes) - { + public bool AskAddServerBySSURL(string ssURL) + { + var dr = MessageBox.Show(I18N.GetString("Import from URL: {0} ?", ssURL), I18N.GetString("Shadowsocks"), MessageBoxButtons.YesNo); + if (dr == DialogResult.Yes) + { if (AddServerBySSURL(ssURL)) { MessageBox.Show(I18N.GetString("Successfully imported from {0}", ssURL)); return true; - } + } else { MessageBox.Show(I18N.GetString("Failed to import. Please check if the link is valid.")); - } - } - return false; - } - - + } + } + return false; + } + + public bool AddServerBySSURL(string ssURL) { try @@ -490,29 +490,32 @@ namespace Shadowsocks.Controller ConfigChanged?.Invoke(this, new EventArgs()); } - public void UpdateLatency(Server server, TimeSpan latency) + public void UpdateLatency(object sender, SSTCPConnectedEventArgs args) { + GetCurrentStrategy()?.UpdateLatency(args.server, args.latency); if (_config.availabilityStatistics) { - availabilityStatistics.UpdateLatency(server, (int)latency.TotalMilliseconds); + availabilityStatistics.UpdateLatency(args.server, (int)args.latency.TotalMilliseconds); } } - public void UpdateInboundCounter(Server server, long n) + public void UpdateInboundCounter(object sender, SSTransmitEventArgs args) { - Interlocked.Add(ref _inboundCounter, n); + GetCurrentStrategy()?.UpdateLastRead(args.server); + Interlocked.Add(ref _inboundCounter, args.length); if (_config.availabilityStatistics) { - availabilityStatistics.UpdateInboundCounter(server, n); + availabilityStatistics.UpdateInboundCounter(args.server, args.length); } } - public void UpdateOutboundCounter(Server server, long n) + public void UpdateOutboundCounter(object sender, SSTransmitEventArgs args) { - Interlocked.Add(ref _outboundCounter, n); + GetCurrentStrategy()?.UpdateLastWrite(args.server); + Interlocked.Add(ref _outboundCounter, args.length); if (_config.availabilityStatistics) { - availabilityStatistics.UpdateOutboundCounter(server, n); + availabilityStatistics.UpdateOutboundCounter(args.server, args.length); } } @@ -556,6 +559,11 @@ namespace Shadowsocks.Controller privoxyRunner.Start(_config); TCPRelay tcpRelay = new TCPRelay(this, _config); + tcpRelay.OnConnected += UpdateLatency; + tcpRelay.OnInbound += UpdateInboundCounter; + tcpRelay.OnOutbound += UpdateOutboundCounter; + tcpRelay.OnFailed += (o, e) => GetCurrentStrategy()?.SetFailure(e.server); + UDPRelay udpRelay = new UDPRelay(this); List services = new List { From 271ce6404c06573b2d144dc485c69b78bc6752ed Mon Sep 17 00:00:00 2001 From: Student Main Date: Fri, 24 Apr 2020 01:41:45 +0800 Subject: [PATCH 4/8] store only ProxyConfig in TCPHandler --- shadowsocks-csharp/Controller/Service/TCPRelay.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/shadowsocks-csharp/Controller/Service/TCPRelay.cs b/shadowsocks-csharp/Controller/Service/TCPRelay.cs index 308f05f2..35c7da3b 100644 --- a/shadowsocks-csharp/Controller/Service/TCPRelay.cs +++ b/shadowsocks-csharp/Controller/Service/TCPRelay.cs @@ -178,7 +178,7 @@ namespace Shadowsocks.Controller public DateTime lastActivity; private ShadowsocksController _controller; - private Configuration _config; + private ProxyConfig _config; private Socket _connection; private IEncryptor _encryptor; @@ -233,7 +233,7 @@ namespace Shadowsocks.Controller public TCPHandler(ShadowsocksController controller, Configuration config, Socket socket) { _controller = controller; - _config = config; + _config = config.proxy; _connection = socket; _proxyTimeout = config.proxy.proxyTimeout * 1000; _serverTimeout = config.GetCurrentServer().timeout * 1000; @@ -615,9 +615,9 @@ namespace Shadowsocks.Controller serverEP = pluginEP; remote = new DirectConnect(); } - else if (_config.proxy.useProxy) + else if (_config.useProxy) { - switch (_config.proxy.proxyType) + switch (_config.proxyType) { case ProxyConfig.PROXY_SOCKS5: remote = new Socks5Proxy(); @@ -628,7 +628,7 @@ namespace Shadowsocks.Controller default: throw new NotSupportedException("Unknown forward proxy."); } - proxyEP = SocketUtil.GetEndPoint(_config.proxy.proxyServer, _config.proxy.proxyPort); + proxyEP = SocketUtil.GetEndPoint(_config.proxyServer, _config.proxyPort); } else { @@ -725,9 +725,9 @@ namespace Shadowsocks.Controller _destConnected = false; NetworkCredential auth = null; - if (_config.proxy.useAuth) + if (_config.useAuth) { - auth = new NetworkCredential(_config.proxy.authUser, _config.proxy.authPwd); + auth = new NetworkCredential(_config.authUser, _config.authPwd); } // Connect to the remote endpoint. From 4469c0886198b9926860b15be573909e58be28e2 Mon Sep 17 00:00:00 2001 From: Student Main Date: Fri, 24 Apr 2020 02:03:38 +0800 Subject: [PATCH 5/8] cleanup TCPRelay.cs --- .../Controller/Service/TCPRelay.cs | 236 +++++++++++------- 1 file changed, 147 insertions(+), 89 deletions(-) diff --git a/shadowsocks-csharp/Controller/Service/TCPRelay.cs b/shadowsocks-csharp/Controller/Service/TCPRelay.cs index 35c7da3b..0653d8dd 100644 --- a/shadowsocks-csharp/Controller/Service/TCPRelay.cs +++ b/shadowsocks-csharp/Controller/Service/TCPRelay.cs @@ -1,10 +1,12 @@ -using NLog; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Timers; + +using NLog; + using Shadowsocks.Controller.Strategy; using Shadowsocks.Encryption; using Shadowsocks.Encryption.AEAD; @@ -12,21 +14,22 @@ using Shadowsocks.Encryption.Exception; using Shadowsocks.Model; using Shadowsocks.Proxy; using Shadowsocks.Util.Sockets; + using static Shadowsocks.Encryption.EncryptorBase; namespace Shadowsocks.Controller { - class TCPRelay : Listener.Service + internal class TCPRelay : Listener.Service { public event EventHandler OnConnected; public event EventHandler OnInbound; public event EventHandler OnOutbound; public event EventHandler OnFailed; - private static Logger logger = LogManager.GetCurrentClassLogger(); - private ShadowsocksController _controller; + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + private readonly ShadowsocksController _controller; private DateTime _lastSweepTime; - private Configuration _config; + private readonly Configuration _config; public ISet Handlers { get; set; } @@ -42,7 +45,10 @@ namespace Shadowsocks.Controller { if (socket.ProtocolType != ProtocolType.Tcp || (length < 2 || firstPacket[0] != 5)) + { return false; + } + socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true); TCPHandler handler = new TCPHandler(_controller, _config, socket); @@ -52,7 +58,10 @@ namespace Shadowsocks.Controller handler.OnFailed += OnFailed; handler.OnClosed += (h, arg) => { - lock (Handlers) { Handlers.Remove(handler); } + lock (Handlers) + { + Handlers.Remove(handler); + } }; IList handlersToClose = new List(); @@ -64,8 +73,12 @@ namespace Shadowsocks.Controller { _lastSweepTime = now; foreach (TCPHandler handler1 in Handlers) + { if (now - handler1.lastActivity > TimeSpan.FromSeconds(900)) + { handlersToClose.Add(handler1); + } + } } } foreach (TCPHandler handler1 in handlersToClose) @@ -133,7 +146,7 @@ namespace Shadowsocks.Controller public event EventHandler OnClosed; public event EventHandler OnFailed; - class AsyncSession + private class AsyncSession { public IProxy Remote { get; } @@ -143,7 +156,7 @@ namespace Shadowsocks.Controller } } - class AsyncSession : AsyncSession + private class AsyncSession : AsyncSession { public T State { get; set; } @@ -158,7 +171,7 @@ namespace Shadowsocks.Controller } } - private static Logger Logger = LogManager.GetCurrentClassLogger(); + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private readonly int _serverTimeout; private readonly int _proxyTimeout; @@ -177,9 +190,9 @@ namespace Shadowsocks.Controller public DateTime lastActivity; - private ShadowsocksController _controller; - private ProxyConfig _config; - private Socket _connection; + private readonly ShadowsocksController _controller; + private readonly ProxyConfig _config; + private readonly Socket _connection; private IEncryptor _encryptor; private Server _server; @@ -203,16 +216,16 @@ namespace Shadowsocks.Controller private int _totalWrite = 0; // remote -> local proxy (ciphertext, before decrypt) - private byte[] _remoteRecvBuffer = new byte[BufferSize]; + private readonly byte[] _remoteRecvBuffer = new byte[BufferSize]; // client -> local proxy (plaintext, before encrypt) - private byte[] _connetionRecvBuffer = new byte[BufferSize]; + private readonly byte[] _connetionRecvBuffer = new byte[BufferSize]; // local proxy -> remote (plaintext, after decrypt) - private byte[] _remoteSendBuffer = new byte[BufferSize]; + private readonly byte[] _remoteSendBuffer = new byte[BufferSize]; // local proxy -> client (ciphertext, before decrypt) - private byte[] _connetionSendBuffer = new byte[BufferSize]; + private readonly byte[] _connetionSendBuffer = new byte[BufferSize]; private bool _connectionShutdown = false; private bool _remoteShutdown = false; @@ -230,6 +243,7 @@ namespace Shadowsocks.Controller private EndPoint _destEndPoint = null; + // TODO: decouple controller public TCPHandler(ShadowsocksController controller, Configuration config, Socket socket) { _controller = controller; @@ -246,11 +260,13 @@ namespace Shadowsocks.Controller Server server = _controller.GetAServer(IStrategyCallerType.TCP, (IPEndPoint)_connection.RemoteEndPoint, _destEndPoint); if (server == null || server.server == "") + { throw new ArgumentException("No server configured"); + } _encryptor = EncryptorFactory.GetEncryptor(server.method, server.password); - this._server = server; + _server = server; /* prepare address buffer length for AEAD */ Logger.Trace($"_addrBufLength={_addrBufLength}"); @@ -267,14 +283,26 @@ namespace Shadowsocks.Controller private void CheckClose() { if (_connectionShutdown && _remoteShutdown) + { Close(); + } + } + + private void ErrorClose(Exception e) + { + Logger.LogUsefulException(e); + Close(); } public void Close() { lock (_closeConnLock) { - if (_closed) return; + if (_closed) + { + return; + } + _closed = true; } @@ -294,7 +322,7 @@ namespace Shadowsocks.Controller { try { - var remote = _currentRemoteSession.Remote; + IProxy remote = _currentRemoteSession.Remote; remote.Shutdown(SocketShutdown.Both); remote.Close(); } @@ -315,7 +343,11 @@ namespace Shadowsocks.Controller private void HandshakeReceive() { - if (_closed) return; + if (_closed) + { + return; + } + try { int bytesRead = _firstPacketLength; @@ -332,18 +364,23 @@ namespace Shadowsocks.Controller HandshakeSendCallback, null); } else + { Close(); + } } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } private void HandshakeSendCallback(IAsyncResult ar) { - if (_closed) return; + if (_closed) + { + return; + } + try { _connection.EndSend(ar); @@ -355,20 +392,23 @@ namespace Shadowsocks.Controller // +-----+-----+-------+------+----------+----------+ // Skip first 3 bytes, and read 2 more bytes to analysis the address. // 2 more bytes is designed if address is domain then we don't need to read once more to get the addr length. - // TODO validate + // validate is unnecessary, we did it in first packet, but we can do it in future version _connection.BeginReceive(_connetionRecvBuffer, 0, 3 + ADDR_ATYP_LEN + 1, SocketFlags.None, - HandshakeReceive2Callback, null); + AddressReceiveCallback, null); } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } - private void HandshakeReceive2Callback(IAsyncResult ar) + private void AddressReceiveCallback(IAsyncResult ar) { - if (_closed) return; + if (_closed) + { + return; + } + try { int bytesRead = _connection.EndReceive(ar); @@ -386,7 +426,7 @@ namespace Shadowsocks.Controller // +----+-----+-------+------+----------+----------+ byte[] response = { 5, 0, 0, 1, 0, 0, 0, 0, 0, 0 }; _connection.BeginSend(response, 0, response.Length, SocketFlags.None, - ResponseCallback, null); + ConnectResponseCallback, null); break; case CMD_UDP_ASSOC: ReadAddress(HandleUDPAssociate); @@ -407,12 +447,11 @@ namespace Shadowsocks.Controller } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } - private void ResponseCallback(IAsyncResult ar) + private void ConnectResponseCallback(IAsyncResult ar) { try { @@ -422,8 +461,7 @@ namespace Shadowsocks.Controller } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } @@ -462,15 +500,19 @@ namespace Shadowsocks.Controller private void OnAddressFullyRead(IAsyncResult ar) { - if (_closed) return; + if (_closed) + { + return; + } + try { int bytesRead = _connection.EndReceive(ar); - var states = (object[])ar.AsyncState; + object[] states = (object[])ar.AsyncState; int bytesRemain = (int)states[0]; - var onSuccess = (Action)states[1]; + Action onSuccess = (Action)states[1]; if (bytesRead >= bytesRemain) { @@ -517,8 +559,7 @@ namespace Shadowsocks.Controller } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } @@ -546,7 +587,11 @@ namespace Shadowsocks.Controller private void ReadAll(IAsyncResult ar) { - if (_closed) return; + if (_closed) + { + return; + } + try { if (ar.AsyncState != null) @@ -564,13 +609,14 @@ namespace Shadowsocks.Controller ReadAll, null); } else + { Close(); + } } } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } @@ -635,7 +681,7 @@ namespace Shadowsocks.Controller remote = new DirectConnect(); } - var session = new AsyncSession(remote); + AsyncSession session = new AsyncSession(remote); lock (_closeConnLock) { if (_closed) @@ -663,14 +709,13 @@ namespace Shadowsocks.Controller } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } private void ProxyConnectTimer_Elapsed(object sender, ElapsedEventArgs e) { - var timer = (ProxyTimer)sender; + ProxyTimer timer = (ProxyTimer)sender; timer.Elapsed -= ProxyConnectTimer_Elapsed; timer.Enabled = false; timer.Dispose(); @@ -680,7 +725,7 @@ namespace Shadowsocks.Controller { return; } - var proxy = timer.Session.Remote; + IProxy proxy = timer.Session.Remote; Logger.Info($"Proxy {proxy.ProxyEndPoint} timed out"); proxy.Close(); @@ -695,15 +740,15 @@ namespace Shadowsocks.Controller } try { - var session = (AsyncSession)ar.AsyncState; + AsyncSession session = (AsyncSession)ar.AsyncState; ProxyTimer timer = session.State; - var destEndPoint = timer.DestEndPoint; - var server = timer.Server; + EndPoint destEndPoint = timer.DestEndPoint; + Server server = timer.Server; timer.Elapsed -= ProxyConnectTimer_Elapsed; timer.Enabled = false; timer.Dispose(); - var remote = session.Remote; + IProxy remote = session.Remote; // Complete the connection. remote.EndConnectProxy(ar); @@ -739,14 +784,13 @@ namespace Shadowsocks.Controller } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } private void DestConnectTimer_Elapsed(object sender, ElapsedEventArgs e) { - var timer = (ServerTimer)sender; + ServerTimer timer = (ServerTimer)sender; timer.Elapsed -= DestConnectTimer_Elapsed; timer.Enabled = false; timer.Dispose(); @@ -756,7 +800,7 @@ namespace Shadowsocks.Controller return; } - var session = timer.Session; + AsyncSession session = timer.Session; Server server = timer.Server; OnFailed?.Invoke(this, new SSRelayEventArgs(_server)); Logger.Info($"{server.FriendlyName()} timed out"); @@ -766,17 +810,21 @@ namespace Shadowsocks.Controller private void ConnectCallback(IAsyncResult ar) { - if (_closed) return; + if (_closed) + { + return; + } + try { - var session = (AsyncSession)ar.AsyncState; + AsyncSession session = (AsyncSession)ar.AsyncState; ServerTimer timer = session.State; _server = timer.Server; timer.Elapsed -= DestConnectTimer_Elapsed; timer.Enabled = false; timer.Dispose(); - var remote = session.Remote; + IProxy remote = session.Remote; // Complete the connection. remote.EndConnectDest(ar); @@ -784,7 +832,7 @@ namespace Shadowsocks.Controller Logger.Debug($"Socket connected to ss server: {_server.FriendlyName()}"); - var latency = DateTime.Now - _startConnectTime; + TimeSpan latency = DateTime.Now - _startConnectTime; OnConnected?.Invoke(this, new SSTCPConnectedEventArgs(_server, latency)); @@ -799,8 +847,7 @@ namespace Shadowsocks.Controller { OnFailed?.Invoke(this, new SSRelayEventArgs(_server)); } - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } @@ -809,7 +856,7 @@ namespace Shadowsocks.Controller int available = Math.Min(_connection.Available, RecvSize - _firstPacketLength); if (available > 0) { - var size = _connection.Receive(_connetionRecvBuffer, _firstPacketLength, available, + int size = _connection.Receive(_connetionRecvBuffer, _firstPacketLength, available, SocketFlags.None); _firstPacketLength += size; @@ -818,7 +865,11 @@ namespace Shadowsocks.Controller private void StartPipe(AsyncSession session) { - if (_closed) return; + if (_closed) + { + return; + } + try { _startReceivingTime = DateTime.Now; @@ -831,17 +882,20 @@ namespace Shadowsocks.Controller } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } private void PipeRemoteReceiveCallback(IAsyncResult ar) { - if (_closed) return; + if (_closed) + { + return; + } + try { - var session = (AsyncSession)ar.AsyncState; + AsyncSession session = (AsyncSession)ar.AsyncState; int bytesRead = session.Remote.EndReceive(ar); _totalRead += bytesRead; @@ -884,20 +938,23 @@ namespace Shadowsocks.Controller } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } private void PipeConnectionReceiveCallback(IAsyncResult ar) { - if (_closed) return; + if (_closed) + { + return; + } + try { int bytesRead = _connection.EndReceive(ar); - var session = (AsyncSession)ar.AsyncState; - var remote = session.Remote; + AsyncSession session = (AsyncSession)ar.AsyncState; + IProxy remote = session.Remote; if (bytesRead > 0) { @@ -912,8 +969,7 @@ namespace Shadowsocks.Controller } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } @@ -943,12 +999,16 @@ namespace Shadowsocks.Controller private void PipeRemoteSendCallback(IAsyncResult ar) { - if (_closed) return; + if (_closed) + { + return; + } + try { - var container = (object[])ar.AsyncState; - var session = (AsyncSession)container[0]; - var bytesShouldSend = (int)container[1]; + object[] container = (object[])ar.AsyncState; + AsyncSession session = (AsyncSession)container[0]; + int bytesShouldSend = (int)container[1]; int bytesSent = session.Remote.EndSend(ar); if (bytesSent > 0) @@ -970,8 +1030,7 @@ namespace Shadowsocks.Controller } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } @@ -980,11 +1039,11 @@ namespace Shadowsocks.Controller { try { - var container = (object[])ar.AsyncState; - var session = (AsyncSession)container[0]; - var bytesShouldSend = (int)container[1]; - var bytesSent = _connection.EndSend(ar); - var bytesRemaining = bytesShouldSend - bytesSent; + object[] container = (object[])ar.AsyncState; + AsyncSession session = (AsyncSession)container[0]; + int bytesShouldSend = (int)container[1]; + int bytesSent = _connection.EndSend(ar); + int bytesRemaining = bytesShouldSend - bytesSent; if (bytesRemaining > 0) { Logger.Info("reconstruct _remoteSendBuffer to re-send"); @@ -998,8 +1057,7 @@ namespace Shadowsocks.Controller } catch (Exception e) { - Logger.LogUsefulException(e); - Close(); + ErrorClose(e); } } } From 671393a3d0a137a5eb5923bf2721c0bf5d6d1818 Mon Sep 17 00:00:00 2001 From: RekonChan <44664655+RekonChan@users.noreply.github.com> Date: Wed, 29 Apr 2020 01:31:46 +0600 Subject: [PATCH 6/8] Updated Korean Language Added Missing Lines, Fixed Grammar and Typo and Corrected Wrong Translation. --- shadowsocks-csharp/Data/i18n.csv | 424 +++++++++++++++---------------- 1 file changed, 210 insertions(+), 214 deletions(-) diff --git a/shadowsocks-csharp/Data/i18n.csv b/shadowsocks-csharp/Data/i18n.csv index e220d9ba..01081fa7 100644 --- a/shadowsocks-csharp/Data/i18n.csv +++ b/shadowsocks-csharp/Data/i18n.csv @@ -1,214 +1,210 @@ -en,ru-RU,zh-CN,zh-TW,ja,ko,fr -#Restart program to apply translation,,,,,, -#This is comment line,,,,,, -#Always keep language name at head of file,,,,,, -#Language name is output in log,,,,,, -"#You can find it by search ""Current language is:""",,,,,, -#Please use UTF-8 with BOM encoding so we can edit it in Excel,,,,,, -,,,,,, -Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks -,,,,,, -#Menu,,,,,, -,,,,,, -System Proxy,Системный прокси-сервер,系统代理,系統代理,システムプロキシ,시스템 프록시,Proxy système -Disable,Отключен,禁用,禁用,無効,비활성화,Désactiver -PAC,Сценарий настройки (PAC),PAC 模式,PAC 模式,PAC,PAC,PAC -Global,Для всей системы,全局模式,全局模式,全般,전역,Global -Servers,Серверы,服务器,伺服器,サーバー,서버,Serveurs -Edit Servers...,Редактировать серверы…,编辑服务器...,編輯伺服器...,サーバーの編集...,서버 수정…,Éditer serveurs… -Statistics Config...,Настройки статистики…,统计配置...,統計設定檔...,統計情報の設定...,통계 설정,Configuration des statistiques… -Start on Boot,Автозагрузка,开机启动,開機啟動,システムと同時に起動,시스템 시작 시에 시작하기,Démarrage automatique -Associate ss:// Links,Ассоциированный ss:// Ссылки,关联 ss:// 链接,關聯 ss:// 鏈接,,, -Forward Proxy...,Прямой прокси…,正向代理设置...,正向 Proxy 設定...,フォワードプロキシの設定...,포워드 프록시,Forward-proxy… -Allow other Devices to connect,Общий доступ к подключению,允许其他设备连入,允許其他裝置連入,他のデバイスからの接続を許可する,다른 기기에서 연결 허용,Autoriser d'autres appareils à se connecter -Local PAC,Локальный PAC,使用本地 PAC,使用本機 PAC,ローカル PAC,로컬 PAC,PAC local -Online PAC,Удаленный PAC,使用在线 PAC,使用線上 PAC,オンライン PAC,온라인 PAC,PAC en ligne -Edit Local PAC File...,Редактировать локальный PAC…,编辑本地 PAC 文件...,編輯本機 PAC 檔案...,ローカル PAC ファイルの編集...,로컬 PAC 파일 수정,Modifier le fichier PAC local ... -Update Local PAC from GFWList,Обновить локальный PAC из GFWList,从 GFWList 更新本地 PAC,從 GFWList 更新本機 PAC,GFWList からローカル PAC を更新,GFWList에서 로컬 PAC 파일 업데이트,Mettre à jour le PAC local à partir de GFWList -Edit User Rule for GFWList...,Редактировать свои правила для GFWList,编辑 GFWList 的用户规则...,編輯 GFWList 的使用者規則...,ユーザールールの編集...,GFWList 사용자 수정,Modifier la règle utilisateur pour GFWList ... -Secure Local PAC,Безопасный URL локального PAC,保护本地 PAC,安全本機 PAC,ローカル PAC を保護,로컬 PAC 암호화,Sécuriser PAC local -Copy Local PAC URL,Копировать URL локального PAC,复制本地 PAC 网址,複製本機 PAC 網址,ローカル PAC URL をコピー,로컬 PAC 파일 URL 복사,Copier l'URL du PAC local -Share Server Config...,Поделиться конфигурацией сервера…,分享服务器配置...,分享伺服器設定檔...,サーバーの設定を共有...,서버 설정 공유,Partager la configuration du serveur ... -Scan QRCode from Screen...,Сканировать QRCode с экрана…,扫描屏幕上的二维码...,掃描螢幕上的 QR 碼...,画面から QR コードをスキャン...,화면에서 QR코드 스캔,Scanner le QRCode à partir de l'écran ... -Import URL from Clipboard...,Импорт адреса из буфера обмена…,从剪贴板导入URL...,從剪貼簿匯入 URL...,クリップボードから URL をインポート...,클립보드에서 URL 가져오기…,Importer l'URL du presse-papiers ... -Availability Statistics,Статистика доступности,统计可用性,統計可用性,可用性の統計,가용성 통계,Statistiques de disponibilité -Show Logs...,Показать журнал…,显示日志...,顯示記錄檔...,ログの表示...,로그 보기…,Afficher les journaux ... -Verbose Logging,Подробный журнал,详细记录日志,詳細資訊記錄,詳細なログを記録,자세한 로깅 사용,Journalisation détaillée -Updates...,Обновления…,更新...,更新...,更新...,업데이트…,Mettre à jour… -Check for Updates...,Проверить обновления…,检查更新,檢查更新,更新プログラムの確認...,업데이트 확인하기…,Vérifier les mises à jour ... -Check for Updates at Startup,Проверять при запуске,启动时检查更新,啟動時檢查更新,起動時に更新プログラムを確認,시스템 시작 시 업데이트 확인하기,Vérifier les mises à jour au démarrage -Check Pre-release Version,Проверять предрелизные версии,检查测试版更新,檢查發行前版本更新,先行開発版も確認,개발 버전 업데이트 확인하기,Vérifier la version préliminaire -Edit Hotkeys...,Горячие клавиши…,编辑快捷键...,編輯快速鍵...,ホットキーの編集...,단축키 수정…,Modifier les raccourcis clavier ... -About...,О программе…,关于...,關於...,Shadowsocks について...,정보…,A propos -Help,Помощь,帮助,說明,ヘルプ,도움말,Aide -Quit,Выход,退出,結束,終了,종료,Quitter -Edit Servers,Редактирование серверов,编辑服务器,編輯伺服器,サーバーの編集,서버 수정,Éditer serveurs -Load Balance,Балансировка нагрузки,负载均衡,負載平衡,負荷分散,로드밸런싱,Répartition de charge -High Availability,Высокая доступность,高可用,高可用性,高可用性,고가용성,Haute disponibilité -Choose by statistics,На основе статистики,根据统计,根據統計,統計で選ぶ,통계 기반,Choisissez par statistiques -Show Plugin Output,События плагинов в журнале,显示插件输出,,,플러그인 출력 보이기,Afficher la sortie du plugin -Write translation template,Создать шаблон для перевода,写入翻译模板,,,번역 템플릿 쓰기,Écrire un modèle de traduction -,,,,,, -# Config Form,,,,,, -,,,,,, -Statistics configuration,Настройки статистики,统计配置,,,통계 설정,Configuration des statistiques -&Add,Добавить,添加(&A),新增 (&A),新規 (&A),추가 (&A),Ajouter -&Delete,Удалить,删除(&D),移除 (&D),削除 (&D),삭제 (&D),Supprimer -Dupli&cate,Дублир-ть,复制(&C),複製 (&C),コピー (&C),복제 (&C),Dupliquer -Server,Сервер,服务器,伺服器,サーバー,서버,Serveur -Server IP,IP-адрес,服务器地址,伺服器位址,サーバーアドレス,서버 IP,Serveur IP -Server Port,Порт,服务器端口,伺服器連接埠,サーバーポート,서버 포트,Port de serveur -Password,Пароль,密码,密碼,パスワード,비밀번호,Mot de passe -Show Password,Показать пароль,显示密码,顯示密碼,パスワードを表示する,비밀번호 보이기,Montrer le mot de passe -Encryption,Шифрование,加密,加密,暗号化,암호화,Chiffrement -Plugin Program,Плагин,插件程序,外掛程式,プラグインプログラム,플러그인 프로그램,Programme de plugin -Plugin Options,Опции плагина,插件选项,外掛程式選項,プラグインのオプション,플러그인 설정,Options de plugin -Need Plugin Argument,Требуются аргументы,需要命令行参数,,,플러그인 인자가 필요함,Besoin d'un argument de plugin -Plugin Arguments,Аргументы,插件参数,外掛程式參數,プラグインの引数,플러그인 인자,Arguments du plugin -Proxy Port,Порт прокси,代理端口,Proxy 連接埠,プロキシポート,프록시 포트,Port proxy -Portable Mode,Переносимый режим,便携模式,便攜模式,ポータブルモード,포터블(Portable) 모드,Mode portable -Restart required,Требуется перезапуск программы,需要重新启动SS,需要重新啟動SS,再起動SSが必要,재시작 필요함,Redémarrage nécessaire -Remarks,Примечания,备注,註解,付記,알림,Remarques -Timeout(Sec),Таймаут(сек),超时(秒),逾時 (秒),タイムアウト (秒),시간초과(Timeout) (초),Délai d'attente(sec) -OK,ОК,确定,確定,OK,확인,OK -Cancel,Отмена,取消,取消,キャンセル,취소,Annuler -Apply,Применить,应用,應用,適用,적용,Appliquer -New server,Новый сервер,未配置的服务器,新伺服器,新規サーバー,새 서버,Nouveau serveur -Move &Up,Выше,上移(&U),上移 (&U),上に移動 (&U),위로 (&U),Monter -Move D&own,Ниже,下移(&O),下移 (&O),下に移動 (&O),아래로 (&O),Descendre -deprecated,Устаревшее,不推荐,不推薦,非推奨,폐기됨(deprecated),Obsolète -"Encryption method {0} not exist, will replace with {1}",,加密方法{0}不存在,将使用{1}代替,,,{0} 암호화 방식이 존재하지 않으므로 {1}로 대체될 것입니다.,"Méthode de chiffrement {0} n'existe pas, sera remplacée par {1}" -,,,,,, -#Statistics Config,,,,,, -,,,,,, -Enable Statistics,Включить сбор статистики,启用统计,,,통계 활성화,Activer statistiques -Ping Test,Проверка связи (Ping),Ping测试,,,Ping 테스트,Test ping -packages everytime,пакета на проверку,个包/次,,,시간 당 패킷,Packages à chaque fois -By hour of day,Ежечасно,按照每天的小时数统计,,,매 시간,Par heure du jour -Collect data per,Собирать данные за,收集数据每,,,데이터 수집 기간,Recueillir des données par -Keep choice for,Хранить отбор данных за,保持选择每,,,설정 유지하기,Gardez le choix pour -minutes,мин.,分钟,,,분,Minutes -Final Score:,Финальная оценка:,总分:,,,최종 점수:,Score final: -AverageLatency,СредЗадержка,平均延迟,,,평균 지연시간,LatenceMoyenne -MinLatency,МинЗадержка,最小延迟,,,최소 지연시간,MinLatence -MaxLatency,МаксЗадержка,最大延迟,,,최대 지연시간,MaxLatence -AverageInboundSpeed,СредВходСкорость,平均入站速度,,,평균 인바운드 속도,VitesseEntranteMoyenne -MinInboundSpeed,МинВходСкорость,最小入站速度,,,최소 인바운드 속도,MinVitesseEntrante -MaxInboundSpeed,СредВходСкорость,最大入站速度,,,최대 인바운드 속도,MaxVitesseEntrante -AverageOutboundSpeed,СредИсхСкорость,平均出站速度,,,평균 아웃바운드 속도,VitesseSortanteMoyenne -MinOutboundSpeed,МинИсхСкорость,最小出站速度,,,최소 아웃바운드 속도,MinVitesseSortante -MaxOutboundSpeed,МаксИсхСкорость,最大出站速度,,,최대 아웃바운드 속도,MaxVitesseSortante -AverageResponse,СредВремяОтвета,平均响应速度,,,평균 응답,RéponseMoyenne -MinResponse,МинВремяОтвета,最小响应速度,,,최소 응답,MinRéponse -MaxResponse,МаксВремяОтвета,最大响应速度,,,최대 응답,MaxRéponse -PackageLoss,ПотериПакетов,丢包率,,,패킷 손실,Perte de paquets -Speed,Скорость,速度,,,속도,Vitesse -Package Loss,Потери пакетов,丢包率,,,패킷 손실,Perte de paquets -Ping,Ping,网络延迟,,,Ping,Ping -Chart Mode,График,图表模式,,,차트 모드,Mode graphique -24h,24ч,24小时,,,24시간,24h -all,За все время,全部,,,전체,tout -,,,,,, -# Proxy Form,,,,,, -,,,,,, -Edit Proxy,Редактирование прокси,代理设置,編輯 Proxy,プロキシの編集,프록시 수정,Modifier le proxy -Use Proxy,Использовать прокси,使用代理,使用 Proxy,プロキシを利用する,프록시 사용,Utiliser un proxy -Proxy Type,Тип прокси,代理类型,Proxy 類型,プロキシの種類,프록시 종류,Type de proxy -Proxy Addr,Адрес прокси,代理地址,Proxy 位址,プロキシアドレス,프록시 주소,Adresse de proxy -Proxy Port,Порт прокси,代理端口,Proxy 連接埠,プロキシポート,프록시 포트,Port de proxy -"If server has a plugin, proxy will not be used","Если сервер использует плагины, прокси НЕ будет использоваться",若服务器含有插件,代理将不被使用,若伺服器含有外掛程式,Proxy 將不被使用,サーバーにプラグインがある場合、プロキシは利用されません,"만약 서버가 플러그인이 있다면, 프록시는용되지 않을 것입니다.","Si le serveur a un plugin, le proxy ne sera pas utilisé" -Use Auth,Требуется авторизация,使用认证,使用認證,認証を利用する,서버 증명(Auth) 사용,Utiliser l'authentification -User Name,Пользователь,用户名,認證用戶,認証ユーザ,사용자 이름,Nom d'utilisateur -Auth Pwd,Пароль,认证密码,認證口令,認証パスワード,비밀번호,Mot de passe d'authentification -,,,,,, -# Log Form,,,,,, -,,,,,, -&File,Файл,文件(&F),檔案 (&F),ファイル (&F),파일 (&F),Fichier -&Open Location,Расположение файла,在资源管理器中打开(&O),在檔案總管中開啟 (&O),ファイルの場所を開く (&O),위치 열기 (&O),Ouvrier -E&xit,Выход,退出(&X),結束 (&X),終了 (&X),종료 (&X),Quitter -&View,Вид,视图(&V),檢視 (&V),表示 (&V),보기 (&V),Afficher -&Clear Logs,Очистить журнал,清空日志(&C),清除記錄檔 (&C),ログの削除 (&C),로그 초기화 (&C),Effacer les journaux -Change &Font,Шрифт…,设置字体(&F),變更字型 (&F),フォント (&F),글꼴 변경 (&F),Définir la police -&Wrap Text,Перенос строк,自动换行(&W),自動換行 (&W),右端で折り返す (&W),텍스트 감싸기 (&W),Retour à la ligne -&Top Most,Поверх всех окон,置顶(&T),置頂 (&T),常に最前面に表示 (&T),상단 우선 (Top Most) (&T),Metter en haut -&Show Toolbar,Панель инструментов,显示工具栏(&S),顯示工具列 (&S),ツールバーの表示 (&S),툴바 보여주기 (&S),Afficher la barre d'outils -Log Viewer,Просмотр журнала,日志查看器,記錄檔檢視器,ログビューア,로그 뷰어,Visionneuse de journaux -Inbound,Входящая,入站,輸入,受信,"인바운드 (Rx, 다운로드)",Entrant -Outbound,Исходящая,出站,輸出,送信,"아웃바운드 (Tx, 업로드)",Sortant -,,,,,, -# QRCode Form,,,,,, -,,,,,, -QRCode and URL,QRCode и URL,二维码与 URL,QR 碼與 URL,QR コードと URL,QR코드와 URL,QRCode et URL -,,,,,, -# PAC Url Form,,,,,, -,,,,,, -Edit Online PAC URL,Изменение URL удаленного PAC,编辑在线 PAC 网址,編輯線上 PAC 網址,オンライン PAC URL の編集,온라인 PAC URL 수정,Modifier l'URL du PAC en ligne -Edit Online PAC URL...,Редактировать URL удаленного PAC…,编辑在线 PAC 网址...,編輯線上 PAC 網址...,オンライン PAC URL の編集...,온라인 PAC URL 수정…,Modifier l'URL du PAC en ligne ... -Please input PAC Url,Введите URL адрес для PAC-файла,请输入 PAC 网址,請輸入 PAC 網址,PAC URLを入力して下さい,PAC URL을 입력하세요,Veuillez saisir l'URL PAC -,,,,,, -# HotkeySettings Form,,,,,, -,,,,,, -Switch system proxy,ВКЛ/ВЫКЛ системный прокси-сервер,切换系统代理状态,切換系統 Proxy 狀態,システム プロキシの状態を切り替える,시스템 프록시 전환,Changer l'état de proxy système -Switch system proxy mode,Переключение режима прокси-сервера,切换系统代理模式,切換系統 Proxy 模式,プロキシモードを切り替える,시스템 프록시 모드 전환,Changer le mode de proxy système -Allow Clients from LAN,Общий доступ к подключению,切换局域网共享,切換區域網路共用,LAN からのアクセスの許可を切り替える,LAN으로부터 클라이언트 허용,Autoriser les clients du LAN -Show Logs...,Просмотр журналов,显示日志,顯示記錄檔,ログの表示,로그 보기…,Afficher les journaux -Switch to previous server,Переключить на пред. сервер,切换上个服务器,切換上一個伺服器,前のサーバーに切り替える,이전 서버로 전환,Passer au serveur précédent -Switch to next server,Переключить на след. сервер,切换下个服务器,切換下一個伺服器,次のサーバーに切り替える,다음 서버로 전환,Passer au serveur suivant -Reg All,Применить все,注册全部快捷键,註冊所有快速鍵,全部登録する,모두 등록,Enregistrer tout -Reg Hotkeys At Startup,Применять при запуске программы,启动时注册快捷键,啟動時註冊快速鍵,起動時にホットキーを登録する,시스템 시작 시 단축키 등록,Enregistrer tout au démarrage -,,,,,, -# Messages,,,,,, -,,,,,, -Shadowsocks Error: {0},Ошибка Shadowsocks: {0},Shadowsocks 错误: {0},Shadowsocks 錯誤: {0},Shadowsocks エラー: {0},Shadowsocks 오류: {0},Erreur shadowsocks: {0} -Port {0} already in use,Порт {0} уже используется,端口 {0} 已被占用,連接埠號碼 {0} 已被使用,ポート番号 {0} は既に使用されています。,{0}번 포트는 이미 사용 중입니다.,Port {0} déjà utilisé -Port {0} is reserved by system,Порт {0} зарезервирован системой,端口 {0} 是系统保留端口,連接埠號碼 {0} 由系統保留, ポート番号 {0} はシステムによって予約されています,{0}번 포트는 시스템에서 사용 중입니다.,Port {0} réservé par le système -Invalid server address,Неверный адрес сервера,非法服务器地址,無效伺服器位址,サーバーアドレスが無効です。,올바르지 않은 서버 주소입니다.,Adresse de serveur non valide -Illegal port number format,Неверный числовой формат порта,非法端口格式,無效連接埠號碼格式,ポート番号のフォーマットが無効です。,올바르지 않은 포트 번호 형식입니다.,Format de numéro de port illégal -Illegal timeout format,Неверный формат таймаута,非法超时格式,無效逾時格式,タイムアウト値のフォーマットが無効です。,올바르지 않은 시간초과(Timeout) 형식입니다.,Format de délai d'attente illégal -Server IP can not be blank,IP-адрес сервера не может быть пустым,服务器 IP 不能为空,伺服器 IP 不能為空,サーバー IP が指定されていません。,서버 IP는 비어있으면 안됩니다.,L'adresse IP du serveur ne peut pas être vide -Password can not be blank,Пароль не может быть пустым,密码不能为空,密碼不能為空,パスワードが指定されていません。,비밀번호는 비어있으면 안됩니다.,Le mot de passe ne peut pas être vide -Port out of range,Порт выходит за допустимый диапазон,端口超出范围,連接埠號碼超出範圍,ポート番号は範囲外です。,올바른 포트 범위가 아닙니다.,Port hors de portée -Port can't be 8123,Адрес порта 8123 не может быть использован,端口不能为 8123,連接埠號碼不能為 8123,8123 番以外のポート番号を指定して下さい。,8123번 포트는 사용할 수 없습니다.,Le port ne peut pas être 8123 -Shadowsocks {0} Update Found,Обнаружена новая версия Shadowsocks: {0},Shadowsocks {0} 更新,Shadowsocks {0} 更新,Shadowsocks バージョン {0} は利用できます。,Shadowsocks {0} 업데이트가 있습니다.,Shadowsocks {0} Mise à jour trouvée -No update is available,Обновлений не обнаружено,没有可用的更新,沒有可用的更新,お使いのバージョンは最新です。,사용 가능한 업데이트가 없습니다.,Aucune mise à jour n'est disponible -Click here to update,Нажмите сюда для обновления,点击这里升级,點按此處升級,クリックしてアップデートします。,여기를 클릭하여 업데이트,Cliquez ici pour mettre à jour -Shadowsocks is here,Shadowsocks находится здесь,Shadowsocks 在这里,Shadowsocks 在這裡,Shadowsocks はここです。,Shadowsocks는 여기에 있습니다,Veuillez trouver Shadowsocks ici -You can turn on/off Shadowsocks in the context menu,Вы можете управлять Shadowsocks из контекстного меню,可以在右键菜单中开关 Shadowsocks,可以在右鍵選項單中開關 Shadowsocks,コンテキストメニューを使って、Shadowsocks を有効または無効にすることができます。,프로그램 메뉴에서 Shadowsocks를 끄고 켤 수 있습니다.,Vous pouvez activer / désactiver Shadowsocks dans le menu contextuel -System Proxy Enabled,Системный прокси включен,系统代理已启用,系統 Proxy 已啟用,システム プロキシが有効です。,시스템 프록시가 활성화되었습니다.,Proxy système activé -System Proxy Disabled,Системный прокси отключен,系统代理未启用,系統 Proxy 未啟用,システム プロキシが無効です。,시스템 프록시가 비활성화되었습니다.,Proxy système désactivé -Failed to update PAC file ,Не удалось обновить PAC файл,更新 PAC 文件失败,更新 PAC 檔案失敗,PAC の更新に失敗しました。,PAC 파일을 업데이트하는데 실패했습니다.,Impossible de mettre à jour le fichier PAC -PAC updated,PAC файл обновлен,更新 PAC 成功,更新 PAC 成功,PAC を更新しました。,PAC 파일이 업데이트되었습니다.,PAC mis à jour -No updates found. Please report to GFWList if you have problems with it.,Обновлений не найдено. Сообщите авторам GFWList если у вас возникли проблемы.,未发现更新。如有问题请提交给 GFWList。,未發現更新。如有問題請報告至 GFWList。,お使いのバージョンは最新です。問題がある場合は、GFWList に報告して下さい。,사용 가능한 업데이트를 찾지 못했습니다. 문제가 있다면 GFWList로 전송해주세요.,Aucune mise à jour trouvée. Veuillez signaler à GFWList si vous avez des problèmes concernant. -No QRCode found. Try to zoom in or move it to the center of the screen.,QRCode не обнаружен. Попробуйте увеличить изображение или переместить его в центр экрана.,未发现二维码,尝试把它放大或移动到靠近屏幕中间的位置,未發現 QR 碼,嘗試把它放大或移動到靠近熒幕中間的位置,QR コードが見つかりませんでした。コードを大きくするか、画面の中央に移動して下さい。,QR코드를 찾을 수 없습니다. 가운데로 화면을 이동시키거나 확대해보세요.,Aucun QRCode trouvé. Essayez de zoomer ou de le déplacer vers le centre de l'écran. -Shadowsocks is already running.,Shadowsocks уже запущен.,Shadowsocks 已经在运行。,Shadowsocks 已經在執行。,Shadowsocks 実行中,Shadowsocks가 이미 실행 중입니다.,Shadowsocks est déjà en cours d'exécution. -Find Shadowsocks icon in your notify tray.,Значок Shadowsocks можно найти в области уведомлений.,请在任务栏里寻找 Shadowsocks 图标。,請在工作列裡尋找 Shadowsocks 圖示。,通知領域には Shadowsocks のアイコンがあります。,트레이에서 Shadowsocks를 찾아주세요.,Trouvez l'icône Shadowsocks dans votre barre de notification. -"If you want to start multiple Shadowsocks, make a copy in another directory.","Если вы хотите запустить несколько копий Shadowsocks одновременно, создайте отдельную папку на каждую копию.",如果想同时启动多个,可以另外复制一份到别的目录。,如果想同時啟動多個,可以另外複製一份至別的目錄。,複数起動したい場合は、プログラムファイルを別のフォルダーにコピーしてから、もう一度実行して下さい。,"만약 여러 개의 Shadowsocks를 사용하고 싶으시다면, 파일을 다른 곳에 복사해주세요.","Si vous souhaitez démarrer plusieurs Shadowsocks, faites une copie dans un autre répertoire." -Failed to decode QRCode,Не удалось распознать QRCode,无法解析二维码,QR 碼解碼失敗,QR コードの読み取りに失敗しました。,QR코드를 해석하는데에 실패했습니다.,Impossible de décoder le QRCode -Failed to update registry,Не удалось обновить запись в реестре,无法修改注册表,無法修改登錄檔,レジストリの更新に失敗しました。,레지스트리를 업데이트하는데에 실패했습니다.,Impossible de mettre à jour de la base de registre -Import from URL: {0} ?,импортировать из адреса: {0} ?,从URL导入: {0} ?,從URL匯入: {0} ?,,, -Successfully imported from {0},Успешно импортировано из {0},导入成功:{0},導入成功:{0},,, -Failed to import. Please check if the link is valid.,,导入失败,请检查链接是否有效。,導入失敗,請檢查鏈接是否有效。,,, -System Proxy On: ,Системный прокси:,系统代理已启用:,系統 Proxy 已啟用:,システム プロキシが有効:,시스템 프록시 활성화됨: ,Proxy système activé: -Running: Port {0},Запущен на порту {0},正在运行:端口 {0},正在執行:連接埠號碼 {0},実行中:ポート {0},실행 중: 포트 {0}번,En cours d'exécution: port {0} -"Unexpected error, shadowsocks will exit. Please report to","Непредвиденная ошибка, пожалуйста сообщите на",非预期错误,Shadowsocks将退出。请提交此错误到,非預期錯誤,Shadowsocks 將結束。請報告此錯誤至,予想外のエラーが発生したため、Shadowsocks を終了します。詳しくは下記までお問い合わせ下さい:,알 수 없는 오류로 Shadowsocks가 종료될 것입니다. 오류를 제보해주세요:,Shadowsocks va quitter en présence d/érreur inattendue. Veuillez signaler à -"Unsupported operating system, use Windows Vista at least.","Операционная система не поддерживается, минимальные системные требования: Windows Vista или выше.",不支持的操作系统版本,最低需求为Windows Vista。,不支援的作業系統版本,最低需求為 Windows Vista。,お使いの OS はサポートされていません。Windows Vista 以降の OS で実行して下さい。,"지원하지 않는 운영체제입니다, 최소한 Windows Vista가 필요합니다.","Système d'exploitation incompatible, veuillez utiliser Windows Vista ou ultérieure." -"Unsupported .NET Framework, please update to {0} or later.","Версия .NET Framework не поддерживается, минимальные системные требования: {0} или выше.",当前 .NET Framework 版本过低,请升级至{0}或更新版本。,目前 .NET Framework 版本過低,最低需求為{0}。,お使いの .NET Framework はサポートされていません。{0} 以降のバンジョーをインストールして下さい。,"지원하지 않는 .NET 프레임워크입니다, {0} 또는 상위 버전으로 업데이트해주세요.",".NET Framework incompatible, veuillez mettre à jour vers {0} ou ultérieure." -Proxy request failed,Не удалось выполнить запрос,代理请求失败,Proxy 要求失敗,プロキシ要求が失敗しました。,프록시 요청에 실패했습니다.,Échec de la demande de proxy -Proxy handshake failed,Не удалось выполнить хэндшейк,代理握手失败,Proxy 交握失敗,プロキシ ハンドシェイクに失敗しました。,프록시 핸드쉐이크에 실패했습니다.,Échec de la prise de contact par proxy -Register hotkey failed,Не удалось применить настройки горячих клавиш,注册快捷键失败,註冊快速鍵失敗,ホットキーの登錄に失敗しました。,단축키 등록에 실패했습니다.,Échec de l'enregistrement du raccourci clavier -Cannot parse hotkey: {0},Не удалось распознать следующие горячие клавиши: {0},解析快捷键失败: {0},剖析快速鍵失敗: {0},ホットキーを解析できません: {0},단축키를 해석할 수 없습니다: {0},Impossible d'analyser le raccourci clavier: {0} -"Timeout is invalid, it should not exceed {0}",Таймаут не может превышать значение {0},超时无效,不应超过 {0},逾時無效,不應超過 {0},タイムアウト値が無効です。{0} 以下の値を指定して下さい。,"올바르지 않은 시간초과(Timeout) 설정입니다, {0}을 초과하지 않아야 합니다.","Le délai d'attente invalide, il ne doit pas dépasser {0}" -Cannot find the plugin program file,Файл плагина не найден,找不到插件程序文件,找不到外掛程式文件,,플러그인 프로그램 파일을 찾을 수 없습니다.,Impossible de trouver le fichier du programme du plugin -,,,,,, -Operation failure,Операция завершилась неудачей,操作失败,,,작업에 실패했습니다.,Operation failure -Auto save failed,Автоматическое сохранение не удалось,自动保存失败,,,자동 저장에 실패했습니다.,Échec de l'enregistrement automatique -Whether to discard unconfigured servers,Внесенные изменения будут утеряны,是否丢弃未配置的服务器,,,완전하지 않은 서버 설정 변경 사항을 폐기하시겠습니까?,Eliminer les serveurs non configurés ou non -"Invalid server address, Cannot automatically save or discard changes",Неверный адрес сервера. Невозможно сохранить или отменить изменения,非法服务器地址,无法自动保存,是否丢弃修改,,,"서버 주소가 올바르지 않아 자동저장할 수 없습니다, 변경 사항을 폐기하시겠습니까?","Adresse de serveur invalide, impossible d'enregistrer ou d'annuler automatiquement les modifications" -"Illegal port number format, Cannot automatically save or discard changes",Неверный числовой адрес порта. Невозможно сохранить или отменить изменения,非法端口格式,无法自动保存,是否丢弃修改,,,"포트 번호가 올바르지 않아 자동저장할 수 없습니다, 변경 사항을 폐기하시겠습니까?","Format de numéro de port illégal, impossible d'enregistrer ou d'annuler automatiquement les modifications" -"Password can not be blank, Cannot automatically save or discard changes",Пароль не может быть пустым. Невозможно сохранить или отменить изменения,密码不能为空,无法自动保存,是否丢弃修改,,,"비밀번호가 비어있어 자동저장할 수 없습니다, 변경 사항을 폐기하시겠습니까?","Le mot de passe ne peut pas être vide, impossible d'enregistrer ou d'annuler automatiquement les modifications" -"Illegal timeout format, Cannot automatically save or discard changes",Неверный формат таймаута. Невозможно сохранить или отменить изменения,非法超时格式,无法自动保存,是否丢弃修改,,,"시간초과(Timeout) 형식이 올바르지 않아 자동저장할 수 없습니다, 변경 사항을 폐기하시겠습니까?","Format de délai d'attente illégal, impossible d'enregistrer ou d'annuler automatiquement les modifications" -,,,,,, -"Error occured when process proxy setting, do you want reset current setting and retry?",Произошла ошибка при обработке настроек. Хотите сбросить текущие настройки и попробовать снова?,处理代理设置时发生错误,是否重置当前代理设置并重试?,,,프록시 설정을 처리하는데에 오류가 발생했습니다. 현재 설정을 폐기하고 다시시도하시겠습니까?,Une erreur s'est produite lors du processus de configuration du proxy. Voulez-vous réinitialiser le paramètre actuel et réessayer? -"Unrecoverable proxy setting error occured, see log for detail","Произошла серьезная ошибка, подробности можно узнать в журналах",发生不可恢复的代理设置错误,查看日志以取得详情,,,복구 불가능한 프록시 설정 오류가 발생했습니다. 자세한 정보는 로그를 참조하세요.,"Une erreur de paramètre de proxy irrécupérable s'est produite, consultez le journal pour plus de détails" -Auth user can not be blank,Пользователь не может быть пустым,认证用户不能为空,認證用戶不能為空,認証ユーザが指定されていません。,증명 정보의 사용자 이름은 비어있을 수 없습니다.,L'utilisateur d'authentification ne peut pas être vide -Auth pwd can not be blank,Пароль не может быть пустым,认证密码不能为空,認證口令不能為空,認証パスワードが指定されていません。,증명 정보의 비밀번호는 비어있을 수 없습니다.,Le mot de passe d'authentification ne peut pas être vide +en,ru-RU,zh-CN,zh-TW,ja,ko +#Restart program to apply translation,,,,, +#This is comment line,,,,, +#Always keep language name at head of file,,,,, +#Language name is output in log,,,,, +"#You can find it by search ""Current language is:""",,,,, +#Please use UTF-8 with BOM encoding so we can edit it in Excel,,,,, +,,,,, +Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks +,,,,, +#Menu,,,,, +,,,,, +System Proxy,Системный прокси-сервер,系统代理,系統代理,システムプロキシ,시스템 프록시 +Disable,Отключен,禁用,禁用,無効,비활성화 +PAC,Сценарий настройки (PAC),PAC 模式,PAC 模式,PAC,프록시 자동 구성 (PAC) +Global,Для всей системы,全局模式,全局模式,全般,전역 +Servers,Серверы,服务器,伺服器,サーバー,서버 +Edit Servers...,Редактировать серверы…,编辑服务器...,編輯伺服器...,サーバーの編集...,서버 수정… +Statistics Config...,Настройки статистики…,统计配置...,統計設定檔...,統計情報の設定...,통계 설정 +Start on Boot,Автозагрузка,开机启动,開機啟動,システムと同時に起動,시스템 시작 시에 시작하기 +Forward Proxy...,Прямой прокси…,正向代理设置...,正向 Proxy 設定...,フォワードプロキシの設定...,포워드 프록시 +Allow other Devices to connect,Общий доступ к подключению,允许其他设备连入,允許其他裝置連入,他のデバイスからの接続を許可する,다른 기기에서 연결 허용 +Local PAC,Локальный PAC,使用本地 PAC,使用本機 PAC,ローカル PAC,로컬 프록시 자동 구성 +Online PAC,Удаленный PAC,使用在线 PAC,使用線上 PAC,オンライン PAC,온라인 프록시 자동 구성 +Edit Local PAC File...,Редактировать локальный PAC…,编辑本地 PAC 文件...,編輯本機 PAC 檔案...,ローカル PAC ファイルの編集...,로컬 프록시 자동 구성 파일 수정 +Update Local PAC from GFWList,Обновить локальный PAC из GFWList,从 GFWList 更新本地 PAC,從 GFWList 更新本機 PAC,GFWList からローカル PAC を更新,GFWList에서 로컬 프록시 자동 구성 파일 업데이트 +Edit User Rule for GFWList...,Редактировать свои правила для GFWList,编辑 GFWList 的用户规则...,編輯 GFWList 的使用者規則...,ユーザールールの編集...,GFWList 사용자 수정 +Secure Local PAC,Безопасный URL локального PAC,保护本地 PAC,安全本機 PAC,ローカル PAC を保護,로컬 프록시 자동 구성 파일 암호화 +Copy Local PAC URL,Копировать URL локального PAC,复制本地 PAC 网址,複製本機 PAC 網址,ローカル PAC URL をコピー,로컬 프록시 자동 구성 파일 URL 복사 +Share Server Config...,Поделиться конфигурацией сервера…,分享服务器配置...,分享伺服器設定檔...,サーバーの設定を共有...,서버 설정 공유 +Scan QRCode from Screen...,Сканировать QRCode с экрана…,扫描屏幕上的二维码...,掃描螢幕上的 QR 碼...,画面から QR コードをスキャン...,화면에서 QR코드 스캔 +Import URL from Clipboard...,Импорт адреса из буфера обмена…,从剪贴板导入URL...,從剪貼簿匯入 URL...,クリップボードから URL をインポート...,클립보드에서 URL 가져오기… +Availability Statistics,Статистика доступности,统计可用性,統計可用性,可用性の統計,가용성 통계 +Show Logs...,Показать журнал…,显示日志...,顯示記錄檔...,ログの表示...,로그 보기… +Verbose Logging,Подробный журнал,详细记录日志,詳細資訊記錄,詳細なログを記録,자세한 로깅 사용 +Updates...,Обновления…,更新...,更新...,更新...,업데이트… +Check for Updates...,Проверить обновления…,检查更新,檢查更新,更新プログラムの確認...,업데이트 확인하기… +Check for Updates at Startup,Проверять при запуске,启动时检查更新,啟動時檢查更新,起動時に更新プログラムを確認,시스템 시작 시 업데이트 확인하기 +Check Pre-release Version,Проверять предрелизные версии,检查测试版更新,檢查發行前版本更新,先行開発版も確認,개발 버전 업데이트 확인하기 +Edit Hotkeys...,Горячие клавиши…,编辑快捷键...,編輯快速鍵...,ホットキーの編集...,단축키 수정… +About...,О программе…,关于...,關於...,Shadowsocks について...,정보… +Help,Помощь,帮助,說明,ヘルプ,도움말 +Quit,Выход,退出,結束,終了,종료 +Edit Servers,Редактирование серверов,编辑服务器,編輯伺服器,サーバーの編集,서버 수정 +Load Balance,Балансировка нагрузки,负载均衡,負載平衡,負荷分散,로드밸런싱 +High Availability,Высокая доступность,高可用,高可用性,高可用性,고가용성 +Choose by statistics,На основе статистики,根据统计,根據統計,統計で選ぶ,통계 기반 +Show Plugin Output,События плагинов в журнале,显示插件输出,,,플러그인 출력 보이기 +Write translation template,Создать шаблон для перевода,写入翻译模板,,,번역 템플릿 쓰기 +,,,,, +# Config Form,,,,, +,,,,, +Statistics configuration,Настройки статистики,统计配置,,,통계 설정 +&Add,Добавить,添加(&A),新增 (&A),新規 (&A),추가 (&A) +&Delete,Удалить,删除(&D),移除 (&D),削除 (&D),삭제 (&D) +Dupli&cate,Дублир-ть,复制(&C),複製 (&C),コピー (&C),복제 (&C) +Server,Сервер,服务器,伺服器,サーバー,서버 +Server IP,IP-адрес,服务器地址,伺服器位址,サーバーアドレス,서버 IP +Server Port,Порт,服务器端口,伺服器連接埠,サーバーポート,서버 포트 +Password,Пароль,密码,密碼,パスワード,비밀번호 +Show Password,Показать пароль,显示密码,顯示密碼,パスワードを表示する,비밀번호 보이기 +Encryption,Шифрование,加密,加密,暗号化,암호화 +Plugin Program,Плагин,插件程序,外掛程式,プラグインプログラム,플러그인 프로그램 +Plugin Options,Опции плагина,插件选项,外掛程式選項,プラグインのオプション,플러그인 설정 +Need Plugin Argument,Требуются аргументы,需要命令行参数,,,플러그인 인자가 필요함 +Plugin Arguments,Аргументы,插件参数,外掛程式參數,プラグインの引数,플러그인 인자 +Proxy Port,Порт прокси,代理端口,Proxy 連接埠,プロキシポート,프록시 포트 +Portable Mode,Переносимый режим,便携模式,便攜模式,ポータブルモード,Portable 모드 +Restart required,Требуется перезапуск программы,需要重新启动SS,需要重新啟動SS,再起動SSが必要,재시작 필요함 +Remarks,Примечания,备注,註解,付記,알림 +Timeout(Sec),Таймаут(сек),超时(秒),逾時 (秒),タイムアウト (秒),시간 초과 (초) +OK,ОК,确定,確定,OK,확인 +Cancel,Отмена,取消,取消,キャンセル,취소 +Apply,Применить,应用,應用,適用,적용 +New server,Новый сервер,未配置的服务器,新伺服器,新規サーバー,새 서버 +Move &Up,Выше,上移(&U),上移 (&U),上に移動 (&U),위로 (&U) +Move D&own,Ниже,下移(&O),下移 (&O),下に移動 (&O),아래로 (&O) +deprecated,Устаревшее,不推荐,不推薦,非推奨,더 이상 사용되지 않음 +"Encryption method {0} not exist, will replace with {1}",,加密方法{0}不存在,将使用{1}代替,,,{0} 암호화 방식이 존재하지 않으므로 {1}로 대체될 것입니다. +,,,,, +#Statistics Config,,,,, +,,,,, +Enable Statistics,Включить сбор статистики,启用统计,,,통계 활성화 +Ping Test,Проверка связи (Ping),Ping测试,,,Ping 테스트 +packages everytime,пакета на проверку,个包/次,,,시간 당 패킷 +By hour of day,Ежечасно,按照每天的小时数统计,,,매 시간 +Collect data per,Собирать данные за,收集数据每,,,데이터 수집 기간 +Keep choice for,Хранить отбор данных за,保持选择每,,,설정 유지하기 +minutes,мин.,分钟,,,분 +Final Score:,Финальная оценка:,总分:,,,최종 점수: +AverageLatency,СредЗадержка,平均延迟,,,평균 지연시간 +MinLatency,МинЗадержка,最小延迟,,,최소 지연시간 +MaxLatency,МаксЗадержка,最大延迟,,,최대 지연시간 +AverageInboundSpeed,СредВходСкорость,平均入站速度,,,평균 인바운드 속도 +MinInboundSpeed,МинВходСкорость,最小入站速度,,,최소 인바운드 속도 +MaxInboundSpeed,СредВходСкорость,最大入站速度,,,최대 인바운드 속도 +AverageOutboundSpeed,СредИсхСкорость,平均出站速度,,,평균 아웃바운드 속도 +MinOutboundSpeed,МинИсхСкорость,最小出站速度,,,최소 아웃바운드 속도 +MaxOutboundSpeed,МаксИсхСкорость,最大出站速度,,,최대 아웃바운드 속도 +AverageResponse,СредВремяОтвета,平均响应速度,,,평균 응답 +MinResponse,МинВремяОтвета,最小响应速度,,,최소 응답 +MaxResponse,МаксВремяОтвета,最大响应速度,,,최대 응답 +PackageLoss,ПотериПакетов,丢包率,,,패킷 손실 +Speed,Скорость,速度,,,속도 +Package Loss,Потери пакетов,丢包率,,,패킷 손실 +Ping,Ping,网络延迟,,,Ping +Chart Mode,График,图表模式,,,차트 모드 +24h,24ч,24小时,,,24시간 +all,За все время,全部,,,전체 +,,,,, +# Proxy Form,,,,, +,,,,, +Edit Proxy,Редактирование прокси,代理设置,編輯 Proxy,プロキシの編集,프록시 수정 +Use Proxy,Использовать прокси,使用代理,使用 Proxy,プロキシを利用する,프록시 사용 +Proxy Type,Тип прокси,代理类型,Proxy 類型,プロキシの種類,프록시 종류 +Proxy Addr,Адрес прокси,代理地址,Proxy 位址,プロキシアドレス,프록시 주소 +Proxy Port,Порт прокси,代理端口,Proxy 連接埠,プロキシポート,프록시 포트 +"If server has a plugin, proxy will not be used","Если сервер использует плагины, прокси НЕ будет использоваться",若服务器含有插件,代理将不被使用,若伺服器含有外掛程式,Proxy 將不被使用,サーバーにプラグインがある場合、プロキシは利用されません,서버에 플러그인이 설치 되어 있는 경우 프록시를 사용할 수 없습니다. +Use Auth,Требуется авторизация,使用认证,使用認證,認証を利用する,서버 증명(Auth) 사용 +User Name,Пользователь,用户名,認證用戶,認証ユーザ,사용자 이름 +Auth Pwd,Пароль,认证密码,認證口令,認証パスワード,비밀번호 +,,,,, +# Log Form,,,,, +,,,,, +&File,Файл,文件(&F),檔案 (&F),ファイル (&F),파일 (&F) +&Open Location,Расположение файла,在资源管理器中打开(&O),在檔案總管中開啟 (&O),ファイルの場所を開く (&O),위치 열기 (&O) +E&xit,Выход,退出(&X),結束 (&X),終了 (&X),종료 (&X) +&View,Вид,视图(&V),檢視 (&V),表示 (&V),보기 (&V) +&Clear Logs,Очистить журнал,清空日志(&C),清除記錄檔 (&C),ログの削除 (&C),로그 초기화 (&C) +Change &Font,Шрифт…,设置字体(&F),變更字型 (&F),フォント (&F),글꼴 변경 (&F) +&Wrap Text,Перенос строк,自动换行(&W),自動換行 (&W),右端で折り返す (&W),텍스트 감싸기 (&W) +&Top Most,Поверх всех окон,置顶(&T),置頂 (&T),常に最前面に表示 (&T),상단 우선 (Top Most) (&T) +&Show Toolbar,Панель инструментов,显示工具栏(&S),顯示工具列 (&S),ツールバーの表示 (&S),툴바 보여주기 (&S) +Log Viewer,Просмотр журнала,日志查看器,記錄檔檢視器,ログビューア,로그 뷰어 +Inbound,Входящая,入站,輸入,受信,"인바운드 (Rx, 다운로드)" +Outbound,Исходящая,出站,輸出,送信,"아웃바운드 (Tx, 업로드)" +,,,,, +# QRCode Form,,,,, +,,,,, +QRCode and URL,QRCode и URL,二维码与 URL,QR 碼與 URL,QR コードと URL,QR코드와 URL +,,,,, +# PAC Url Form,,,,, +,,,,, +Edit Online PAC URL,Изменение URL удаленного PAC,编辑在线 PAC 网址,編輯線上 PAC 網址,オンライン PAC URL の編集,온라인 프록시 자동 구성 URL 수정 +Edit Online PAC URL...,Редактировать URL удаленного PAC…,编辑在线 PAC 网址...,編輯線上 PAC 網址...,オンライン PAC URL の編集...,온라인 프록시 자동 구성 URL 수정… +Please input PAC Url,Введите URL адрес для PAC-файла,请输入 PAC 网址,請輸入 PAC 網址,PAC URLを入力して下さい,프록시 자동 구성 URL을 입력하세요 +,,,,, +# HotkeySettings Form,,,,, +,,,,, +Switch system proxy,ВКЛ/ВЫКЛ системный прокси-сервер,切换系统代理状态,切換系統 Proxy 狀態,システム プロキシの状態を切り替える,시스템 프록시 전환 +Switch system proxy mode,Переключение режима прокси-сервера,切换系统代理模式,切換系統 Proxy 模式,プロキシモードを切り替える,시스템 프록시 모드 전환 +Allow Clients from LAN,Общий доступ к подключению,切换局域网共享,切換區域網路共用,LAN からのアクセスの許可を切り替える,LAN으로부터 클라이언트 허용 +Show Logs...,Просмотр журналов,显示日志,顯示記錄檔,ログの表示,로그 보기… +Switch to previous server,Переключить на пред. сервер,切换上个服务器,切換上一個伺服器,前のサーバーに切り替える,이전 서버로 전환 +Switch to next server,Переключить на след. сервер,切换下个服务器,切換下一個伺服器,次のサーバーに切り替える,다음 서버로 전환 +Reg All,Применить все,注册全部快捷键,註冊所有快速鍵,全部登録する,모두 등록 +Reg Hotkeys At Startup,Применять при запуске программы,启动时注册快捷键,啟動時註冊快速鍵,起動時にホットキーを登録する,시스템 시작 시 단축키 등록 +,,,,, +# Messages,,,,, +,,,,, +Shadowsocks Error: {0},Ошибка Shadowsocks: {0},Shadowsocks 错误: {0},Shadowsocks 錯誤: {0},Shadowsocks エラー: {0},Shadowsocks 오류: {0} +Port {0} already in use,Порт {0} уже используется,端口 {0} 已被占用,連接埠號碼 {0} 已被使用,ポート番号 {0} は既に使用されています。,{0}번 포트는 이미 사용 중입니다. +Port {0} is reserved by system,Порт {0} зарезервирован системой,端口 {0} 是系统保留端口,連接埠號碼 {0} 由系統保留, ポート番号 {0} はシステムによって予約されています,{0}번 포트는 시스템에서 사용 중입니다. +Invalid server address,Неверный адрес сервера,非法服务器地址,無效伺服器位址,サーバーアドレスが無効です。,올바르지 않은 서버 주소입니다. +Illegal port number format,Неверный числовой формат порта,非法端口格式,無效連接埠號碼格式,ポート番号のフォーマットが無効です。,올바르지 않은 포트 번호 형식입니다. +Illegal timeout format,Неверный формат таймаута,非法超时格式,無效逾時格式,タイムアウト値のフォーマットが無効です。,올바르지 않은 시간 초과 형식입니다. +Server IP can not be blank,IP-адрес сервера не может быть пустым,服务器 IP 不能为空,伺服器 IP 不能為空,サーバー IP が指定されていません。,서버 IP를 입력하세요. +Password can not be blank,Пароль не может быть пустым,密码不能为空,密碼不能為空,パスワードが指定されていません。,비밀번호를 입력하세요. +Port out of range,Порт выходит за допустимый диапазон,端口超出范围,連接埠號碼超出範圍,ポート番号は範囲外です。,올바른 포트 범위가 아닙니다. +Port can't be 8123,Адрес порта 8123 не может быть использован,端口不能为 8123,連接埠號碼不能為 8123,8123 番以外のポート番号を指定して下さい。,8123번 포트는 사용할 수 없습니다. +Shadowsocks {0} Update Found,Обнаружена новая версия Shadowsocks: {0},Shadowsocks {0} 更新,Shadowsocks {0} 更新,Shadowsocks バージョン {0} は利用できます。,Shadowsocks {0} 업데이트가 있습니다. +No update is available,Обновлений не обнаружено,没有可用的更新,沒有可用的更新,お使いのバージョンは最新です。,사용 가능한 업데이트가 없습니다. +Click here to update,Нажмите сюда для обновления,点击这里升级,點按此處升級,クリックしてアップデートします。,여기를 클릭하여 업데이트 +Shadowsocks is here,Shadowsocks находится здесь,Shadowsocks 在这里,Shadowsocks 在這裡,Shadowsocks はここです。,Shadowsocks는 여기에 있습니다 +You can turn on/off Shadowsocks in the context menu,Вы можете управлять Shadowsocks из контекстного меню,可以在右键菜单中开关 Shadowsocks,可以在右鍵選項單中開關 Shadowsocks,コンテキストメニューを使って、Shadowsocks を有効または無効にすることができます。,프로그램 메뉴에서 Shadowsocks를 끄고 켤 수 있습니다. +System Proxy Enabled,Системный прокси включен,系统代理已启用,系統 Proxy 已啟用,システム プロキシが有効です。,시스템 프록시가 활성화되었습니다. +System Proxy Disabled,Системный прокси отключен,系统代理未启用,系統 Proxy 未啟用,システム プロキシが無効です。,시스템 프록시가 비활성화되었습니다. +Failed to update PAC file ,Не удалось обновить PAC файл,更新 PAC 文件失败,更新 PAC 檔案失敗,PAC の更新に失敗しました。,PAC 파일을 업데이트하는데 실패했습니다. +PAC updated,PAC файл обновлен,更新 PAC 成功,更新 PAC 成功,PAC を更新しました。,PAC 파일이 업데이트되었습니다. +No updates found. Please report to GFWList if you have problems with it.,Обновлений не найдено. Сообщите авторам GFWList если у вас возникли проблемы.,未发现更新。如有问题请提交给 GFWList。,未發現更新。如有問題請報告至 GFWList。,お使いのバージョンは最新です。問題がある場合は、GFWList に報告して下さい。,사용 가능한 업데이트를 찾지 못했습니다. 문제가 있다면 GFWList로 전송해주세요. +No QRCode found. Try to zoom in or move it to the center of the screen.,QRCode не обнаружен. Попробуйте увеличить изображение или переместить его в центр экрана.,未发现二维码,尝试把它放大或移动到靠近屏幕中间的位置,未發現 QR 碼,嘗試把它放大或移動到靠近熒幕中間的位置,QR コードが見つかりませんでした。コードを大きくするか、画面の中央に移動して下さい。,QR코드를 찾을 수 없습니다. 가운데로 화면을 이동시키거나 확대해보세요. +Shadowsocks is already running.,Shadowsocks уже запущен.,Shadowsocks 已经在运行。,Shadowsocks 已經在執行。,Shadowsocks 実行中,Shadowsocks가 이미 실행 중입니다. +Find Shadowsocks icon in your notify tray.,Значок Shadowsocks можно найти в области уведомлений.,请在任务栏里寻找 Shadowsocks 图标。,請在工作列裡尋找 Shadowsocks 圖示。,通知領域には Shadowsocks のアイコンがあります。,트레이에서 Shadowsocks를 찾아주세요. +"If you want to start multiple Shadowsocks, make a copy in another directory.","Если вы хотите запустить несколько копий Shadowsocks одновременно, создайте отдельную папку на каждую копию.",如果想同时启动多个,可以另外复制一份到别的目录。,如果想同時啟動多個,可以另外複製一份至別的目錄。,複数起動したい場合は、プログラムファイルを別のフォルダーにコピーしてから、もう一度実行して下さい。,"만약 여러 개의 Shadowsocks를 사용하고 싶으시다면, 파일을 다른 곳에 복사해주세요." +Failed to decode QRCode,Не удалось распознать QRCode,无法解析二维码,QR 碼解碼失敗,QR コードの読み取りに失敗しました。,QR코드를 해석하는데에 실패했습니다. +Failed to update registry,Не удалось обновить запись в реестре,无法修改注册表,無法修改登錄檔,レジストリの更新に失敗しました。,레지스트리를 업데이트하는데에 실패했습니다. +System Proxy On: ,Системный прокси:,系统代理已启用:,系統 Proxy 已啟用:,システム プロキシが有効:,시스템 프록시 활성화됨: +Running: Port {0},Запущен на порту {0},正在运行:端口 {0},正在執行:連接埠號碼 {0},実行中:ポート {0},실행 중: 포트 {0}번 +"Unexpected error, shadowsocks will exit. Please report to","Непредвиденная ошибка, пожалуйста сообщите на",非预期错误,Shadowsocks将退出。请提交此错误到,非預期錯誤,Shadowsocks 將結束。請報告此錯誤至,予想外のエラーが発生したため、Shadowsocks を終了します。詳しくは下記までお問い合わせ下さい:,알 수 없는 오류로 Shadowsocks가 종료됩니다. 오류를 제보해주세요: +"Unsupported operating system, use Windows Vista at least.","Операционная система не поддерживается, минимальные системные требования: Windows Vista или выше.",不支持的操作系统版本,最低需求为Windows Vista。,不支援的作業系統版本,最低需求為 Windows Vista。,お使いの OS はサポートされていません。Windows Vista 以降の OS で実行して下さい。,지원하지 않는 운영체제입니다. 최소 Windows Vista가 필요합니다. +"Unsupported .NET Framework, please update to {0} or later.","Версия .NET Framework не поддерживается, минимальные системные требования: {0} или выше.",当前 .NET Framework 版本过低,请升级至{0}或更新版本。,目前 .NET Framework 版本過低,最低需求為{0}。,お使いの .NET Framework はサポートされていません。{0} 以降のバンジョーをインストールして下さい。,지원하지 않는 .NET 프레임워크입니다. {0} 또는 상위 버전으로 업데이트해주세요. +Proxy request failed,Не удалось выполнить запрос,代理请求失败,Proxy 要求失敗,プロキシ要求が失敗しました。,프록시 요청에 실패했습니다. +Proxy handshake failed,Не удалось выполнить хэндшейк,代理握手失败,Proxy 交握失敗,プロキシ ハンドシェイクに失敗しました。,프록시 핸드쉐이크에 실패했습니다. +Register hotkey failed,Не удалось применить настройки горячих клавиш,注册快捷键失败,註冊快速鍵失敗,ホットキーの登錄に失敗しました。,단축키 등록에 실패했습니다. +Cannot parse hotkey: {0},Не удалось распознать следующие горячие клавиши: {0},解析快捷键失败: {0},剖析快速鍵失敗: {0},ホットキーを解析できません: {0},단축키를 해석할 수 없습니다: {0} +"Timeout is invalid, it should not exceed {0}",Таймаут не может превышать значение {0},超时无效,不应超过 {0},逾時無效,不應超過 {0},タイムアウト値が無効です。{0} 以下の値を指定して下さい。,"올바르지 않은 시간 초과 설정입니다, {0}을 초과하지 않아야 합니다." +Cannot find the plugin program file,Файл плагина не найден,找不到插件程序文件,找不到外掛程式文件,,플러그인 프로그램 파일을 찾을 수 없습니다. +,,,,, +Operation failure,Операция завершилась неудачей,操作失败,,,작업에 실패했습니다. +Auto save failed,Автоматическое сохранение не удалось,自动保存失败,,,자동 저장에 실패했습니다. +Whether to discard unconfigured servers,Внесенные изменения будут утеряны,是否丢弃未配置的服务器,,,구성되지 않은 서버 설정 변경 사항을 폐기하시겠습니까? +"Invalid server address, Cannot automatically save or discard changes",Неверный адрес сервера. Невозможно сохранить или отменить изменения,非法服务器地址,无法自动保存,是否丢弃修改,,,"서버 주소가 올바르지 않아 자동 저장 할 수 없습니다, 변경 사항을 폐기하시겠습니까?" +"Illegal port number format, Cannot automatically save or discard changes",Неверный числовой адрес порта. Невозможно сохранить или отменить изменения,非法端口格式,无法自动保存,是否丢弃修改,,,"포트 번호가 올바르지 않아 자동 저장 할 수 없습니다, 변경 사항을 폐기하시겠습니까?" +"Password can not be blank, Cannot automatically save or discard changes",Пароль не может быть пустым. Невозможно сохранить или отменить изменения,密码不能为空,无法自动保存,是否丢弃修改,,,"비밀번호를 입력하지 않아 자동 저장 할 수 없습니다, 변경 사항을 폐기하시겠습니까?" +"Illegal timeout format, Cannot automatically save or discard changes",Неверный формат таймаута. Невозможно сохранить или отменить изменения,非法超时格式,无法自动保存,是否丢弃修改,,,Timeout 형식이 올바르지 않아 자동 저장 할 수 없습니다. 변경 사항을 폐기하시겠습니까? +,,,,, +"Error occured when process proxy setting, do you want reset current setting and retry?",Произошла ошибка при обработке настроек. Хотите сбросить текущие настройки и попробовать снова?,处理代理设置时发生错误,是否重置当前代理设置并重试?,,,프록시 설정을 처리하는데에 오류가 발생했습니다. 현재 설정을 폐기하고 다시 시도하시겠습니까? +"Unrecoverable proxy setting error occured, see log for detail","Произошла серьезная ошибка, подробности можно узнать в журналах",发生不可恢复的代理设置错误,查看日志以取得详情,,,복구 불가능한 프록시 설정 오류가 발생했습니다. 자세한 정보는 로그를 참조하세요. +Auth user can not be blank,Пользователь не может быть пустым,认证用户不能为空,認證用戶不能為空,認証ユーザが指定されていません。,증명 정보의 사용자 이름은 비어있을 수 없습니다. +Auth pwd can not be blank,Пароль не может быть пустым,认证密码不能为空,認證口令不能為空,認証パスワードが指定されていません。,증명 정보의 비밀번호는 비어있을 수 없습니다. From dbe0864615d6acf7d197ccf01f16652c989447e3 Mon Sep 17 00:00:00 2001 From: RekonChan <44664655+RekonChan@users.noreply.github.com> Date: Wed, 29 Apr 2020 15:53:10 +0600 Subject: [PATCH 7/8] Updated Language File Added Missing Lines Fixed Grammars and Errors for Korean --- shadowsocks-csharp/Data/i18n.csv | 424 ++++++++++++++++--------------- 1 file changed, 214 insertions(+), 210 deletions(-) diff --git a/shadowsocks-csharp/Data/i18n.csv b/shadowsocks-csharp/Data/i18n.csv index 01081fa7..e3395f96 100644 --- a/shadowsocks-csharp/Data/i18n.csv +++ b/shadowsocks-csharp/Data/i18n.csv @@ -1,210 +1,214 @@ -en,ru-RU,zh-CN,zh-TW,ja,ko -#Restart program to apply translation,,,,, -#This is comment line,,,,, -#Always keep language name at head of file,,,,, -#Language name is output in log,,,,, -"#You can find it by search ""Current language is:""",,,,, -#Please use UTF-8 with BOM encoding so we can edit it in Excel,,,,, -,,,,, -Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks -,,,,, -#Menu,,,,, -,,,,, -System Proxy,Системный прокси-сервер,系统代理,系統代理,システムプロキシ,시스템 프록시 -Disable,Отключен,禁用,禁用,無効,비활성화 -PAC,Сценарий настройки (PAC),PAC 模式,PAC 模式,PAC,프록시 자동 구성 (PAC) -Global,Для всей системы,全局模式,全局模式,全般,전역 -Servers,Серверы,服务器,伺服器,サーバー,서버 -Edit Servers...,Редактировать серверы…,编辑服务器...,編輯伺服器...,サーバーの編集...,서버 수정… -Statistics Config...,Настройки статистики…,统计配置...,統計設定檔...,統計情報の設定...,통계 설정 -Start on Boot,Автозагрузка,开机启动,開機啟動,システムと同時に起動,시스템 시작 시에 시작하기 -Forward Proxy...,Прямой прокси…,正向代理设置...,正向 Proxy 設定...,フォワードプロキシの設定...,포워드 프록시 -Allow other Devices to connect,Общий доступ к подключению,允许其他设备连入,允許其他裝置連入,他のデバイスからの接続を許可する,다른 기기에서 연결 허용 -Local PAC,Локальный PAC,使用本地 PAC,使用本機 PAC,ローカル PAC,로컬 프록시 자동 구성 -Online PAC,Удаленный PAC,使用在线 PAC,使用線上 PAC,オンライン PAC,온라인 프록시 자동 구성 -Edit Local PAC File...,Редактировать локальный PAC…,编辑本地 PAC 文件...,編輯本機 PAC 檔案...,ローカル PAC ファイルの編集...,로컬 프록시 자동 구성 파일 수정 -Update Local PAC from GFWList,Обновить локальный PAC из GFWList,从 GFWList 更新本地 PAC,從 GFWList 更新本機 PAC,GFWList からローカル PAC を更新,GFWList에서 로컬 프록시 자동 구성 파일 업데이트 -Edit User Rule for GFWList...,Редактировать свои правила для GFWList,编辑 GFWList 的用户规则...,編輯 GFWList 的使用者規則...,ユーザールールの編集...,GFWList 사용자 수정 -Secure Local PAC,Безопасный URL локального PAC,保护本地 PAC,安全本機 PAC,ローカル PAC を保護,로컬 프록시 자동 구성 파일 암호화 -Copy Local PAC URL,Копировать URL локального PAC,复制本地 PAC 网址,複製本機 PAC 網址,ローカル PAC URL をコピー,로컬 프록시 자동 구성 파일 URL 복사 -Share Server Config...,Поделиться конфигурацией сервера…,分享服务器配置...,分享伺服器設定檔...,サーバーの設定を共有...,서버 설정 공유 -Scan QRCode from Screen...,Сканировать QRCode с экрана…,扫描屏幕上的二维码...,掃描螢幕上的 QR 碼...,画面から QR コードをスキャン...,화면에서 QR코드 스캔 -Import URL from Clipboard...,Импорт адреса из буфера обмена…,从剪贴板导入URL...,從剪貼簿匯入 URL...,クリップボードから URL をインポート...,클립보드에서 URL 가져오기… -Availability Statistics,Статистика доступности,统计可用性,統計可用性,可用性の統計,가용성 통계 -Show Logs...,Показать журнал…,显示日志...,顯示記錄檔...,ログの表示...,로그 보기… -Verbose Logging,Подробный журнал,详细记录日志,詳細資訊記錄,詳細なログを記録,자세한 로깅 사용 -Updates...,Обновления…,更新...,更新...,更新...,업데이트… -Check for Updates...,Проверить обновления…,检查更新,檢查更新,更新プログラムの確認...,업데이트 확인하기… -Check for Updates at Startup,Проверять при запуске,启动时检查更新,啟動時檢查更新,起動時に更新プログラムを確認,시스템 시작 시 업데이트 확인하기 -Check Pre-release Version,Проверять предрелизные версии,检查测试版更新,檢查發行前版本更新,先行開発版も確認,개발 버전 업데이트 확인하기 -Edit Hotkeys...,Горячие клавиши…,编辑快捷键...,編輯快速鍵...,ホットキーの編集...,단축키 수정… -About...,О программе…,关于...,關於...,Shadowsocks について...,정보… -Help,Помощь,帮助,說明,ヘルプ,도움말 -Quit,Выход,退出,結束,終了,종료 -Edit Servers,Редактирование серверов,编辑服务器,編輯伺服器,サーバーの編集,서버 수정 -Load Balance,Балансировка нагрузки,负载均衡,負載平衡,負荷分散,로드밸런싱 -High Availability,Высокая доступность,高可用,高可用性,高可用性,고가용성 -Choose by statistics,На основе статистики,根据统计,根據統計,統計で選ぶ,통계 기반 -Show Plugin Output,События плагинов в журнале,显示插件输出,,,플러그인 출력 보이기 -Write translation template,Создать шаблон для перевода,写入翻译模板,,,번역 템플릿 쓰기 -,,,,, -# Config Form,,,,, -,,,,, -Statistics configuration,Настройки статистики,统计配置,,,통계 설정 -&Add,Добавить,添加(&A),新增 (&A),新規 (&A),추가 (&A) -&Delete,Удалить,删除(&D),移除 (&D),削除 (&D),삭제 (&D) -Dupli&cate,Дублир-ть,复制(&C),複製 (&C),コピー (&C),복제 (&C) -Server,Сервер,服务器,伺服器,サーバー,서버 -Server IP,IP-адрес,服务器地址,伺服器位址,サーバーアドレス,서버 IP -Server Port,Порт,服务器端口,伺服器連接埠,サーバーポート,서버 포트 -Password,Пароль,密码,密碼,パスワード,비밀번호 -Show Password,Показать пароль,显示密码,顯示密碼,パスワードを表示する,비밀번호 보이기 -Encryption,Шифрование,加密,加密,暗号化,암호화 -Plugin Program,Плагин,插件程序,外掛程式,プラグインプログラム,플러그인 프로그램 -Plugin Options,Опции плагина,插件选项,外掛程式選項,プラグインのオプション,플러그인 설정 -Need Plugin Argument,Требуются аргументы,需要命令行参数,,,플러그인 인자가 필요함 -Plugin Arguments,Аргументы,插件参数,外掛程式參數,プラグインの引数,플러그인 인자 -Proxy Port,Порт прокси,代理端口,Proxy 連接埠,プロキシポート,프록시 포트 -Portable Mode,Переносимый режим,便携模式,便攜模式,ポータブルモード,Portable 모드 -Restart required,Требуется перезапуск программы,需要重新启动SS,需要重新啟動SS,再起動SSが必要,재시작 필요함 -Remarks,Примечания,备注,註解,付記,알림 -Timeout(Sec),Таймаут(сек),超时(秒),逾時 (秒),タイムアウト (秒),시간 초과 (초) -OK,ОК,确定,確定,OK,확인 -Cancel,Отмена,取消,取消,キャンセル,취소 -Apply,Применить,应用,應用,適用,적용 -New server,Новый сервер,未配置的服务器,新伺服器,新規サーバー,새 서버 -Move &Up,Выше,上移(&U),上移 (&U),上に移動 (&U),위로 (&U) -Move D&own,Ниже,下移(&O),下移 (&O),下に移動 (&O),아래로 (&O) -deprecated,Устаревшее,不推荐,不推薦,非推奨,더 이상 사용되지 않음 -"Encryption method {0} not exist, will replace with {1}",,加密方法{0}不存在,将使用{1}代替,,,{0} 암호화 방식이 존재하지 않으므로 {1}로 대체될 것입니다. -,,,,, -#Statistics Config,,,,, -,,,,, -Enable Statistics,Включить сбор статистики,启用统计,,,통계 활성화 -Ping Test,Проверка связи (Ping),Ping测试,,,Ping 테스트 -packages everytime,пакета на проверку,个包/次,,,시간 당 패킷 -By hour of day,Ежечасно,按照每天的小时数统计,,,매 시간 -Collect data per,Собирать данные за,收集数据每,,,데이터 수집 기간 -Keep choice for,Хранить отбор данных за,保持选择每,,,설정 유지하기 -minutes,мин.,分钟,,,분 -Final Score:,Финальная оценка:,总分:,,,최종 점수: -AverageLatency,СредЗадержка,平均延迟,,,평균 지연시간 -MinLatency,МинЗадержка,最小延迟,,,최소 지연시간 -MaxLatency,МаксЗадержка,最大延迟,,,최대 지연시간 -AverageInboundSpeed,СредВходСкорость,平均入站速度,,,평균 인바운드 속도 -MinInboundSpeed,МинВходСкорость,最小入站速度,,,최소 인바운드 속도 -MaxInboundSpeed,СредВходСкорость,最大入站速度,,,최대 인바운드 속도 -AverageOutboundSpeed,СредИсхСкорость,平均出站速度,,,평균 아웃바운드 속도 -MinOutboundSpeed,МинИсхСкорость,最小出站速度,,,최소 아웃바운드 속도 -MaxOutboundSpeed,МаксИсхСкорость,最大出站速度,,,최대 아웃바운드 속도 -AverageResponse,СредВремяОтвета,平均响应速度,,,평균 응답 -MinResponse,МинВремяОтвета,最小响应速度,,,최소 응답 -MaxResponse,МаксВремяОтвета,最大响应速度,,,최대 응답 -PackageLoss,ПотериПакетов,丢包率,,,패킷 손실 -Speed,Скорость,速度,,,속도 -Package Loss,Потери пакетов,丢包率,,,패킷 손실 -Ping,Ping,网络延迟,,,Ping -Chart Mode,График,图表模式,,,차트 모드 -24h,24ч,24小时,,,24시간 -all,За все время,全部,,,전체 -,,,,, -# Proxy Form,,,,, -,,,,, -Edit Proxy,Редактирование прокси,代理设置,編輯 Proxy,プロキシの編集,프록시 수정 -Use Proxy,Использовать прокси,使用代理,使用 Proxy,プロキシを利用する,프록시 사용 -Proxy Type,Тип прокси,代理类型,Proxy 類型,プロキシの種類,프록시 종류 -Proxy Addr,Адрес прокси,代理地址,Proxy 位址,プロキシアドレス,프록시 주소 -Proxy Port,Порт прокси,代理端口,Proxy 連接埠,プロキシポート,프록시 포트 -"If server has a plugin, proxy will not be used","Если сервер использует плагины, прокси НЕ будет использоваться",若服务器含有插件,代理将不被使用,若伺服器含有外掛程式,Proxy 將不被使用,サーバーにプラグインがある場合、プロキシは利用されません,서버에 플러그인이 설치 되어 있는 경우 프록시를 사용할 수 없습니다. -Use Auth,Требуется авторизация,使用认证,使用認證,認証を利用する,서버 증명(Auth) 사용 -User Name,Пользователь,用户名,認證用戶,認証ユーザ,사용자 이름 -Auth Pwd,Пароль,认证密码,認證口令,認証パスワード,비밀번호 -,,,,, -# Log Form,,,,, -,,,,, -&File,Файл,文件(&F),檔案 (&F),ファイル (&F),파일 (&F) -&Open Location,Расположение файла,在资源管理器中打开(&O),在檔案總管中開啟 (&O),ファイルの場所を開く (&O),위치 열기 (&O) -E&xit,Выход,退出(&X),結束 (&X),終了 (&X),종료 (&X) -&View,Вид,视图(&V),檢視 (&V),表示 (&V),보기 (&V) -&Clear Logs,Очистить журнал,清空日志(&C),清除記錄檔 (&C),ログの削除 (&C),로그 초기화 (&C) -Change &Font,Шрифт…,设置字体(&F),變更字型 (&F),フォント (&F),글꼴 변경 (&F) -&Wrap Text,Перенос строк,自动换行(&W),自動換行 (&W),右端で折り返す (&W),텍스트 감싸기 (&W) -&Top Most,Поверх всех окон,置顶(&T),置頂 (&T),常に最前面に表示 (&T),상단 우선 (Top Most) (&T) -&Show Toolbar,Панель инструментов,显示工具栏(&S),顯示工具列 (&S),ツールバーの表示 (&S),툴바 보여주기 (&S) -Log Viewer,Просмотр журнала,日志查看器,記錄檔檢視器,ログビューア,로그 뷰어 -Inbound,Входящая,入站,輸入,受信,"인바운드 (Rx, 다운로드)" -Outbound,Исходящая,出站,輸出,送信,"아웃바운드 (Tx, 업로드)" -,,,,, -# QRCode Form,,,,, -,,,,, -QRCode and URL,QRCode и URL,二维码与 URL,QR 碼與 URL,QR コードと URL,QR코드와 URL -,,,,, -# PAC Url Form,,,,, -,,,,, -Edit Online PAC URL,Изменение URL удаленного PAC,编辑在线 PAC 网址,編輯線上 PAC 網址,オンライン PAC URL の編集,온라인 프록시 자동 구성 URL 수정 -Edit Online PAC URL...,Редактировать URL удаленного PAC…,编辑在线 PAC 网址...,編輯線上 PAC 網址...,オンライン PAC URL の編集...,온라인 프록시 자동 구성 URL 수정… -Please input PAC Url,Введите URL адрес для PAC-файла,请输入 PAC 网址,請輸入 PAC 網址,PAC URLを入力して下さい,프록시 자동 구성 URL을 입력하세요 -,,,,, -# HotkeySettings Form,,,,, -,,,,, -Switch system proxy,ВКЛ/ВЫКЛ системный прокси-сервер,切换系统代理状态,切換系統 Proxy 狀態,システム プロキシの状態を切り替える,시스템 프록시 전환 -Switch system proxy mode,Переключение режима прокси-сервера,切换系统代理模式,切換系統 Proxy 模式,プロキシモードを切り替える,시스템 프록시 모드 전환 -Allow Clients from LAN,Общий доступ к подключению,切换局域网共享,切換區域網路共用,LAN からのアクセスの許可を切り替える,LAN으로부터 클라이언트 허용 -Show Logs...,Просмотр журналов,显示日志,顯示記錄檔,ログの表示,로그 보기… -Switch to previous server,Переключить на пред. сервер,切换上个服务器,切換上一個伺服器,前のサーバーに切り替える,이전 서버로 전환 -Switch to next server,Переключить на след. сервер,切换下个服务器,切換下一個伺服器,次のサーバーに切り替える,다음 서버로 전환 -Reg All,Применить все,注册全部快捷键,註冊所有快速鍵,全部登録する,모두 등록 -Reg Hotkeys At Startup,Применять при запуске программы,启动时注册快捷键,啟動時註冊快速鍵,起動時にホットキーを登録する,시스템 시작 시 단축키 등록 -,,,,, -# Messages,,,,, -,,,,, -Shadowsocks Error: {0},Ошибка Shadowsocks: {0},Shadowsocks 错误: {0},Shadowsocks 錯誤: {0},Shadowsocks エラー: {0},Shadowsocks 오류: {0} -Port {0} already in use,Порт {0} уже используется,端口 {0} 已被占用,連接埠號碼 {0} 已被使用,ポート番号 {0} は既に使用されています。,{0}번 포트는 이미 사용 중입니다. -Port {0} is reserved by system,Порт {0} зарезервирован системой,端口 {0} 是系统保留端口,連接埠號碼 {0} 由系統保留, ポート番号 {0} はシステムによって予約されています,{0}번 포트는 시스템에서 사용 중입니다. -Invalid server address,Неверный адрес сервера,非法服务器地址,無效伺服器位址,サーバーアドレスが無効です。,올바르지 않은 서버 주소입니다. -Illegal port number format,Неверный числовой формат порта,非法端口格式,無效連接埠號碼格式,ポート番号のフォーマットが無効です。,올바르지 않은 포트 번호 형식입니다. -Illegal timeout format,Неверный формат таймаута,非法超时格式,無效逾時格式,タイムアウト値のフォーマットが無効です。,올바르지 않은 시간 초과 형식입니다. -Server IP can not be blank,IP-адрес сервера не может быть пустым,服务器 IP 不能为空,伺服器 IP 不能為空,サーバー IP が指定されていません。,서버 IP를 입력하세요. -Password can not be blank,Пароль не может быть пустым,密码不能为空,密碼不能為空,パスワードが指定されていません。,비밀번호를 입력하세요. -Port out of range,Порт выходит за допустимый диапазон,端口超出范围,連接埠號碼超出範圍,ポート番号は範囲外です。,올바른 포트 범위가 아닙니다. -Port can't be 8123,Адрес порта 8123 не может быть использован,端口不能为 8123,連接埠號碼不能為 8123,8123 番以外のポート番号を指定して下さい。,8123번 포트는 사용할 수 없습니다. -Shadowsocks {0} Update Found,Обнаружена новая версия Shadowsocks: {0},Shadowsocks {0} 更新,Shadowsocks {0} 更新,Shadowsocks バージョン {0} は利用できます。,Shadowsocks {0} 업데이트가 있습니다. -No update is available,Обновлений не обнаружено,没有可用的更新,沒有可用的更新,お使いのバージョンは最新です。,사용 가능한 업데이트가 없습니다. -Click here to update,Нажмите сюда для обновления,点击这里升级,點按此處升級,クリックしてアップデートします。,여기를 클릭하여 업데이트 -Shadowsocks is here,Shadowsocks находится здесь,Shadowsocks 在这里,Shadowsocks 在這裡,Shadowsocks はここです。,Shadowsocks는 여기에 있습니다 -You can turn on/off Shadowsocks in the context menu,Вы можете управлять Shadowsocks из контекстного меню,可以在右键菜单中开关 Shadowsocks,可以在右鍵選項單中開關 Shadowsocks,コンテキストメニューを使って、Shadowsocks を有効または無効にすることができます。,프로그램 메뉴에서 Shadowsocks를 끄고 켤 수 있습니다. -System Proxy Enabled,Системный прокси включен,系统代理已启用,系統 Proxy 已啟用,システム プロキシが有効です。,시스템 프록시가 활성화되었습니다. -System Proxy Disabled,Системный прокси отключен,系统代理未启用,系統 Proxy 未啟用,システム プロキシが無効です。,시스템 프록시가 비활성화되었습니다. -Failed to update PAC file ,Не удалось обновить PAC файл,更新 PAC 文件失败,更新 PAC 檔案失敗,PAC の更新に失敗しました。,PAC 파일을 업데이트하는데 실패했습니다. -PAC updated,PAC файл обновлен,更新 PAC 成功,更新 PAC 成功,PAC を更新しました。,PAC 파일이 업데이트되었습니다. -No updates found. Please report to GFWList if you have problems with it.,Обновлений не найдено. Сообщите авторам GFWList если у вас возникли проблемы.,未发现更新。如有问题请提交给 GFWList。,未發現更新。如有問題請報告至 GFWList。,お使いのバージョンは最新です。問題がある場合は、GFWList に報告して下さい。,사용 가능한 업데이트를 찾지 못했습니다. 문제가 있다면 GFWList로 전송해주세요. -No QRCode found. Try to zoom in or move it to the center of the screen.,QRCode не обнаружен. Попробуйте увеличить изображение или переместить его в центр экрана.,未发现二维码,尝试把它放大或移动到靠近屏幕中间的位置,未發現 QR 碼,嘗試把它放大或移動到靠近熒幕中間的位置,QR コードが見つかりませんでした。コードを大きくするか、画面の中央に移動して下さい。,QR코드를 찾을 수 없습니다. 가운데로 화면을 이동시키거나 확대해보세요. -Shadowsocks is already running.,Shadowsocks уже запущен.,Shadowsocks 已经在运行。,Shadowsocks 已經在執行。,Shadowsocks 実行中,Shadowsocks가 이미 실행 중입니다. -Find Shadowsocks icon in your notify tray.,Значок Shadowsocks можно найти в области уведомлений.,请在任务栏里寻找 Shadowsocks 图标。,請在工作列裡尋找 Shadowsocks 圖示。,通知領域には Shadowsocks のアイコンがあります。,트레이에서 Shadowsocks를 찾아주세요. -"If you want to start multiple Shadowsocks, make a copy in another directory.","Если вы хотите запустить несколько копий Shadowsocks одновременно, создайте отдельную папку на каждую копию.",如果想同时启动多个,可以另外复制一份到别的目录。,如果想同時啟動多個,可以另外複製一份至別的目錄。,複数起動したい場合は、プログラムファイルを別のフォルダーにコピーしてから、もう一度実行して下さい。,"만약 여러 개의 Shadowsocks를 사용하고 싶으시다면, 파일을 다른 곳에 복사해주세요." -Failed to decode QRCode,Не удалось распознать QRCode,无法解析二维码,QR 碼解碼失敗,QR コードの読み取りに失敗しました。,QR코드를 해석하는데에 실패했습니다. -Failed to update registry,Не удалось обновить запись в реестре,无法修改注册表,無法修改登錄檔,レジストリの更新に失敗しました。,레지스트리를 업데이트하는데에 실패했습니다. -System Proxy On: ,Системный прокси:,系统代理已启用:,系統 Proxy 已啟用:,システム プロキシが有効:,시스템 프록시 활성화됨: -Running: Port {0},Запущен на порту {0},正在运行:端口 {0},正在執行:連接埠號碼 {0},実行中:ポート {0},실행 중: 포트 {0}번 -"Unexpected error, shadowsocks will exit. Please report to","Непредвиденная ошибка, пожалуйста сообщите на",非预期错误,Shadowsocks将退出。请提交此错误到,非預期錯誤,Shadowsocks 將結束。請報告此錯誤至,予想外のエラーが発生したため、Shadowsocks を終了します。詳しくは下記までお問い合わせ下さい:,알 수 없는 오류로 Shadowsocks가 종료됩니다. 오류를 제보해주세요: -"Unsupported operating system, use Windows Vista at least.","Операционная система не поддерживается, минимальные системные требования: Windows Vista или выше.",不支持的操作系统版本,最低需求为Windows Vista。,不支援的作業系統版本,最低需求為 Windows Vista。,お使いの OS はサポートされていません。Windows Vista 以降の OS で実行して下さい。,지원하지 않는 운영체제입니다. 최소 Windows Vista가 필요합니다. -"Unsupported .NET Framework, please update to {0} or later.","Версия .NET Framework не поддерживается, минимальные системные требования: {0} или выше.",当前 .NET Framework 版本过低,请升级至{0}或更新版本。,目前 .NET Framework 版本過低,最低需求為{0}。,お使いの .NET Framework はサポートされていません。{0} 以降のバンジョーをインストールして下さい。,지원하지 않는 .NET 프레임워크입니다. {0} 또는 상위 버전으로 업데이트해주세요. -Proxy request failed,Не удалось выполнить запрос,代理请求失败,Proxy 要求失敗,プロキシ要求が失敗しました。,프록시 요청에 실패했습니다. -Proxy handshake failed,Не удалось выполнить хэндшейк,代理握手失败,Proxy 交握失敗,プロキシ ハンドシェイクに失敗しました。,프록시 핸드쉐이크에 실패했습니다. -Register hotkey failed,Не удалось применить настройки горячих клавиш,注册快捷键失败,註冊快速鍵失敗,ホットキーの登錄に失敗しました。,단축키 등록에 실패했습니다. -Cannot parse hotkey: {0},Не удалось распознать следующие горячие клавиши: {0},解析快捷键失败: {0},剖析快速鍵失敗: {0},ホットキーを解析できません: {0},단축키를 해석할 수 없습니다: {0} -"Timeout is invalid, it should not exceed {0}",Таймаут не может превышать значение {0},超时无效,不应超过 {0},逾時無效,不應超過 {0},タイムアウト値が無効です。{0} 以下の値を指定して下さい。,"올바르지 않은 시간 초과 설정입니다, {0}을 초과하지 않아야 합니다." -Cannot find the plugin program file,Файл плагина не найден,找不到插件程序文件,找不到外掛程式文件,,플러그인 프로그램 파일을 찾을 수 없습니다. -,,,,, -Operation failure,Операция завершилась неудачей,操作失败,,,작업에 실패했습니다. -Auto save failed,Автоматическое сохранение не удалось,自动保存失败,,,자동 저장에 실패했습니다. -Whether to discard unconfigured servers,Внесенные изменения будут утеряны,是否丢弃未配置的服务器,,,구성되지 않은 서버 설정 변경 사항을 폐기하시겠습니까? -"Invalid server address, Cannot automatically save or discard changes",Неверный адрес сервера. Невозможно сохранить или отменить изменения,非法服务器地址,无法自动保存,是否丢弃修改,,,"서버 주소가 올바르지 않아 자동 저장 할 수 없습니다, 변경 사항을 폐기하시겠습니까?" -"Illegal port number format, Cannot automatically save or discard changes",Неверный числовой адрес порта. Невозможно сохранить или отменить изменения,非法端口格式,无法自动保存,是否丢弃修改,,,"포트 번호가 올바르지 않아 자동 저장 할 수 없습니다, 변경 사항을 폐기하시겠습니까?" -"Password can not be blank, Cannot automatically save or discard changes",Пароль не может быть пустым. Невозможно сохранить или отменить изменения,密码不能为空,无法自动保存,是否丢弃修改,,,"비밀번호를 입력하지 않아 자동 저장 할 수 없습니다, 변경 사항을 폐기하시겠습니까?" -"Illegal timeout format, Cannot automatically save or discard changes",Неверный формат таймаута. Невозможно сохранить или отменить изменения,非法超时格式,无法自动保存,是否丢弃修改,,,Timeout 형식이 올바르지 않아 자동 저장 할 수 없습니다. 변경 사항을 폐기하시겠습니까? -,,,,, -"Error occured when process proxy setting, do you want reset current setting and retry?",Произошла ошибка при обработке настроек. Хотите сбросить текущие настройки и попробовать снова?,处理代理设置时发生错误,是否重置当前代理设置并重试?,,,프록시 설정을 처리하는데에 오류가 발생했습니다. 현재 설정을 폐기하고 다시 시도하시겠습니까? -"Unrecoverable proxy setting error occured, see log for detail","Произошла серьезная ошибка, подробности можно узнать в журналах",发生不可恢复的代理设置错误,查看日志以取得详情,,,복구 불가능한 프록시 설정 오류가 발생했습니다. 자세한 정보는 로그를 참조하세요. -Auth user can not be blank,Пользователь не может быть пустым,认证用户不能为空,認證用戶不能為空,認証ユーザが指定されていません。,증명 정보의 사용자 이름은 비어있을 수 없습니다. -Auth pwd can not be blank,Пароль не может быть пустым,认证密码不能为空,認證口令不能為空,認証パスワードが指定されていません。,증명 정보의 비밀번호는 비어있을 수 없습니다. +en,ru-RU,zh-CN,zh-TW,ja,ko,fr +#Restart program to apply translation,,,,,, +#This is comment line,,,,,, +#Always keep language name at head of file,,,,,, +#Language name is output in log,,,,,, +"#You can find it by search ""Current language is:""",,,,,, +#Please use UTF-8 with BOM encoding so we can edit it in Excel,,,,,, +,,,,,, +Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks +,,,,,, +#Menu,,,,,, +,,,,,, +System Proxy,Системный прокси-сервер,系统代理,系統代理,システムプロキシ,시스템 프록시,Proxy système +Disable,Отключен,禁用,禁用,無効,비활성화,Désactiver +PAC,Сценарий настройки (PAC),PAC 模式,PAC 模式,PAC,프록시 자동 구성 (PAC),PAC +Global,Для всей системы,全局模式,全局模式,全般,전역,Global +Servers,Серверы,服务器,伺服器,サーバー,서버,Serveurs +Edit Servers...,Редактировать серверы…,编辑服务器...,編輯伺服器...,サーバーの編集...,서버 수정…,Éditer serveurs… +Statistics Config...,Настройки статистики…,统计配置...,統計設定檔...,統計情報の設定...,통계 설정,Configuration des statistiques… +Start on Boot,Автозагрузка,开机启动,開機啟動,システムと同時に起動,시스템 시작 시에 시작하기,Démarrage automatique +Associate ss:// Links,Ассоциированный ss:// Ссылки,关联 ss:// 链接,關聯 ss:// 鏈接,,ss:// 링크 연결, +Forward Proxy...,Прямой прокси…,正向代理设置...,正向 Proxy 設定...,フォワードプロキシの設定...,포워드 프록시,Forward-proxy… +Allow other Devices to connect,Общий доступ к подключению,允许其他设备连入,允許其他裝置連入,他のデバイスからの接続を許可する,다른 기기에서 연결 허용,Autoriser d'autres appareils à se connecter +Local PAC,Локальный PAC,使用本地 PAC,使用本機 PAC,ローカル PAC,로컬 프록시 자동 구성,PAC local +Online PAC,Удаленный PAC,使用在线 PAC,使用線上 PAC,オンライン PAC,온라인 프록시 자동 구성,PAC en ligne +Edit Local PAC File...,Редактировать локальный PAC…,编辑本地 PAC 文件...,編輯本機 PAC 檔案...,ローカル PAC ファイルの編集...,로컬 프록시 자동 구성 파일 수정,Modifier le fichier PAC local ... +Update Local PAC from GFWList,Обновить локальный PAC из GFWList,从 GFWList 更新本地 PAC,從 GFWList 更新本機 PAC,GFWList からローカル PAC を更新,GFWList에서 로컬 프록시 자동 구성 파일 업데이트,Mettre à jour le PAC local à partir de GFWList +Edit User Rule for GFWList...,Редактировать свои правила для GFWList,编辑 GFWList 的用户规则...,編輯 GFWList 的使用者規則...,ユーザールールの編集...,GFWList 사용자 수정,Modifier la règle utilisateur pour GFWList ... +Secure Local PAC,Безопасный URL локального PAC,保护本地 PAC,安全本機 PAC,ローカル PAC を保護,로컬 프록시 자동 구성 파일 암호화,Sécuriser PAC local +Copy Local PAC URL,Копировать URL локального PAC,复制本地 PAC 网址,複製本機 PAC 網址,ローカル PAC URL をコピー,로컬 프록시 자동 구성 파일 URL 복사,Copier l'URL du PAC local +Share Server Config...,Поделиться конфигурацией сервера…,分享服务器配置...,分享伺服器設定檔...,サーバーの設定を共有...,서버 설정 공유,Partager la configuration du serveur ... +Scan QRCode from Screen...,Сканировать QRCode с экрана…,扫描屏幕上的二维码...,掃描螢幕上的 QR 碼...,画面から QR コードをスキャン...,화면에서 QR코드 스캔,Scanner le QRCode à partir de l'écran ... +Import URL from Clipboard...,Импорт адреса из буфера обмена…,从剪贴板导入URL...,從剪貼簿匯入 URL...,クリップボードから URL をインポート...,클립보드에서 URL 가져오기…,Importer l'URL du presse-papiers ... +Availability Statistics,Статистика доступности,统计可用性,統計可用性,可用性の統計,가용성 통계,Statistiques de disponibilité +Show Logs...,Показать журнал…,显示日志...,顯示記錄檔...,ログの表示...,로그 보기…,Afficher les journaux ... +Verbose Logging,Подробный журнал,详细记录日志,詳細資訊記錄,詳細なログを記録,자세한 로깅 사용,Journalisation détaillée +Updates...,Обновления…,更新...,更新...,更新...,업데이트…,Mettre à jour… +Check for Updates...,Проверить обновления…,检查更新,檢查更新,更新プログラムの確認...,업데이트 확인하기…,Vérifier les mises à jour ... +Check for Updates at Startup,Проверять при запуске,启动时检查更新,啟動時檢查更新,起動時に更新プログラムを確認,시스템 시작 시 업데이트 확인하기,Vérifier les mises à jour au démarrage +Check Pre-release Version,Проверять предрелизные версии,检查测试版更新,檢查發行前版本更新,先行開発版も確認,개발 버전 업데이트 확인하기,Vérifier la version préliminaire +Edit Hotkeys...,Горячие клавиши…,编辑快捷键...,編輯快速鍵...,ホットキーの編集...,단축키 수정…,Modifier les raccourcis clavier ... +About...,О программе…,关于...,關於...,Shadowsocks について...,정보…,A propos +Help,Помощь,帮助,說明,ヘルプ,도움말,Aide +Quit,Выход,退出,結束,終了,종료,Quitter +Edit Servers,Редактирование серверов,编辑服务器,編輯伺服器,サーバーの編集,서버 수정,Éditer serveurs +Load Balance,Балансировка нагрузки,负载均衡,負載平衡,負荷分散,로드밸런싱,Répartition de charge +High Availability,Высокая доступность,高可用,高可用性,高可用性,고가용성,Haute disponibilité +Choose by statistics,На основе статистики,根据统计,根據統計,統計で選ぶ,통계 기반,Choisissez par statistiques +Show Plugin Output,События плагинов в журнале,显示插件输出,,,플러그인 출력 보이기,Afficher la sortie du plugin +Write translation template,Создать шаблон для перевода,写入翻译模板,,,번역 템플릿 쓰기,Écrire un modèle de traduction +,,,,,, +# Config Form,,,,,, +,,,,,, +Statistics configuration,Настройки статистики,统计配置,,,통계 설정,Configuration des statistiques +&Add,Добавить,添加(&A),新增 (&A),新規 (&A),추가 (&A),Ajouter +&Delete,Удалить,删除(&D),移除 (&D),削除 (&D),삭제 (&D),Supprimer +Dupli&cate,Дублир-ть,复制(&C),複製 (&C),コピー (&C),복제 (&C),Dupliquer +Server,Сервер,服务器,伺服器,サーバー,서버,Serveur +Server IP,IP-адрес,服务器地址,伺服器位址,サーバーアドレス,서버 IP,Serveur IP +Server Port,Порт,服务器端口,伺服器連接埠,サーバーポート,서버 포트,Port de serveur +Password,Пароль,密码,密碼,パスワード,비밀번호,Mot de passe +Show Password,Показать пароль,显示密码,顯示密碼,パスワードを表示する,비밀번호 보이기,Montrer le mot de passe +Encryption,Шифрование,加密,加密,暗号化,암호화,Chiffrement +Plugin Program,Плагин,插件程序,外掛程式,プラグインプログラム,플러그인 프로그램,Programme de plugin +Plugin Options,Опции плагина,插件选项,外掛程式選項,プラグインのオプション,플러그인 설정,Options de plugin +Need Plugin Argument,Требуются аргументы,需要命令行参数,,,플러그인 인자가 필요함,Besoin d'un argument de plugin +Plugin Arguments,Аргументы,插件参数,外掛程式參數,プラグインの引数,플러그인 인자,Arguments du plugin +Proxy Port,Порт прокси,代理端口,Proxy 連接埠,プロキシポート,프록시 포트,Port proxy +Portable Mode,Переносимый режим,便携模式,便攜模式,ポータブルモード,포터블 모드,Mode portable +Restart required,Требуется перезапуск программы,需要重新启动SS,需要重新啟動SS,再起動SSが必要,재시작이 필요합니다,Redémarrage nécessaire +Remarks,Примечания,备注,註解,付記,알림,Remarques +Timeout(Sec),Таймаут(сек),超时(秒),逾時 (秒),タイムアウト (秒),시간 초과 (초),Délai d'attente(sec) +OK,ОК,确定,確定,OK,확인,OK +Cancel,Отмена,取消,取消,キャンセル,취소,Annuler +Apply,Применить,应用,應用,適用,적용,Appliquer +New server,Новый сервер,未配置的服务器,新伺服器,新規サーバー,새 서버,Nouveau serveur +Move &Up,Выше,上移(&U),上移 (&U),上に移動 (&U),위로 (&U),Monter +Move D&own,Ниже,下移(&O),下移 (&O),下に移動 (&O),아래로 (&O),Descendre +deprecated,Устаревшее,不推荐,不推薦,非推奨,더 이상 사용되지 않음,Obsolète +"Encryption method {0} not exist, will replace with {1}",,加密方法{0}不存在,将使用{1}代替,,,{0} 암호화 방식이 존재하지 않으므로 {1}로 대체될 것입니다.,"Méthode de chiffrement {0} n'existe pas, sera remplacée par {1}" +,,,,,, +#Statistics Config,,,,,, +,,,,,, +Enable Statistics,Включить сбор статистики,启用统计,,,통계 활성화,Activer statistiques +Ping Test,Проверка связи (Ping),Ping测试,,,Ping 테스트,Test ping +packages everytime,пакета на проверку,个包/次,,,시간 당 패킷,Packages à chaque fois +By hour of day,Ежечасно,按照每天的小时数统计,,,매 시간,Par heure du jour +Collect data per,Собирать данные за,收集数据每,,,데이터 수집 기간,Recueillir des données par +Keep choice for,Хранить отбор данных за,保持选择每,,,설정 유지하기,Gardez le choix pour +minutes,мин.,分钟,,,분,Minutes +Final Score:,Финальная оценка:,总分:,,,최종 점수:,Score final: +AverageLatency,СредЗадержка,平均延迟,,,평균 지연시간,LatenceMoyenne +MinLatency,МинЗадержка,最小延迟,,,최소 지연시간,MinLatence +MaxLatency,МаксЗадержка,最大延迟,,,최대 지연시간,MaxLatence +AverageInboundSpeed,СредВходСкорость,平均入站速度,,,평균 인바운드 속도,VitesseEntranteMoyenne +MinInboundSpeed,МинВходСкорость,最小入站速度,,,최소 인바운드 속도,MinVitesseEntrante +MaxInboundSpeed,СредВходСкорость,最大入站速度,,,최대 인바운드 속도,MaxVitesseEntrante +AverageOutboundSpeed,СредИсхСкорость,平均出站速度,,,평균 아웃바운드 속도,VitesseSortanteMoyenne +MinOutboundSpeed,МинИсхСкорость,最小出站速度,,,최소 아웃바운드 속도,MinVitesseSortante +MaxOutboundSpeed,МаксИсхСкорость,最大出站速度,,,최대 아웃바운드 속도,MaxVitesseSortante +AverageResponse,СредВремяОтвета,平均响应速度,,,평균 응답,RéponseMoyenne +MinResponse,МинВремяОтвета,最小响应速度,,,최소 응답,MinRéponse +MaxResponse,МаксВремяОтвета,最大响应速度,,,최대 응답,MaxRéponse +PackageLoss,ПотериПакетов,丢包率,,,패킷 손실,Perte de paquets +Speed,Скорость,速度,,,속도,Vitesse +Package Loss,Потери пакетов,丢包率,,,패킷 손실,Perte de paquets +Ping,Ping,网络延迟,,,Ping,Ping +Chart Mode,График,图表模式,,,차트 모드,Mode graphique +24h,24ч,24小时,,,24시간,24h +all,За все время,全部,,,전체,tout +,,,,,, +# Proxy Form,,,,,, +,,,,,, +Edit Proxy,Редактирование прокси,代理设置,編輯 Proxy,プロキシの編集,프록시 수정,Modifier le proxy +Use Proxy,Использовать прокси,使用代理,使用 Proxy,プロキシを利用する,프록시 사용,Utiliser un proxy +Proxy Type,Тип прокси,代理类型,Proxy 類型,プロキシの種類,프록시 종류,Type de proxy +Proxy Addr,Адрес прокси,代理地址,Proxy 位址,プロキシアドレス,프록시 주소,Adresse de proxy +Proxy Port,Порт прокси,代理端口,Proxy 連接埠,プロキシポート,프록시 포트,Port de proxy +"If server has a plugin, proxy will not be used","Если сервер использует плагины, прокси НЕ будет использоваться",若服务器含有插件,代理将不被使用,若伺服器含有外掛程式,Proxy 將不被使用,サーバーにプラグインがある場合、プロキシは利用されません,서버에 플러그인이 설치 되어 있는 경우 프록시를 사용할 수 없습니다.,"Si le serveur a un plugin, le proxy ne sera pas utilisé" +Use Auth,Требуется авторизация,使用认证,使用認證,認証を利用する,서버 인증 사용,Utiliser l'authentification +User Name,Пользователь,用户名,認證用戶,認証ユーザ,사용자 이름,Nom d'utilisateur +Auth Pwd,Пароль,认证密码,認證口令,認証パスワード,비밀번호,Mot de passe d'authentification +,,,,,, +# Log Form,,,,,, +,,,,,, +&File,Файл,文件(&F),檔案 (&F),ファイル (&F),파일 (&F),Fichier +&Open Location,Расположение файла,在资源管理器中打开(&O),在檔案總管中開啟 (&O),ファイルの場所を開く (&O),위치 열기 (&O),Ouvrier +E&xit,Выход,退出(&X),結束 (&X),終了 (&X),종료 (&X),Quitter +&View,Вид,视图(&V),檢視 (&V),表示 (&V),보기 (&V),Afficher +&Clear Logs,Очистить журнал,清空日志(&C),清除記錄檔 (&C),ログの削除 (&C),로그 초기화 (&C),Effacer les journaux +Change &Font,Шрифт…,设置字体(&F),變更字型 (&F),フォント (&F),글꼴 변경 (&F),Définir la police +&Wrap Text,Перенос строк,自动换行(&W),自動換行 (&W),右端で折り返す (&W),텍스트 감싸기 (&W),Retour à la ligne +&Top Most,Поверх всех окон,置顶(&T),置頂 (&T),常に最前面に表示 (&T),상단 우선 (Top Most) (&T),Metter en haut +&Show Toolbar,Панель инструментов,显示工具栏(&S),顯示工具列 (&S),ツールバーの表示 (&S),툴바 보여주기 (&S),Afficher la barre d'outils +Log Viewer,Просмотр журнала,日志查看器,記錄檔檢視器,ログビューア,로그 뷰어,Visionneuse de journaux +Inbound,Входящая,入站,輸入,受信,"인바운드 (Rx, 다운로드)",Entrant +Outbound,Исходящая,出站,輸出,送信,"아웃바운드 (Tx, 업로드)",Sortant +,,,,,, +# QRCode Form,,,,,, +,,,,,, +QRCode and URL,QRCode и URL,二维码与 URL,QR 碼與 URL,QR コードと URL,QR코드와 URL,QRCode et URL +,,,,,, +# PAC Url Form,,,,,, +,,,,,, +Edit Online PAC URL,Изменение URL удаленного PAC,编辑在线 PAC 网址,編輯線上 PAC 網址,オンライン PAC URL の編集,온라인 프록시 자동 구성 URL 수정,Modifier l'URL du PAC en ligne +Edit Online PAC URL...,Редактировать URL удаленного PAC…,编辑在线 PAC 网址...,編輯線上 PAC 網址...,オンライン PAC URL の編集...,온라인 프록시 자동 구성 URL 수정…,Modifier l'URL du PAC en ligne ... +Please input PAC Url,Введите URL адрес для PAC-файла,请输入 PAC 网址,請輸入 PAC 網址,PAC URLを入力して下さい,프록시 자동 구성 URL을 입력하세요,Veuillez saisir l'URL PAC +,,,,,, +# HotkeySettings Form,,,,,, +,,,,,, +Switch system proxy,ВКЛ/ВЫКЛ системный прокси-сервер,切换系统代理状态,切換系統 Proxy 狀態,システム プロキシの状態を切り替える,시스템 프록시 전환,Changer l'état de proxy système +Switch system proxy mode,Переключение режима прокси-сервера,切换系统代理模式,切換系統 Proxy 模式,プロキシモードを切り替える,시스템 프록시 모드 전환,Changer le mode de proxy système +Allow Clients from LAN,Общий доступ к подключению,切换局域网共享,切換區域網路共用,LAN からのアクセスの許可を切り替える,LAN으로부터 클라이언트 허용,Autoriser les clients du LAN +Show Logs...,Просмотр журналов,显示日志,顯示記錄檔,ログの表示,로그 보기…,Afficher les journaux +Switch to previous server,Переключить на пред. сервер,切换上个服务器,切換上一個伺服器,前のサーバーに切り替える,이전 서버로 전환,Passer au serveur précédent +Switch to next server,Переключить на след. сервер,切换下个服务器,切換下一個伺服器,次のサーバーに切り替える,다음 서버로 전환,Passer au serveur suivant +Reg All,Применить все,注册全部快捷键,註冊所有快速鍵,全部登録する,모두 등록,Enregistrer tout +Reg Hotkeys At Startup,Применять при запуске программы,启动时注册快捷键,啟動時註冊快速鍵,起動時にホットキーを登録する,시스템 시작 시 단축키 등록,Enregistrer tout au démarrage +,,,,,, +# Messages,,,,,, +,,,,,, +Shadowsocks Error: {0},Ошибка Shadowsocks: {0},Shadowsocks 错误: {0},Shadowsocks 錯誤: {0},Shadowsocks エラー: {0},Shadowsocks 오류: {0},Erreur shadowsocks: {0} +Port {0} already in use,Порт {0} уже используется,端口 {0} 已被占用,連接埠號碼 {0} 已被使用,ポート番号 {0} は既に使用されています。,{0}번 포트는 이미 사용 중입니다.,Port {0} déjà utilisé +Port {0} is reserved by system,Порт {0} зарезервирован системой,端口 {0} 是系统保留端口,連接埠號碼 {0} 由系統保留, ポート番号 {0} はシステムによって予約されています,{0}번 포트는 시스템에서 사용 중입니다.,Port {0} réservé par le système +Invalid server address,Неверный адрес сервера,非法服务器地址,無效伺服器位址,サーバーアドレスが無効です。,올바르지 않은 서버 주소입니다.,Adresse de serveur non valide +Illegal port number format,Неверный числовой формат порта,非法端口格式,無效連接埠號碼格式,ポート番号のフォーマットが無効です。,올바르지 않은 포트 번호 형식입니다.,Format de numéro de port illégal +Illegal timeout format,Неверный формат таймаута,非法超时格式,無效逾時格式,タイムアウト値のフォーマットが無効です。,올바르지 않은 시간 초과 형식입니다.,Format de délai d'attente illégal +Server IP can not be blank,IP-адрес сервера не может быть пустым,服务器 IP 不能为空,伺服器 IP 不能為空,サーバー IP が指定されていません。,서버 IP는 비어있으면 안됩니다.,L'adresse IP du serveur ne peut pas être vide +Password can not be blank,Пароль не может быть пустым,密码不能为空,密碼不能為空,パスワードが指定されていません。,비밀번호는 비어있으면 안됩니다.,Le mot de passe ne peut pas être vide +Port out of range,Порт выходит за допустимый диапазон,端口超出范围,連接埠號碼超出範圍,ポート番号は範囲外です。,올바른 포트 범위가 아닙니다.,Port hors de portée +Port can't be 8123,Адрес порта 8123 не может быть использован,端口不能为 8123,連接埠號碼不能為 8123,8123 番以外のポート番号を指定して下さい。,8123번 포트는 사용할 수 없습니다.,Le port ne peut pas être 8123 +Shadowsocks {0} Update Found,Обнаружена новая версия Shadowsocks: {0},Shadowsocks {0} 更新,Shadowsocks {0} 更新,Shadowsocks バージョン {0} は利用できます。,Shadowsocks {0} 업데이트가 있습니다.,Shadowsocks {0} Mise à jour trouvée +No update is available,Обновлений не обнаружено,没有可用的更新,沒有可用的更新,お使いのバージョンは最新です。,사용 가능한 업데이트가 없습니다.,Aucune mise à jour n'est disponible +Click here to update,Нажмите сюда для обновления,点击这里升级,點按此處升級,クリックしてアップデートします。,여기를 클릭하여 업데이트,Cliquez ici pour mettre à jour +Shadowsocks is here,Shadowsocks находится здесь,Shadowsocks 在这里,Shadowsocks 在這裡,Shadowsocks はここです。,Shadowsocks는 여기에 있습니다,Veuillez trouver Shadowsocks ici +You can turn on/off Shadowsocks in the context menu,Вы можете управлять Shadowsocks из контекстного меню,可以在右键菜单中开关 Shadowsocks,可以在右鍵選項單中開關 Shadowsocks,コンテキストメニューを使って、Shadowsocks を有効または無効にすることができます。,프로그램 메뉴에서 Shadowsocks를 끄고 켤 수 있습니다.,Vous pouvez activer / désactiver Shadowsocks dans le menu contextuel +System Proxy Enabled,Системный прокси включен,系统代理已启用,系統 Proxy 已啟用,システム プロキシが有効です。,시스템 프록시가 활성화되었습니다.,Proxy système activé +System Proxy Disabled,Системный прокси отключен,系统代理未启用,系統 Proxy 未啟用,システム プロキシが無効です。,시스템 프록시가 비활성화되었습니다.,Proxy système désactivé +Failed to update PAC file ,Не удалось обновить PAC файл,更新 PAC 文件失败,更新 PAC 檔案失敗,PAC の更新に失敗しました。,프록시 자동 구성 파일을 업데이트하는데 실패했습니다.,Impossible de mettre à jour le fichier PAC +PAC updated,PAC файл обновлен,更新 PAC 成功,更新 PAC 成功,PAC を更新しました。,프록시 자동 구성 파일이 업데이트되었습니다.,PAC mis à jour +No updates found. Please report to GFWList if you have problems with it.,Обновлений не найдено. Сообщите авторам GFWList если у вас возникли проблемы.,未发现更新。如有问题请提交给 GFWList。,未發現更新。如有問題請報告至 GFWList。,お使いのバージョンは最新です。問題がある場合は、GFWList に報告して下さい。,사용 가능한 업데이트를 찾지 못했습니다. 문제가 있다면 GFWList로 전송해주세요.,Aucune mise à jour trouvée. Veuillez signaler à GFWList si vous avez des problèmes concernant. +No QRCode found. Try to zoom in or move it to the center of the screen.,QRCode не обнаружен. Попробуйте увеличить изображение или переместить его в центр экрана.,未发现二维码,尝试把它放大或移动到靠近屏幕中间的位置,未發現 QR 碼,嘗試把它放大或移動到靠近熒幕中間的位置,QR コードが見つかりませんでした。コードを大きくするか、画面の中央に移動して下さい。,QR코드를 찾을 수 없습니다. 가운데로 화면을 이동시키거나 확대해보세요.,Aucun QRCode trouvé. Essayez de zoomer ou de le déplacer vers le centre de l'écran. +Shadowsocks is already running.,Shadowsocks уже запущен.,Shadowsocks 已经在运行。,Shadowsocks 已經在執行。,Shadowsocks 実行中,Shadowsocks가 이미 실행 중입니다.,Shadowsocks est déjà en cours d'exécution. +Find Shadowsocks icon in your notify tray.,Значок Shadowsocks можно найти в области уведомлений.,请在任务栏里寻找 Shadowsocks 图标。,請在工作列裡尋找 Shadowsocks 圖示。,通知領域には Shadowsocks のアイコンがあります。,트레이에서 Shadowsocks를 찾아주세요.,Trouvez l'icône Shadowsocks dans votre barre de notification. +"If you want to start multiple Shadowsocks, make a copy in another directory.","Если вы хотите запустить несколько копий Shadowsocks одновременно, создайте отдельную папку на каждую копию.",如果想同时启动多个,可以另外复制一份到别的目录。,如果想同時啟動多個,可以另外複製一份至別的目錄。,複数起動したい場合は、プログラムファイルを別のフォルダーにコピーしてから、もう一度実行して下さい。,"만약 여러 개의 Shadowsocks를 사용하고 싶으시다면, 파일을 다른 곳에 복사해주세요.","Si vous souhaitez démarrer plusieurs Shadowsocks, faites une copie dans un autre répertoire." +Failed to decode QRCode,Не удалось распознать QRCode,无法解析二维码,QR 碼解碼失敗,QR コードの読み取りに失敗しました。,QR코드를 해석하는데에 실패했습니다.,Impossible de décoder le QRCode +Failed to update registry,Не удалось обновить запись в реестре,无法修改注册表,無法修改登錄檔,レジストリの更新に失敗しました。,레지스트리를 업데이트하는데에 실패했습니다.,Impossible de mettre à jour de la base de registre +Import from URL: {0} ?,импортировать из адреса: {0} ?,从URL导入: {0} ?,從URL匯入: {0} ?,,, +Successfully imported from {0},Успешно импортировано из {0},导入成功:{0},導入成功:{0},,, +Failed to import. Please check if the link is valid.,,导入失败,请检查链接是否有效。,導入失敗,請檢查鏈接是否有效。,,, +System Proxy On: ,Системный прокси:,系统代理已启用:,系統 Proxy 已啟用:,システム プロキシが有効:,시스템 프록시 활성화됨: ,Proxy système activé: +Running: Port {0},Запущен на порту {0},正在运行:端口 {0},正在執行:連接埠號碼 {0},実行中:ポート {0},실행 중: 포트 {0}번,En cours d'exécution: port {0} +"Unexpected error, shadowsocks will exit. Please report to","Непредвиденная ошибка, пожалуйста сообщите на",非预期错误,Shadowsocks将退出。请提交此错误到,非預期錯誤,Shadowsocks 將結束。請報告此錯誤至,予想外のエラーが発生したため、Shadowsocks を終了します。詳しくは下記までお問い合わせ下さい:,알 수 없는 오류로 Shadowsocks가 종료될 것입니다. 오류를 여기로 제보해주세요:,Shadowsocks va quitter en présence d/érreur inattendue. Veuillez signaler à +"Unsupported operating system, use Windows Vista at least.","Операционная система не поддерживается, минимальные системные требования: Windows Vista или выше.",不支持的操作系统版本,最低需求为Windows Vista。,不支援的作業系統版本,最低需求為 Windows Vista。,お使いの OS はサポートされていません。Windows Vista 以降の OS で実行して下さい。,지원하지 않는 운영체제입니다. 최소 Windows Vista가 필요합니다.,"Système d'exploitation incompatible, veuillez utiliser Windows Vista ou ultérieure." +"Unsupported .NET Framework, please update to {0} or later.","Версия .NET Framework не поддерживается, минимальные системные требования: {0} или выше.",当前 .NET Framework 版本过低,请升级至{0}或更新版本。,目前 .NET Framework 版本過低,最低需求為{0}。,お使いの .NET Framework はサポートされていません。{0} 以降のバンジョーをインストールして下さい。,지원하지 않는 .NET 프레임워크입니다. {0} 또는 상위 버전으로 업데이트해주세요.,".NET Framework incompatible, veuillez mettre à jour vers {0} ou ultérieure." +Proxy request failed,Не удалось выполнить запрос,代理请求失败,Proxy 要求失敗,プロキシ要求が失敗しました。,프록시 요청에 실패했습니다.,Échec de la demande de proxy +Proxy handshake failed,Не удалось выполнить хэндшейк,代理握手失败,Proxy 交握失敗,プロキシ ハンドシェイクに失敗しました。,프록시 핸드쉐이크에 실패했습니다.,Échec de la prise de contact par proxy +Register hotkey failed,Не удалось применить настройки горячих клавиш,注册快捷键失败,註冊快速鍵失敗,ホットキーの登錄に失敗しました。,단축키 등록에 실패했습니다.,Échec de l'enregistrement du raccourci clavier +Cannot parse hotkey: {0},Не удалось распознать следующие горячие клавиши: {0},解析快捷键失败: {0},剖析快速鍵失敗: {0},ホットキーを解析できません: {0},단축키를 해석할 수 없습니다: {0},Impossible d'analyser le raccourci clavier: {0} +"Timeout is invalid, it should not exceed {0}",Таймаут не может превышать значение {0},超时无效,不应超过 {0},逾時無效,不應超過 {0},タイムアウト値が無効です。{0} 以下の値を指定して下さい。,올바르지 않은 시간 초과 설정입니다. {0}을 초과하지 않아야 합니다.,"Le délai d'attente invalide, il ne doit pas dépasser {0}" +Cannot find the plugin program file,Файл плагина не найден,找不到插件程序文件,找不到外掛程式文件,,플러그인 프로그램 파일을 찾을 수 없습니다.,Impossible de trouver le fichier du programme du plugin +,,,,,, +Operation failure,Операция завершилась неудачей,操作失败,,,작업에 실패했습니다.,Operation failure +Auto save failed,Автоматическое сохранение не удалось,自动保存失败,,,자동 저장에 실패했습니다.,Échec de l'enregistrement automatique +Whether to discard unconfigured servers,Внесенные изменения будут утеряны,是否丢弃未配置的服务器,,,구성되지 않은 서버 설정 변경 사항을 폐기하시겠습니까?,Eliminer les serveurs non configurés ou non +"Invalid server address, Cannot automatically save or discard changes",Неверный адрес сервера. Невозможно сохранить или отменить изменения,非法服务器地址,无法自动保存,是否丢弃修改,,,"서버 주소가 올바르지 않아 자동 저장 할 수 없습니다, 변경 사항을 폐기하시겠습니까?","Adresse de serveur invalide, impossible d'enregistrer ou d'annuler automatiquement les modifications" +"Illegal port number format, Cannot automatically save or discard changes",Неверный числовой адрес порта. Невозможно сохранить или отменить изменения,非法端口格式,无法自动保存,是否丢弃修改,,,"포트 번호가 올바르지 않아 자동 저장 할 수 없습니다, 변경 사항을 폐기하시겠습니까?","Format de numéro de port illégal, impossible d'enregistrer ou d'annuler automatiquement les modifications" +"Password can not be blank, Cannot automatically save or discard changes",Пароль не может быть пустым. Невозможно сохранить или отменить изменения,密码不能为空,无法自动保存,是否丢弃修改,,,"비밀번호를 입력하지 않아 자동 저장 할 수 없습니다, 변경 사항을 폐기하시겠습니까?","Le mot de passe ne peut pas être vide, impossible d'enregistrer ou d'annuler automatiquement les modifications" +"Illegal timeout format, Cannot automatically save or discard changes",Неверный формат таймаута. Невозможно сохранить или отменить изменения,非法超时格式,无法自动保存,是否丢弃修改,,,시간 초과 형식이 올바르지 않아 자동 저장 할 수 없습니다. 변경 사항을 폐기하시겠습니까?,"Format de délai d'attente illégal, impossible d'enregistrer ou d'annuler automatiquement les modifications" +,,,,,, +"Error occured when process proxy setting, do you want reset current setting and retry?",Произошла ошибка при обработке настроек. Хотите сбросить текущие настройки и попробовать снова?,处理代理设置时发生错误,是否重置当前代理设置并重试?,,,프록시 설정을 처리하는데에 오류가 발생했습니다. 현재 설정을 폐기하고 다시 시도하시겠습니까?,Une erreur s'est produite lors du processus de configuration du proxy. Voulez-vous réinitialiser le paramètre actuel et réessayer? +"Unrecoverable proxy setting error occured, see log for detail","Произошла серьезная ошибка, подробности можно узнать в журналах",发生不可恢复的代理设置错误,查看日志以取得详情,,,복구 불가능한 프록시 설정 오류가 발생했습니다. 자세한 정보는 로그를 참조하세요.,"Une erreur de paramètre de proxy irrécupérable s'est produite, consultez le journal pour plus de détails" +Auth user can not be blank,Пользователь не может быть пустым,认证用户不能为空,認證用戶不能為空,認証ユーザが指定されていません。,인증 정보의 사용자 이름은 비어있을 수 없습니다.,L'utilisateur d'authentification ne peut pas être vide +Auth pwd can not be blank,Пароль не может быть пустым,认证密码不能为空,認證口令不能為空,認証パスワードが指定されていません。,인증 정보의 비밀번호는 비어있을 수 없습니다.,Le mot de passe d'authentification ne peut pas être vide From 8f09c4782f345a789f41498329d2265c249f2c1a Mon Sep 17 00:00:00 2001 From: Student Main Date: Tue, 5 May 2020 14:50:49 +0800 Subject: [PATCH 8/8] update issue template --- .github/ISSUE_TEMPLATE/bug_report_en.md | 39 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/bug_report_zh.md | 39 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++ .github/issue_template.md | 29 ----------------- 4 files changed, 98 insertions(+), 29 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug_report_en.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report_zh.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 .github/issue_template.md diff --git a/.github/ISSUE_TEMPLATE/bug_report_en.md b/.github/ISSUE_TEMPLATE/bug_report_en.md new file mode 100644 index 00000000..d1998ede --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report_en.md @@ -0,0 +1,39 @@ +--- +name: Bug report (English) +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + + + +### Describe the bug + +### Environment + +- Shadowsocks client version: +- OS version: +- .NET version: + +### Steps you have tried + + +### What did you expect to see? + + +### What did you see instead? + + +### Config and error log in detail (with all sensitive info masked) + +``` +PASTE LOG HERE +``` diff --git a/.github/ISSUE_TEMPLATE/bug_report_zh.md b/.github/ISSUE_TEMPLATE/bug_report_zh.md new file mode 100644 index 00000000..17d46f70 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report_zh.md @@ -0,0 +1,39 @@ +--- +name: Bug报告 (中文) +about: 反馈Bug +title: '' +labels: bug report +assignees: '' + +--- + + + +### 简要描述问题 + +### 环境 + +- Shadowsocks客户端版本: +- 操作系统版本: +- .NET版本: + +### 操作步骤 + + +### 期望的结果 + + +### 实际结果 + + +### 配置文件和日志文件(请隐去敏感信息) + +``` +在此粘贴日志 +``` diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..24473dee --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. \ No newline at end of file diff --git a/.github/issue_template.md b/.github/issue_template.md deleted file mode 100644 index e7b739be..00000000 --- a/.github/issue_template.md +++ /dev/null @@ -1,29 +0,0 @@ - - -### Shadowsocks version / 影梭版本 - - -### Environment (Operating system, .NET Framework, etc) / 使用环境(操作系统,.NET Framework等) - - -### Steps you have tried / 操作步骤 - - -### What did you expect to see? / 期望的结果 - - -### What did you see instead? / 实际结果 - - -### Config and error log in detail (with all sensitive info masked) / 配置文件和日志文件(请隐去敏感信息)