@@ -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]; | |||
} | |||
} | |||
} | |||
@@ -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 | |||
{ | |||
@@ -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); | |||
@@ -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")); | |||
} | |||
} | |||
@@ -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} |
@@ -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} |
@@ -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} |
@@ -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")); | |||
} | |||
} | |||
@@ -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)) | |||
{ | |||
@@ -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=编辑服务器 | |||
///&Add=添加(&A) | |||
///&Delete=删除(&D) | |||
///Server=服务器 | |||
///Server IP=服务器 IP | |||
///Server Port=服务器端口 | |||
///Password=密码 | |||
///Encryption=加密 | |||
///Proxy Port=代理端口 | |||
///Remarks=备注 | |||
///OK= [rest of string was truncated]";. | |||
/// 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]";. | |||
/// </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]";. | |||
/// </summary> | |||
internal static string zh_cn { | |||
get { | |||
return ResourceManager.GetString("zh_cn", resourceCulture); | |||
} | |||
} | |||
} | |||
} |
@@ -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> |
@@ -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); | |||
@@ -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) | |||
{ | |||
@@ -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) | |||
@@ -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> | |||