Browse Source

Merge ec49f42844 into 967c4e8c8b

pull/223/merge
Yilun Zhu 10 years ago
parent
commit
63b81cdb9c
15 changed files with 282 additions and 176 deletions
  1. +19
    -12
      shadowsocks-csharp/Controller/I18N.cs
  2. +1
    -1
      shadowsocks-csharp/Controller/Listener.cs
  3. +1
    -1
      shadowsocks-csharp/Controller/ShadowsocksController.cs
  4. +1
    -1
      shadowsocks-csharp/Controller/SystemProxy.cs
  5. +0
    -74
      shadowsocks-csharp/Data/cn.txt
  6. +74
    -0
      shadowsocks-csharp/Data/en.txt
  7. +74
    -0
      shadowsocks-csharp/Data/zh_cn.txt
  8. +4
    -4
      shadowsocks-csharp/Model/Configuration.cs
  9. +1
    -1
      shadowsocks-csharp/Model/Server.cs
  10. +50
    -29
      shadowsocks-csharp/Properties/Resources.Designer.cs
  11. +6
    -3
      shadowsocks-csharp/Properties/Resources.resx
  12. +14
    -14
      shadowsocks-csharp/View/ConfigForm.cs
  13. +34
    -34
      shadowsocks-csharp/View/MenuViewController.cs
  14. +1
    -1
      shadowsocks-csharp/View/QRCodeForm.cs
  15. +2
    -1
      shadowsocks-csharp/shadowsocks-csharp.csproj

+ 19
- 12
shadowsocks-csharp/Controller/I18N.cs View File

@@ -12,21 +12,28 @@ namespace Shadowsocks.Controller
static I18N()
{
Strings = new Dictionary<string, string>();
string languageString = null;
if (System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag.ToLowerInvariant().StartsWith("zh"))
{
string[] lines = Regex.Split(Resources.cn, "\r\n|\r|\n");
foreach (string line in lines)
languageString = Resources.zh_cn;
}
else
{
languageString = Resources.en;
}
string[] lines = Regex.Split(languageString, "\r\n|\r|\n");
foreach (string line in lines)
{
if (line.StartsWith("#"))
{
continue;
}
string[] kv = Regex.Split(line, "=");
if (kv.Length == 2)
{
if (line.StartsWith("#"))
{
continue;
}
string[] kv = Regex.Split(line, "=");
if (kv.Length == 2)
{
Strings[kv[0]] = kv[1];
}
Strings[kv[0]] = kv[1];
}
}
}


+ 1
- 1
shadowsocks-csharp/Controller/Listener.cs View File

@@ -46,7 +46,7 @@ namespace Shadowsocks.Controller
this._shareOverLAN = config.shareOverLan;
if (CheckIfPortInUse(_config.localPort))
throw new Exception(I18N.GetString("Port already in use"));
throw new Exception(I18N.GetString("Message.PortAlreadyInUse"));
try
{


+ 1
- 1
shadowsocks-csharp/Controller/ShadowsocksController.cs View File

@@ -267,7 +267,7 @@ namespace Shadowsocks.Controller
SocketException se = (SocketException)e;
if (se.SocketErrorCode == SocketError.AccessDenied)
{
e = new Exception(I18N.GetString("Port already in use"), e);
e = new Exception(I18N.GetString("Message.PortAlreadyInUse"), e);
}
}
Logging.LogUsefulException(e);


+ 1
- 1
shadowsocks-csharp/Controller/SystemProxy.cs View File

@@ -73,7 +73,7 @@ namespace Shadowsocks.Controller
{
Logging.LogUsefulException(e);
// TODO this should be moved into views
MessageBox.Show(I18N.GetString("Failed to update registry"));
MessageBox.Show(I18N.GetString("Message.FailedToUpdateRegistry"));
}
}


+ 0
- 74
shadowsocks-csharp/Data/cn.txt View File

@@ -1,74 +0,0 @@
# translation for Simplified Chinese

Shadowsocks=Shadowsocks

# Menu items

Enable System Proxy=启用系统代理
Mode=系统代理模式
PAC=PAC 模式
Global=全局模式
Servers=服务器
Edit Servers...=编辑服务器...
Start on Boot=开机启动
Allow Clients from LAN=允许来自局域网的连接
Local PAC=使用本地 PAC
Online PAC=使用在线 PAC
Edit Local PAC File...=编辑本地 PAC 文件...
Update Local PAC from GFWList=从 GFWList 更新本地 PAC
Edit User Rule for GFWList...=编辑 GFWList 的用户规则...
Show QRCode...=显示二维码...
Scan QRCode from Screen...=扫描屏幕上的二维码...
Show Logs...=显示日志...
About...=关于...
Quit=退出
Edit Servers=编辑服务器

# Config Form

&Add=添加(&A)
&Delete=删除(&D)
Server=服务器
Server IP=服务器 IP
Server Port=服务器端口
Password=密码
Encryption=加密
Proxy Port=代理端口
Remarks=备注
OK=确定
Cancel=取消
New server=未配置的服务器

# QRCode Form

QRCode=二维码

# PAC Url Form

Edit Online PAC URL=编辑在线 PAC 网址
Edit Online PAC URL...=编辑在线 PAC 网址...
Please input PAC Url=请输入 PAC 网址

# Messages

Shadowsocks Error: {0}=Shadowsocks 错误: {0}
Port already in use=端口已被占用
Illegal port number format=非法端口格式
Please add at least one server=请添加至少一个服务器
Server IP can not be blank=服务器 IP 不能为空
Password can not be blank=密码不能为空
Port out of range=端口超出范围
Shadowsocks {0} Update Found=Shadowsocks {0} 更新
Click here to download=点击这里下载
Shadowsocks is here=Shadowsocks 在这里
You can turn on/off Shadowsocks in the context menu=可以在右键菜单中开关 Shadowsocks
System Proxy Enabled=系统代理已启用
System Proxy Disabled=系统代理未启用
Failed to update PAC file =更新 PAC 文件失败
PAC updated=更新 PAC 成功
No updates found. Please report to GFWList if you have problems with it.=未发现更新。如有问题请提交给 GFWList。
No QRCode found. Try to zoom in or move it to the center of the screen.=未发现二维码,尝试把它放大或移动到靠近屏幕中间的位置
Failed to decode QRCode=无法解析二维码
Failed to update registry=无法修改注册表
System Proxy On: =系统代理已启用:
Running: Port {0}=正在运行:端口 {0}

+ 74
- 0
shadowsocks-csharp/Data/en.txt View File

@@ -0,0 +1,74 @@
# translation for English

Main.Shadowsocks=Shadowsocks
# Menu items
Menu.EnableSystemProxy=Enable System Proxy
Menu.Mode=Mode
Menu.PAC=PAC
Menu.Global=Global
Menu.Servers=Servers
Menu.EditServers2=Edit Servers...
Menu.StartOnBoot=Start on Boot
Menu.AllowClientsFromLAN=Allow Clients from LAN
Menu.LocalPAC=Local PAC
Menu.OnlinePAC=Online PAC
Menu.EditLocalPACFile=Edit Local PAC File...
Menu.UpdatePACFromGFWList=Update Local PAC from GFWList
Menu.EditUserRuleForGFWList=Edit User Rule for GFWList...
Menu.ShowQRCode=Show QRCode...
Menu.ScanQRCodeFromScreen=Scan QRCode from Screen...
Menu.ShowLogs=Show Logs...
Menu.About=About...
Menu.Quit=Quit
Menu.EditServers=Edit Servers
# Config Form
Config.Add=&Add
Config.Delete=&Delete
Config.Server=Server
Config.ServerIP=Server IP
Config.ServerPort=Server Port
Config.Password=Password
Config.Encryption=Encryption
Config.ProxyPort=Proxy Port
Config.Remarks=Remarks
Config.OK=OK
Config.Cancel=Cancel
Config.NewServer=New server
# QRCode Form
QRCode.QRCode=QRCode
# PAC Url Form
PAC.EditOnlinePACURL=Edit Online PAC URL
PAC.EditOnlinePACURL2=Edit Online PAC URL...
PAC.InputPACUrl=Please input PAC Url
# Messages
Message.ShadowsocksError=Shadowsocks Error: {0}
Message.PortAlreadyInUse=Port already in use
Message.IllegalPortNumberFormat=Illegal port number format
Message.AddAtLeastOneServer=Please add at least one server
Message.ServerIPCanNotBlank=Server IP can not be blank
Message.PasswordCanNotBlank=Password can not be blank
Message.PortOutOfRange=Port out of range
Message.ShadowsocksUpdateFound=Shadowsocks {0} Update Found
Message.ClickHereToDownload=Click here to download
Message.ShadowsocksIsHere=Shadowsocks is here
Message.TurnOnOffShadowsocksInContextMenu=You can turn on/off Shadowsocks in the context menu
Message.SystemProxyEnabled=System Proxy Enabled
Message.SystemProxyDisabled=System Proxy Disabled
Message.FailedToUpdatePACFile=Failed to update PAC file
Message.PACUpdated=PAC updated
Message.NoUpdatesFound=No updates found. Please report to GFWList if you have problems with it.
Message.NoQRCodeFound=No QRCode found. Try to zoom in or move it to the center of the screen.
Message.FailedToDecodeQRCode=Failed to decode QRCode
Message.FailedToUpdateRegistry=Failed to update registry
Message.SystemProxyOn=System Proxy On:
Message.RunningPort=Running: Port {0}

+ 74
- 0
shadowsocks-csharp/Data/zh_cn.txt View File

@@ -0,0 +1,74 @@
# translation for Simplified Chinese

Main.Shadowsocks=Shadowsocks

# Menu items

Menu.EnableSystemProxy=启用系统代理
Menu.Mode=系统代理模式
Menu.PAC=PAC 模式
Menu.Global=全局模式
Menu.Servers=服务器
Menu.EditServers2=编辑服务器...
Menu.StartOnBoot=开机启动
Menu.AllowClientsFromLAN=允许来自局域网的连接
Menu.LocalPAC=使用本地 PAC
Menu.OnlinePAC=使用在线 PAC
Menu.EditLocalPACFile=编辑本地 PAC 文件...
Menu.UpdatePACFromGFWList=从 GFWList 更新本地 PAC
Menu.EditUserRuleForGFWList=编辑 GFWList 的用户规则...
Menu.ShowQRCode=显示二维码...
Menu.ScanQRCodeFromScreen=扫描屏幕上的二维码...
Menu.ShowLogs=显示日志...
Menu.About=关于...
Menu.Quit=退出
Menu.EditServers=编辑服务器

# Config Form

Config.Add=添加(&A)
Config.Delete=删除(&D)
Config.Server=服务器
Config.ServerIP=服务器 IP
Config.ServerPort=服务器端口
Config.Password=密码
Config.Encryption=加密
Config.ProxyPort=代理端口
Config.Remarks=备注
Config.OK=确定
Config.Cancel=取消
Config.NewServer=未配置的服务器

# QRCode Form

QRCode.QRCode=二维码

# PAC Url Form

PAC.EditOnlinePACURL=编辑在线 PAC 网址
PAC.EditOnlinePACURL2=编辑在线 PAC 网址...
PAC.InputPACUrl=请输入 PAC 网址

# Messages

Message.ShadowsocksError=Shadowsocks 错误: {0}
Message.PortAlreadyInUse=端口已被占用
Message.IllegalPortNumberFormat=非法端口格式
Message.AddAtLeastOneServer=请添加至少一个服务器
Message.ServerIPCanNotBlank=服务器 IP 不能为空
Message.PasswordCanNotBlank=密码不能为空
Message.PortOutOfRange=端口超出范围
Message.ShadowsocksUpdateFound=Shadowsocks {0} 更新
Message.ClickHereToDownload=点击这里下载
Message.ShadowsocksIsHere=Shadowsocks 在这里
Message.TurnOnOffShadowsocksInContextMenu=可以在右键菜单中开关 Shadowsocks
Message.SystemProxyEnabled=系统代理已启用
Message.SystemProxyDisabled=系统代理未启用
Message.FailedToUpdatePACFile=更新 PAC 文件失败
Message.PACUpdated=更新 PAC 成功
Message.NoUpdatesFound=未发现更新。如有问题请提交给 GFWList。
Message.NoQRCodeFound=未发现二维码,尝试把它放大或移动到靠近屏幕中间的位置
Message.FailedToDecodeQRCode=无法解析二维码
Message.FailedToUpdateRegistry=无法修改注册表
Message.SystemProxyOn=系统代理已启用:
Message.RunningPort=正在运行:端口 {0}

+ 4
- 4
shadowsocks-csharp/Model/Configuration.cs View File

@@ -108,7 +108,7 @@ namespace Shadowsocks.Model
{
if (!condition)
{
throw new Exception(I18N.GetString("assertion failure"));
throw new Exception("assertion failure");
}
}
@@ -116,7 +116,7 @@ namespace Shadowsocks.Model
{
if (port <= 0 || port > 65535)
{
throw new ArgumentException(I18N.GetString("Port out of range"));
throw new ArgumentException(I18N.GetString("Message.PortOutOfRange"));
}
}
@@ -124,7 +124,7 @@ namespace Shadowsocks.Model
{
if (string.IsNullOrEmpty(password))
{
throw new ArgumentException(I18N.GetString("Password can not be blank"));
throw new ArgumentException(I18N.GetString("Message.PasswordCanNotBlank"));
}
}
@@ -132,7 +132,7 @@ namespace Shadowsocks.Model
{
if (string.IsNullOrEmpty(server))
{
throw new ArgumentException(I18N.GetString("Server IP can not be blank"));
throw new ArgumentException(I18N.GetString("Message.ServerIPCanNotBlank"));
}
}


+ 1
- 1
shadowsocks-csharp/Model/Server.cs View File

@@ -22,7 +22,7 @@ namespace Shadowsocks.Model
{
if (string.IsNullOrEmpty(server))
{
return I18N.GetString("New server");
return I18N.GetString("Config.NewServer");
}
if (string.IsNullOrEmpty(remarks))
{


+ 50
- 29
shadowsocks-csharp/Properties/Resources.Designer.cs View File

@@ -71,37 +71,29 @@ namespace Shadowsocks.Properties {
}
/// <summary>
/// Looks up a localized string similar to Shadowsocks=Shadowsocks
///Enable System Proxy=启用系统代理
///Mode=系统代理模式
///PAC=PAC 模式
///Global=全局模式
///Servers=服务器
///Edit Servers...=编辑服务器...
///Start on Boot=开机启动
///Allow Clients from LAN=允许来自局域网的连接
///Edit PAC File...=编辑 PAC 文件...
///Edit User Rule for GFWList...=编辑 GFWList 的用户规则...
///Show QRCode...=显示二维码...
///Scan QRCode from Screen...=扫描屏幕上的二维码...
///Show Logs...=显示日志...
///About...=关于...
///Quit=退出
///Edit Servers=编辑服务器
///&amp;Add=添加(&amp;A)
///&amp;Delete=删除(&amp;D)
///Server=服务器
///Server IP=服务器 IP
///Server Port=服务器端口
///Password=密码
///Encryption=加密
///Proxy Port=代理端口
///Remarks=备注
///OK= [rest of string was truncated]&quot;;.
/// Looks up a localized string similar to # translation for English
///
///Main.Shadowsocks=Shadowsocks
///
///# Menu items
///
///Menu.EnableSystemProxy=Enable System Proxy
///Menu.Mode=Mode
///Menu.PAC=PAC
///Menu.Global=Global
///Menu.Servers=Servers
///Menu.EditServers2=Edit Servers...
///Menu.StartOnBoot=Start on Boot
///Menu.AllowClientsFromLAN=Allow Clients from LAN
///Menu.LocalPAC=Local PAC
///Menu.OnlinePAC=Online PAC
///Menu.EditLocalPACFile=Edit Local PAC File...
///Menu.UpdatePACFromGFWList=Update Local PAC from GFWList
///Menu.EditUserRuleForGFWList=Edit User Rule [rest of string was truncated]&quot;;.
/// </summary>
internal static string cn {
internal static string en {
get {
return ResourceManager.GetString("cn", resourceCulture);
return ResourceManager.GetString("en", resourceCulture);
}
}
@@ -203,5 +195,34 @@ namespace Shadowsocks.Properties {
return ResourceManager.GetString("user_rule", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to # translation for Simplified Chinese
///
///Main.Shadowsocks=Shadowsocks
///
///# Menu items
///
///Menu.EnableSystemProxy=启用系统代理
///Menu.Mode=系统代理模式
///Menu.PAC=PAC 模式
///Menu.Global=全局模式
///Menu.Servers=服务器
///Menu.EditServers2=编辑服务器...
///Menu.StartOnBoot=开机启动
///Menu.AllowClientsFromLAN=允许来自局域网的连接
///Menu.LocalPAC=使用本地 PAC
///Menu.OnlinePAC=使用在线 PAC
///Menu.EditLocalPACFile=编辑本地 PAC 文件...
///Menu.UpdatePACFromGFWList=从 GFWList 更新本地 PAC
///Menu.EditUserRuleForGFWList=编辑 GFWList 的用户规则...
///Menu.ShowQRCode=显示二维码...
///Menu.ScanQRCodeFromScreen= [rest of string was truncated]&quot;;.
/// </summary>
internal static string zh_cn {
get {
return ResourceManager.GetString("zh_cn", resourceCulture);
}
}
}
}

+ 6
- 3
shadowsocks-csharp/Properties/Resources.resx View File

@@ -121,9 +121,6 @@
<data name="abp_js" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Data\abp.js.gz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="cn" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\data\cn.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="libsscrypto_dll" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\data\libsscrypto.dll.gz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -151,4 +148,10 @@
<data name="user_rule" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\data\user-rule.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="zh_cn" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\data\zh_cn.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="en" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\data\en.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
</root>

+ 14
- 14
shadowsocks-csharp/View/ConfigForm.cs View File

@@ -40,18 +40,18 @@ namespace Shadowsocks.View
private void UpdateTexts()
{
AddButton.Text = I18N.GetString("&Add");
DeleteButton.Text = I18N.GetString("&Delete");
IPLabel.Text = I18N.GetString("Server IP");
ServerPortLabel.Text = I18N.GetString("Server Port");
PasswordLabel.Text = I18N.GetString("Password");
EncryptionLabel.Text = I18N.GetString("Encryption");
ProxyPortLabel.Text = I18N.GetString("Proxy Port");
RemarksLabel.Text = I18N.GetString("Remarks");
ServerGroupBox.Text = I18N.GetString("Server");
OKButton.Text = I18N.GetString("OK");
MyCancelButton.Text = I18N.GetString("Cancel");
this.Text = I18N.GetString("Edit Servers");
AddButton.Text = I18N.GetString("Config.Add");
DeleteButton.Text = I18N.GetString("Config.Delete");
IPLabel.Text = I18N.GetString("Config.ServerIP");
ServerPortLabel.Text = I18N.GetString("Config.ServerPort");
PasswordLabel.Text = I18N.GetString("Config.Password");
EncryptionLabel.Text = I18N.GetString("Config.Encryption");
ProxyPortLabel.Text = I18N.GetString("Config.ProxyPort");
RemarksLabel.Text = I18N.GetString("Config.Remarks");
ServerGroupBox.Text = I18N.GetString("Config.Server");
OKButton.Text = I18N.GetString("Config.OK");
MyCancelButton.Text = I18N.GetString("Config.Cancel");
this.Text = I18N.GetString("Menu.EditServers");
}
private void controller_ConfigChanged(object sender, EventArgs e)
@@ -92,7 +92,7 @@ namespace Shadowsocks.View
}
catch (FormatException)
{
MessageBox.Show(I18N.GetString("Illegal port number format"));
MessageBox.Show(I18N.GetString("Message.IllegalPortNumberFormat"));
}
catch (Exception ex)
{
@@ -201,7 +201,7 @@ namespace Shadowsocks.View
}
if (_modifiedConfiguration.configs.Count == 0)
{
MessageBox.Show(I18N.GetString("Please add at least one server"));
MessageBox.Show(I18N.GetString("Message.AddAtLeastOneServer"));
return;
}
controller.SaveServers(_modifiedConfiguration.configs, _modifiedConfiguration.localPort);


+ 34
- 34
shadowsocks-csharp/View/MenuViewController.cs View File

@@ -82,7 +82,7 @@ namespace Shadowsocks.View
void controller_Errored(object sender, System.IO.ErrorEventArgs e)
{
MessageBox.Show(e.GetException().ToString(), String.Format(I18N.GetString("Shadowsocks Error: {0}"), e.GetException().Message));
MessageBox.Show(e.GetException().ToString(), String.Format(I18N.GetString("Message.ShadowsocksError"), e.GetException().Message));
}
private void UpdateTrayIcon()
@@ -125,10 +125,10 @@ namespace Shadowsocks.View
_notifyIcon.Icon = Icon.FromHandle(icon.GetHicon());
// we want to show more details but notify icon title is limited to 63 characters
string text = I18N.GetString("Shadowsocks") + " " + UpdateChecker.Version + "\n" +
string text = I18N.GetString("Main.Shadowsocks") + " " + UpdateChecker.Version + "\n" +
(enabled ?
I18N.GetString("System Proxy On: ") + (global ? I18N.GetString("Global") : I18N.GetString("PAC")) :
String.Format(I18N.GetString("Running: Port {0}"), config.localPort)) // this feedback is very important because they need to know Shadowsocks is running
I18N.GetString("Message.SystemProxyOn") + (global ? I18N.GetString("Menu.Global") : I18N.GetString("Menu.PAC")) :
String.Format(I18N.GetString("Message.RunningPort"), config.localPort)) // this feedback is very important because they need to know Shadowsocks is running
+ "\n" + config.GetCurrentServer().FriendlyName();
_notifyIcon.Text = text.Substring(0, Math.Min(63, text.Length));
}
@@ -146,34 +146,34 @@ namespace Shadowsocks.View
private void LoadMenu()
{
this.contextMenu1 = new ContextMenu(new MenuItem[] {
this.enableItem = CreateMenuItem("Enable System Proxy", new EventHandler(this.EnableItem_Click)),
this.modeItem = CreateMenuGroup("Mode", new MenuItem[] {
this.PACModeItem = CreateMenuItem("PAC", new EventHandler(this.PACModeItem_Click)),
this.globalModeItem = CreateMenuItem("Global", new EventHandler(this.GlobalModeItem_Click))
this.enableItem = CreateMenuItem("Menu.EnableSystemProxy", new EventHandler(this.EnableItem_Click)),
this.modeItem = CreateMenuGroup("Menu.Mode", new MenuItem[] {
this.PACModeItem = CreateMenuItem("Menu.PAC", new EventHandler(this.PACModeItem_Click)),
this.globalModeItem = CreateMenuItem("Menu.Global", new EventHandler(this.GlobalModeItem_Click))
}),
this.ServersItem = CreateMenuGroup("Servers", new MenuItem[] {
this.ServersItem = CreateMenuGroup("Menu.Servers", new MenuItem[] {
this.SeperatorItem = new MenuItem("-"),
this.ConfigItem = CreateMenuItem("Edit Servers...", new EventHandler(this.Config_Click)),
CreateMenuItem("Show QRCode...", new EventHandler(this.QRCodeItem_Click)),
CreateMenuItem("Scan QRCode from Screen...", new EventHandler(this.ScanQRCodeItem_Click))
this.ConfigItem = CreateMenuItem("Menu.EditServers2", new EventHandler(this.Config_Click)),
CreateMenuItem("Menu.ShowQRCode", new EventHandler(this.QRCodeItem_Click)),
CreateMenuItem("Menu.ScanQRCodeFromScreen", new EventHandler(this.ScanQRCodeItem_Click))
}),
CreateMenuGroup("PAC ", new MenuItem[] {
this.localPACItem = CreateMenuItem("Local PAC", new EventHandler(this.LocalPACItem_Click)),
this.onlinePACItem = CreateMenuItem("Online PAC", new EventHandler(this.OnlinePACItem_Click)),
this.localPACItem = CreateMenuItem("Menu.LocalPAC", new EventHandler(this.LocalPACItem_Click)),
this.onlinePACItem = CreateMenuItem("Menu.OnlinePAC", new EventHandler(this.OnlinePACItem_Click)),
new MenuItem("-"),
this.editLocalPACItem = CreateMenuItem("Edit Local PAC File...", new EventHandler(this.EditPACFileItem_Click)),
this.updateFromGFWListItem = CreateMenuItem("Update Local PAC from GFWList", new EventHandler(this.UpdatePACFromGFWListItem_Click)),
this.editGFWUserRuleItem = CreateMenuItem("Edit User Rule for GFWList...", new EventHandler(this.EditUserRuleFileForGFWListItem_Click)),
this.editOnlinePACItem = CreateMenuItem("Edit Online PAC URL...", new EventHandler(this.UpdateOnlinePACURLItem_Click)),
this.editLocalPACItem = CreateMenuItem("Menu.EditLocalPACFile", new EventHandler(this.EditPACFileItem_Click)),
this.updateFromGFWListItem = CreateMenuItem("Menu.UpdatePACFromGFWList", new EventHandler(this.UpdatePACFromGFWListItem_Click)),
this.editGFWUserRuleItem = CreateMenuItem("Menu.EditUserRuleForGFWList", new EventHandler(this.EditUserRuleFileForGFWListItem_Click)),
this.editOnlinePACItem = CreateMenuItem("PAC.EditOnlinePACURL2", new EventHandler(this.UpdateOnlinePACURLItem_Click)),
}),
new MenuItem("-"),
this.AutoStartupItem = CreateMenuItem("Start on Boot", new EventHandler(this.AutoStartupItem_Click)),
this.ShareOverLANItem = CreateMenuItem("Allow Clients from LAN", new EventHandler(this.ShareOverLANItem_Click)),
this.AutoStartupItem = CreateMenuItem("Menu.StartOnBoot", new EventHandler(this.AutoStartupItem_Click)),
this.ShareOverLANItem = CreateMenuItem("Menu.AllowClientsFromLAN", new EventHandler(this.ShareOverLANItem_Click)),
new MenuItem("-"),
CreateMenuItem("Show Logs...", new EventHandler(this.ShowLogItem_Click)),
CreateMenuItem("About...", new EventHandler(this.AboutItem_Click)),
CreateMenuItem("Menu.ShowLogs", new EventHandler(this.ShowLogItem_Click)),
CreateMenuItem("Menu.About", new EventHandler(this.AboutItem_Click)),
new MenuItem("-"),
CreateMenuItem("Quit", new EventHandler(this.Quit_Click))
CreateMenuItem("Menu.Quit", new EventHandler(this.Quit_Click))
});
}
@@ -217,19 +217,19 @@ namespace Shadowsocks.View
void controller_UpdatePACFromGFWListError(object sender, System.IO.ErrorEventArgs e)
{
ShowBalloonTip(I18N.GetString("Failed to update PAC file"), e.GetException().Message, ToolTipIcon.Error, 5000);
ShowBalloonTip(I18N.GetString("Message.FailedToUpdatePACFile"), e.GetException().Message, ToolTipIcon.Error, 5000);
Logging.LogUsefulException(e.GetException());
}
void controller_UpdatePACFromGFWListCompleted(object sender, GFWListUpdater.ResultEventArgs e)
{
string result = e.Success ? I18N.GetString("PAC updated") : I18N.GetString("No updates found. Please report to GFWList if you have problems with it.");
ShowBalloonTip(I18N.GetString("Shadowsocks"), result, ToolTipIcon.Info, 1000);
string result = e.Success ? I18N.GetString("Message.PACUpdated") : I18N.GetString("Message.NoUpdatesFound");
ShowBalloonTip(I18N.GetString("Main.Shadowsocks"), result, ToolTipIcon.Info, 1000);
}
void updateChecker_NewVersionFound(object sender, EventArgs e)
{
ShowBalloonTip(String.Format(I18N.GetString("Shadowsocks {0} Update Found"), updateChecker.LatestVersionNumber), I18N.GetString("Click here to download"), ToolTipIcon.Info, 5000);
ShowBalloonTip(String.Format(I18N.GetString("Message.ShadowsocksUpdateFound"), updateChecker.LatestVersionNumber), I18N.GetString("Message.ClickHereToDownload"), ToolTipIcon.Info, 5000);
_notifyIcon.BalloonTipClicked += notifyIcon1_BalloonTipClicked;
_isFirstRun = false;
}
@@ -317,8 +317,8 @@ namespace Shadowsocks.View
{
if (_isFirstRun)
{
_notifyIcon.BalloonTipTitle = I18N.GetString("Shadowsocks is here");
_notifyIcon.BalloonTipText = I18N.GetString("You can turn on/off Shadowsocks in the context menu");
_notifyIcon.BalloonTipTitle = I18N.GetString("Message.ShadowsocksIsHere");
_notifyIcon.BalloonTipText = I18N.GetString("Message.TurnOnOffShadowsocksInContextMenu");
_notifyIcon.BalloonTipIcon = ToolTipIcon.Info;
_notifyIcon.ShowBalloonTip(0);
_isFirstRun = false;
@@ -444,7 +444,7 @@ namespace Shadowsocks.View
}
else
{
MessageBox.Show(I18N.GetString("Failed to decode QRCode"));
MessageBox.Show(I18N.GetString("Message.FailedToDecodeQRCode"));
return;
}
double minX = Int32.MaxValue, minY = Int32.MaxValue, maxX = 0, maxY = 0;
@@ -476,7 +476,7 @@ namespace Shadowsocks.View
}
}
}
MessageBox.Show(I18N.GetString("No QRCode found. Try to zoom in or move it to the center of the screen."));
MessageBox.Show(I18N.GetString("Message.NoQRCodeFound"));
}
void splash_FormClosed(object sender, FormClosedEventArgs e)
@@ -492,7 +492,7 @@ namespace Shadowsocks.View
private void AutoStartupItem_Click(object sender, EventArgs e) {
AutoStartupItem.Checked = !AutoStartupItem.Checked;
if (!AutoStartup.Set(AutoStartupItem.Checked)) {
MessageBox.Show(I18N.GetString("Failed to update registry"));
MessageBox.Show(I18N.GetString("Message.FailedToUpdateRegistry"));
}
}
@@ -529,8 +529,8 @@ namespace Shadowsocks.View
{
string origPacUrl = controller.GetConfiguration().pacUrl;
string pacUrl = Microsoft.VisualBasic.Interaction.InputBox(
I18N.GetString("Please input PAC Url"),
I18N.GetString("Edit Online PAC URL"),
I18N.GetString("PAC.InputPACUrl"),
I18N.GetString("PAC.EditOnlinePACURL"),
origPacUrl, -1, -1);
if (!string.IsNullOrEmpty(pacUrl) && pacUrl != origPacUrl)
{


+ 1
- 1
shadowsocks-csharp/View/QRCodeForm.cs View File

@@ -22,7 +22,7 @@ namespace Shadowsocks.View
this.code = code;
InitializeComponent();
this.Icon = Icon.FromHandle(Resources.ssw128.GetHicon());
this.Text = I18N.GetString("QRCode");
this.Text = I18N.GetString("QRCode.QRCode");
}
private void GenQR(string ssconfig)


+ 2
- 1
shadowsocks-csharp/shadowsocks-csharp.csproj View File

@@ -198,8 +198,9 @@
<None Include="Resources\ss16.png" />
<None Include="Resources\ss24.png" />
<None Include="Resources\ssw128.png" />
<Content Include="Data\cn.txt" />
<Content Include="Data\user-rule.txt" />
<Content Include="Data\en.txt" />
<Content Include="Data\zh_cn.txt" />
<Content Include="shadowsocks.ico" />
<None Include="Data\polipo_config.txt" />
</ItemGroup>


Loading…
Cancel
Save