diff --git a/shadowsocks-csharp/Controller/I18N.cs b/shadowsocks-csharp/Controller/I18N.cs index 0e62a483..e5b009dc 100755 --- a/shadowsocks-csharp/Controller/I18N.cs +++ b/shadowsocks-csharp/Controller/I18N.cs @@ -1,52 +1,77 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Globalization; using System.IO; - +using Shadowsocks.Properties; +using Shadowsocks.Util; +using System.Windows.Forms; +using Microsoft.VisualBasic.FileIO; namespace Shadowsocks.Controller { - using Shadowsocks.Properties; public static class I18N { private static Dictionary _strings = new Dictionary(); - private static void Init(string res) + private static void Init(string res, string locale) { - using (var sr = new StringReader(res)) + using (TextFieldParser csvParser = new TextFieldParser(new StringReader(res))) { - foreach (var line in sr.NonWhiteSpaceLines()) + csvParser.SetDelimiters(","); + + string[] localeNames = csvParser.ReadFields(); + + int enIndex = 0; + int targetIndex = 0; + + for (int i = 1; i < localeNames.Length; i++) { - if (line[0] == '#') - continue; + if (localeNames[i] == "en") + { + + } - var pos = line.IndexOf('='); - if (pos < 1) - continue; - _strings[line.Substring(0, pos)] = line.Substring(pos + 1); + if (localeNames[i] == locale) + { + targetIndex = i; + } + } + + + while (!csvParser.EndOfData) + { + string[] translations = csvParser.ReadFields(); + if (string.IsNullOrWhiteSpace(translations[0])) continue; + if (translations[0].TrimStart(' ')[0] == '#') continue; + _strings[translations[enIndex]] = translations[targetIndex]; } } } static I18N() { - string name = CultureInfo.CurrentCulture.EnglishName; - if (name.StartsWith("Chinese", StringComparison.OrdinalIgnoreCase)) - { - // choose Traditional Chinese only if we get explicit indication - Init(name.Contains("Traditional") - ? Resources.zh_TW - : Resources.zh_CN); - } - else if (name.StartsWith("Japan", StringComparison.OrdinalIgnoreCase)) - { - Init(Resources.ja); - } + Init(Resources.i18n_csv, CultureInfo.CurrentCulture.IetfLanguageTag); } public static string GetString(string key, params object[] args) { return string.Format(_strings.TryGetValue(key, out var value) ? value : key, args); } + + public static void TranslateForm(Form c) + { + c.Text = GetString(c.Text); + foreach (var item in ViewUtils.GetChildControls(c)) + { + item.Text = GetString(item.Text); + } + TranslateMenu(c.Menu); + } + public static void TranslateMenu(Menu m) + { + foreach (var item in ViewUtils.GetMenuItems(m)) + { + item.Text = GetString(item.Text); + } + } } } diff --git a/shadowsocks-csharp/Data/i18n.csv b/shadowsocks-csharp/Data/i18n.csv new file mode 100644 index 00000000..1320a7fd --- /dev/null +++ b/shadowsocks-csharp/Data/i18n.csv @@ -0,0 +1,196 @@ +en,zh-CN,zh-TW,ja +,,, +Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks +,,, +System Proxy,系统代理,系統代理,システムプロキシ +Disable,禁用,禁用,無効 +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 +Online PAC,使用在线 PAC,使用線上 PAC,オンライン PAC +Edit Local PAC File...,编辑本地 PAC 文件...,編輯本機 PAC 檔案...,ローカル PAC ファイルの編集... +Update Local PAC from GFWList,从 GFWList 更新本地 PAC,從 GFWList 更新本機 PAC,GFWList からローカル PAC を更新 +Edit User Rule for GFWList...,编辑 GFWList 的用户规则...,編輯 GFWList 的使用者規則...,ユーザールールの編集... +Secure Local PAC,保护本地 PAC,安全本機 PAC,ローカル PAC を保護 +Copy Local PAC URL,复制本地 PAC 网址,複製本機 PAC 網址,ローカル PAC URL をコピー +Share Server Config...,分享服务器配置...,分享伺服器設定檔...,サーバーの設定を共有... +Scan QRCode from Screen...,扫描屏幕上的二维码...,掃描螢幕上的 QR 碼...,画面から QR コードをスキャン... +Import URL from Clipboard...,从剪贴板导入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,根据统计,根據統計,統計で選ぶ +,,, +# Config Form,,, +,,, +&Add,添加(&A),新增 (&A),新規 (&A) +&Delete,删除(&D),移除 (&D),削除 (&D) +Dupli&cate,复制(&C),複製 (&C),コピー (&C) +Server,服务器,伺服器,サーバー +Server IP,服务器地址,伺服器位址,サーバーアドレス +Server Port,服务器端口,伺服器連接埠,サーバーポート +Password,密码,密碼,パスワード +Show Password,显示密码,顯示密碼,パスワードを表示する +Encryption,加密,加密,暗号化 +Plugin Program,插件程序,外掛程式,プラグインプログラム +Plugin Options,插件选项,外掛程式選項,プラグインのオプション +Need Plugin Argument,需要命令行参数,, +Plugin Arguments,插件参数,外掛程式參數,プラグインの引数 +Proxy Port,代理端口,Proxy 連接埠,プロキシポート +Portable Mode,便携模式,便攜模式,ポータブルモード +Restart required,需要重新启动SS,需要重新啟動SS,再起動SSが必要 +Remarks,备注,註解,付記 +Timeout(Sec),超时(秒),逾時 (秒),タイムアウト (秒) +OK,确定,確定,OK +Cancel,取消,取消,キャンセル +Apply,应用,應用,適用 +New server,未配置的服务器,新伺服器,新規サーバー +Move &Up,上移(&U),上移 (&U),上に移動 (&U) +Move D&own,下移(&O),下移 (&O),下に移動 (&O) +,,, +#Statistics Config,,, +,,, +Enable Statistics,启用统计,, +Ping Test,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,网络延迟,, +Chart Mode,图表模式,, +24h,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,使用认证,使用認證,認証を利用する +User Name,用户名,認證用戶,認証ユーザ +Auth Pwd,认证密码,認證口令,認証パスワード +,,, +# Log Form,,, +,,, +&File,文件(&F),檔案 (&F),ファイル (&F) +&Open Location,在资源管理器中打开(&O),在檔案總管中開啟 (&O),ファイルの場所を開く (&O) +E&xit,退出(&X),結束 (&X),終了 (&X) +&View,视图(&V),檢視 (&V),表示 (&V) +&Clear Logs,清空日志(&C),清除記錄檔 (&C),ログの削除 (&C) +Change &Font,设置字体(&F),變更字型 (&F),フォント (&F) +&Wrap Text,自动换行(&W),自動換行 (&W),右端で折り返す (&W) +&Top Most,置顶(&T),置頂 (&T),常に最前面に表示 (&T) +&Show Toolbar,显示工具栏(&S),顯示工具列 (&S),ツールバーの表示 (&S) +Log Viewer,日志查看器,記錄檔檢視器,ログビューア +Inbound,入站,輸入,受信 +Outbound,出站,輸出,送信 +,,, +# QRCode Form,,, +,,, +QRCode and URL,二维码与 URL,QR 碼與 URL,QR コードと URL +,,, +# PAC Url Form,,, +,,, +Edit Online PAC URL,编辑在线 PAC 网址,編輯線上 PAC 網址,オンライン PAC URL の編集 +Edit Online PAC URL...,编辑在线 PAC 网址...,編輯線上 PAC 網址...,オンライン PAC URL の編集... +Please input PAC Url,请输入 PAC 网址,請輸入 PAC 網址,PAC URLを入力して下さい +,,, +# HotkeySettings Form,,, +,,, +Switch system proxy,切换系统代理状态,切換系統 Proxy 狀態,システム プロキシの状態を切り替える +Switch system proxy mode,切换系统代理模式,切換系統 Proxy 模式,プロキシモードを切り替える +Allow Clients from 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} +Port {0} already in use,端口 {0} 已被占用,連接埠號碼 {0} 已被使用,ポート番号 {0} は既に使用されています。 +Port {0} is reserved by system,端口 {0} 是系统保留端口,連接埠號碼 {0} 由系統保留, ポート番号 {0} はシステムによって予約されています +Invalid server address,非法服务器地址,無效伺服器位址,サーバーアドレスが無効です。 +Illegal port number format,非法端口格式,無效連接埠號碼格式,ポート番号のフォーマットが無効です。 +Illegal timeout format,非法超时格式,無效逾時格式,タイムアウト値のフォーマットが無効です。 +Server IP can not be blank,服务器 IP 不能为空,伺服器 IP 不能為空,サーバー IP が指定されていません。 +Password can not be blank,密码不能为空,密碼不能為空,パスワードが指定されていません。 +Port out of range,端口超出范围,連接埠號碼超出範圍,ポート番号は範囲外です。 +Port can't be 8123,端口不能为 8123,連接埠號碼不能為 8123,8123 番以外のポート番号を指定して下さい。 +Shadowsocks {0} Update Found,Shadowsocks {0} 更新,Shadowsocks {0} 更新,Shadowsocks バージョン {0} は利用できます。 +No update is available,没有可用的更新,沒有可用的更新,お使いのバージョンは最新です。 +Click here to update,点击这里升级,點按此處升級,クリックしてアップデートします。 +Shadowsocks is here,Shadowsocks 在这里,Shadowsocks 在這裡,Shadowsocks はここです。 +You can turn on/off Shadowsocks in the context menu,可以在右键菜单中开关 Shadowsocks,可以在右鍵選項單中開關 Shadowsocks,コンテキストメニューを使って、Shadowsocks を有効または無効にすることができます。 +System Proxy Enabled,系统代理已启用,系統 Proxy 已啟用,システム プロキシが有効です。 +System Proxy Disabled,系统代理未启用,系統 Proxy 未啟用,システム プロキシが無効です。 +Failed to update PAC file ,更新 PAC 文件失败,更新 PAC 檔案失敗,PAC の更新に失敗しました。 +PAC updated,更新 PAC 成功,更新 PAC 成功,PAC を更新しました。 +No updates found. Please report to GFWList if you have problems with it.,未发现更新。如有问题请提交给 GFWList。,未發現更新。如有問題請報告至 GFWList。,お使いのバージョンは最新です。問題がある場合は、GFWList に報告して下さい。 +No QRCode found. Try to zoom in or move it to the center of the screen.,未发现二维码,尝试把它放大或移动到靠近屏幕中间的位置,未發現 QR 碼,嘗試把它放大或移動到靠近熒幕中間的位置,QR コードが見つかりませんでした。コードを大きくするか、画面の中央に移動して下さい。 +Shadowsocks is already running.,Shadowsocks 已经在运行。,Shadowsocks 已經在執行。,Shadowsocks 実行中 +Find Shadowsocks icon in your notify tray.,请在任务栏里寻找 Shadowsocks 图标。,請在工作列裡尋找 Shadowsocks 圖示。,通知領域には Shadowsocks のアイコンがあります。 +"If you want to start multiple Shadowsocks, make a copy in another directory.",如果想同时启动多个,可以另外复制一份到别的目录。,如果想同時啟動多個,可以另外複製一份至別的目錄。,複数起動したい場合は、プログラムファイルを別のフォルダーにコピーしてから、もう一度実行して下さい。 +Failed to decode QRCode,无法解析二维码,QR 碼解碼失敗,QR コードの読み取りに失敗しました。 +Failed to update registry,无法修改注册表,無法修改登錄檔,レジストリの更新に失敗しました。 +System Proxy On: ,系统代理已启用:,系統 Proxy 已啟用:,システム プロキシが有効: +Running: Port {0},正在运行:端口 {0},正在執行:連接埠號碼 {0},実行中:ポート {0} +"Unexpected error, shadowsocks will exit. Please report to",非预期错误,Shadowsocks将退出。请提交此错误到,非預期錯誤,Shadowsocks 將結束。請報告此錯誤至,予想外のエラーが発生したため、Shadowsocks を終了します。詳しくは下記までお問い合わせ下さい: +"Unsupported operating system, use Windows Vista at least.",不支持的操作系统版本,最低需求为Windows Vista。,不支援的作業系統版本,最低需求為 Windows Vista。,お使いの OS はサポートされていません。Windows Vista 以降の OS で実行して下さい。 +"Unsupported .NET Framework, please update to 4.6.2 or later.",当前 .NET Framework 版本过低,请升级至4.6.2或更新版本。,目前 .NET Framework 版本過低,最低需求為4.6.2。,お使いの .NET Framework はサポートされていません。4.6.2 以降のバンジョーをインストールして下さい。 +Proxy request failed,代理请求失败,Proxy 要求失敗,プロキシ要求が失敗しました。 +Proxy handshake failed,代理握手失败,Proxy 交握失敗,プロキシ ハンドシェイクに失敗しました。 +Register hotkey failed,注册快捷键失败,註冊快速鍵失敗,ホットキーの登錄に失敗しました。 +Cannot parse hotkey: {0},解析快捷键失败: {0},剖析快速鍵失敗: {0},ホットキーを解析できません: {0} +"Timeout is invalid, it should not exceed {0}",超时无效,不应超过 {0},逾時無效,不應超過 {0},タイムアウト値が無効です。{0} 以下の値を指定して下さい。 +,,, +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",非法超时格式,无法自动保存,是否丢弃修改,, +,,, +"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,认证密码不能为空,認證口令不能為空,認証パスワードが指定されていません。 diff --git a/shadowsocks-csharp/Data/ja.txt b/shadowsocks-csharp/Data/ja.txt deleted file mode 100644 index 3b60941c..00000000 --- a/shadowsocks-csharp/Data/ja.txt +++ /dev/null @@ -1,156 +0,0 @@ -# translation for Japanese - -Shadowsocks=Shadowsocks - -# Menu items - -System Proxy=システムプロキシ -Disable=無効 -PAC=PAC -Global=全般 -Servers=サーバー -Edit Servers...=サーバーの編集... -Statistics Config...=統計情報の設定... -Start on Boot=システムと同時に起動 -Forward Proxy...=フォワードプロキシの設定... -Allow other Devices to connect=他のデバイスからの接続を許可する -Local PAC=ローカル PAC -Online PAC=オンライン PAC -Edit Local PAC File...=ローカル PAC ファイルの編集... -Update Local PAC from GFWList=GFWList からローカル PAC を更新 -Edit User Rule for GFWList...=ユーザールールの編集... -Secure Local PAC=ローカル PAC を保護 -Copy Local PAC URL=ローカル PAC URL をコピー -Share Server Config...=サーバーの設定を共有... -Scan QRCode from Screen...=画面から QR コードをスキャン... -Import URL from Clipboard...=クリップボードから 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=統計で選ぶ - -# Config Form - -&Add=新規 (&A) -&Delete=削除 (&D) -Dupli&cate=コピー (&C) -Server=サーバー -Server Addr=サーバーアドレス -Server Port=サーバーポート -Password=パスワード -Show Password=パスワードを表示する -Encryption=暗号化 -Plugin Program=プラグインプログラム -Plugin Options=プラグインのオプション -Plugin Arguments=プラグインの引数 -Proxy Port=プロキシポート -Portable Mode=ポータブルモード -Restart required=再起動SSが必要 -Remarks=付記 -Timeout(Sec)=タイムアウト (秒) -OK=OK -Cancel=キャンセル -Apply=適用 -New server=新規サーバー -Move &Up=上に移動 (&U) -Move D&own=下に移動 (&O) - -# Proxy Form - -Edit Proxy=プロキシの編集 -Use Proxy=プロキシを利用する -Proxy Type=プロキシの種類 -Proxy Addr=プロキシアドレス -Proxy Port=プロキシポート -If server has a plugin, proxy will not be used=サーバーにプラグインがある場合、プロキシは利用されません -Use Auth=認証を利用する -Auth User=認証ユーザ -Auth Pwd=認証パスワード - -# Log Form - -&File=ファイル (&F) -&Open Location=ファイルの場所を開く (&O) -E&xit=終了 (&X) -&View=表示 (&V) -&Clear Logs=ログの削除 (&C) -Change &Font=フォント (&F) -&Wrap Text=右端で折り返す (&W) -&Top Most=常に最前面に表示 (&T) -&Show Toolbar=ツールバーの表示 (&S) -Log Viewer=ログビューア -Inbound=受信 -Outbound=送信 - -# QRCode Form - -QRCode and URL=QR コードと URL - -# PAC Url Form - -Edit Online PAC URL=オンライン PAC URL の編集 -Edit Online PAC URL...=オンライン PAC URL の編集... -Please input PAC Url=PAC URLを入力して下さい - -# HotkeySettings Form - -Switch system proxy=システム プロキシの状態を切り替える -Switch system proxy mode=プロキシモードを切り替える -Switch share over LAN=LAN からのアクセスの許可を切り替える -Show Logs=ログの表示 -Switch to prev server=前のサーバーに切り替える -Switch to next server=次のサーバーに切り替える -Reg All=全部登録する -Reg Hotkeys At Startup=起動時にホットキーを登録する - -# Messages - -Shadowsocks Error: {0}=Shadowsocks エラー: {0} -Port {0} already in use=ポート番号 {0} は既に使用されています。 -Port {0} is reserved by system= ポート番号 {0} はシステムによって予約されています -Invalid server address=サーバーアドレスが無効です。 -Illegal port number format=ポート番号のフォーマットが無効です。 -Illegal timeout format=タイムアウト値のフォーマットが無効です。 -Server IP can not be blank=サーバー IP が指定されていません。 -Password can not be blank=パスワードが指定されていません。 -Port out of range=ポート番号は範囲外です。 -Port can't be 8123=8123 番以外のポート番号を指定して下さい。 -Shadowsocks {0} Update Found=Shadowsocks バージョン {0} は利用できます。 -No update is available=お使いのバージョンは最新です。 -Click here to update=クリックしてアップデートします。 -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.=QR コードが見つかりませんでした。コードを大きくするか、画面の中央に移動して下さい。 -Shadowsocks is already running.=Shadowsocks 実行中 -Find Shadowsocks icon in your notify tray.=通知領域には Shadowsocks のアイコンがあります。 -If you want to start multiple Shadowsocks, make a copy in another directory.=複数起動したい場合は、プログラムファイルを別のフォルダーにコピーしてから、もう一度実行して下さい。 -Failed to decode QRCode=QR コードの読み取りに失敗しました。 -Failed to update registry=レジストリの更新に失敗しました。 -System Proxy On: =システム プロキシが有効: -Running: Port {0}=実行中:ポート {0} -Unexpected error, shadowsocks will exit. Please report to=予想外のエラーが発生したため、Shadowsocks を終了します。詳しくは下記までお問い合わせ下さい: -Unsupported operating system, use Windows Vista at least.=お使いの OS はサポートされていません。Windows Vista 以降の OS で実行して下さい。 -Unsupported .NET Framework, please update to 4.6.2 or later.=お使いの .NET Framework はサポートされていません。4.6.2 以降のバンジョーをインストールして下さい。 -Proxy request failed=プロキシ要求が失敗しました。 -Proxy handshake failed=プロキシ ハンドシェイクに失敗しました。 -Register hotkey failed=ホットキーの登錄に失敗しました。 -Cannot parse hotkey: {0}=ホットキーを解析できません: {0} -Timeout is invalid, it should not exceed {0}=タイムアウト値が無効です。{0} 以下の値を指定して下さい。 -Auth user can not be blank=認証ユーザが指定されていません。 -Auth pwd can not be blank=認証パスワードが指定されていません。 \ No newline at end of file diff --git a/shadowsocks-csharp/Data/zh_CN.txt b/shadowsocks-csharp/Data/zh_CN.txt deleted file mode 100644 index 4566c12d..00000000 --- a/shadowsocks-csharp/Data/zh_CN.txt +++ /dev/null @@ -1,198 +0,0 @@ -# translation for Simplified Chinese - -Shadowsocks=Shadowsocks - -# Menu items - -System Proxy=系统代理 -Disable=禁用 -PAC=PAC 模式 -Global=全局模式 -Servers=服务器 -Edit Servers...=编辑服务器... -Statistics Config...=统计配置... -Start on Boot=开机启动 -Forward Proxy...=正向代理设置... -Allow other Devices to connect=允许其他设备连入 -Local PAC=使用本地 PAC -Online PAC=使用在线 PAC -Edit Local PAC File...=编辑本地 PAC 文件... -Update Local PAC from GFWList=从 GFWList 更新本地 PAC -Edit User Rule for GFWList...=编辑 GFWList 的用户规则... -Secure Local PAC=保护本地 PAC -Copy Local PAC URL=复制本地 PAC 网址 -Share Server Config...=分享服务器配置... -Scan QRCode from Screen...=扫描屏幕上的二维码... -Import URL from Clipboard...=从剪贴板导入URL... -Availability Statistics=统计可用性 -Show Logs...=显示日志... -Verbose Logging=详细记录日志 -Updates...=更新... -Check for Updates...=检查更新 -Check for Updates at Startup=启动时检查更新 -Check Pre-release Version=检查测试版更新 -Edit Hotkeys...=编辑快捷键... -About...=关于... -Help=帮助 -Quit=退出 -Edit Servers=编辑服务器 -Load Balance=负载均衡 -High Availability=高可用 -Choose by statistics=根据统计 - -# Config Form - -&Add=添加(&A) -&Delete=删除(&D) -Dupli&cate=复制(&C) -Server=服务器 -Server Addr=服务器地址 -Server Port=服务器端口 -Password=密码 -Show Password=显示密码 -Encryption=加密 -Plugin Program=插件程序 -Plugin Options=插件选项 -Need Plugin Argument=需要命令行参数 -Plugin Arguments=插件参数 -Proxy Port=代理端口 -Portable Mode=便携模式 -Restart required=需要重新启动SS -Remarks=备注 -Timeout(Sec)=超时(秒) -OK=确定 -Cancel=取消 -Apply=应用 -New server=未配置的服务器 -Move &Up=上移(&U) -Move D&own=下移(&O) - -#Statistics Config - -Enable Statistics=启用统计 -Ping Test=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=网络延迟 -Chart Mode=图表模式 -24h=24小时 -all=全部 - -# Proxy Form - -Edit Proxy=代理设置 -Use Proxy=使用代理 -Proxy Type=代理类型 -Proxy Addr=代理地址 -Proxy Port=代理端口 -If server has a plugin, proxy will not be used=若服务器含有插件,代理将不被使用 -Use Auth=使用认证 -Auth User=认证用户 -Auth Pwd=认证密码 - -# Log Form - -&File=文件(&F) -&Open Location=在资源管理器中打开(&O) -E&xit=退出(&X) -&View=视图(&V) -&Clear Logs=清空日志(&C) -Change &Font=设置字体(&F) -&Wrap Text=自动换行(&W) -&Top Most=置顶(&T) -&Show Toolbar=显示工具栏(&S) -Log Viewer=日志查看器 -Inbound=入站 -Outbound=出站 - -# QRCode Form - -QRCode and URL=二维码与 URL - -# PAC Url Form - -Edit Online PAC URL=编辑在线 PAC 网址 -Edit Online PAC URL...=编辑在线 PAC 网址... -Please input PAC Url=请输入 PAC 网址 - -# HotkeySettings Form - -Switch system proxy=切换系统代理状态 -Switch system proxy mode=切换系统代理模式 -Switch share over LAN=切换局域网共享 -Show Logs=显示日志 -Switch to prev server=切换上个服务器 -Switch to next server=切换下个服务器 -Reg All=注册全部快捷键 -Reg Hotkeys At Startup=启动时注册快捷键 - -# Messages - -Shadowsocks Error: {0}=Shadowsocks 错误: {0} -Port {0} already in use=端口 {0} 已被占用 -Port {0} is reserved by system=端口 {0} 是系统保留端口 -Invalid server address=非法服务器地址 -Illegal port number format=非法端口格式 -Illegal timeout format=非法超时格式 -Server IP can not be blank=服务器 IP 不能为空 -Password can not be blank=密码不能为空 -Port out of range=端口超出范围 -Port can't be 8123=端口不能为 8123 -Shadowsocks {0} Update Found=Shadowsocks {0} 更新 -No update is available=没有可用的更新 -Click here to update=点击这里升级 -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.=未发现二维码,尝试把它放大或移动到靠近屏幕中间的位置 -Shadowsocks is already running.=Shadowsocks 已经在运行。 -Find Shadowsocks icon in your notify tray.=请在任务栏里寻找 Shadowsocks 图标。 -If you want to start multiple Shadowsocks, make a copy in another directory.=如果想同时启动多个,可以另外复制一份到别的目录。 -Failed to decode QRCode=无法解析二维码 -Failed to update registry=无法修改注册表 -System Proxy On: =系统代理已启用: -Running: Port {0}=正在运行:端口 {0} -Unexpected error, shadowsocks will exit. Please report to=非预期错误,Shadowsocks将退出。请提交此错误到 -Unsupported operating system, use Windows Vista at least.=不支持的操作系统版本,最低需求为Windows Vista。 -Unsupported .NET Framework, please update to 4.6.2 or later.=当前 .NET Framework 版本过低,请升级至4.6.2或更新版本。 -Proxy request failed=代理请求失败 -Proxy handshake failed=代理握手失败 -Register hotkey failed=注册快捷键失败 -Cannot parse hotkey: {0}=解析快捷键失败: {0} -Timeout is invalid, it should not exceed {0}=超时无效,不应超过 {0} - -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=非法超时格式,无法自动保存是否丢弃修改 - -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=认证密码不能为空 diff --git a/shadowsocks-csharp/Data/zh_TW.txt b/shadowsocks-csharp/Data/zh_TW.txt deleted file mode 100644 index 5c2c19c5..00000000 --- a/shadowsocks-csharp/Data/zh_TW.txt +++ /dev/null @@ -1,156 +0,0 @@ -# translation for Traditional Chinese - -Shadowsocks=Shadowsocks - -# Menu items - -System Proxy=系統代理 -Disable=禁用 -PAC=PAC 模式 -Global=全局模式 -Servers=伺服器 -Edit Servers...=編輯伺服器... -Statistics Config...=統計設定檔... -Start on Boot=開機啟動 -Forward Proxy...=正向 Proxy 設定... -Allow other Devices to connect=允許其他裝置連入 -Local PAC=使用本機 PAC -Online PAC=使用線上 PAC -Edit Local PAC File...=編輯本機 PAC 檔案... -Update Local PAC from GFWList=從 GFWList 更新本機 PAC -Edit User Rule for GFWList...=編輯 GFWList 的使用者規則... -Secure Local PAC=安全本機 PAC -Copy Local PAC URL=複製本機 PAC 網址 -Share Server Config...=分享伺服器設定檔... -Scan QRCode from Screen...=掃描螢幕上的 QR 碼... -Import URL from Clipboard...=從剪貼簿匯入 URL... -Availability Statistics=統計可用性 -Show Logs...=顯示記錄檔... -Verbose Logging=詳細資訊記錄 -Updates...=更新... -Check for Updates...=檢查更新 -Check for Updates at Startup=啟動時檢查更新 -Check Pre-release Version=檢查發行前版本更新 -Edit Hotkeys...=編輯快速鍵... -About...=關於... -Help=說明 -Quit=結束 -Edit Servers=編輯伺服器 -Load Balance=負載平衡 -High Availability=高可用性 -Choose by statistics=根據統計 - -# Config Form - -&Add=新增 (&A) -&Delete=移除 (&D) -Dupli&cate=複製 (&C) -Server=伺服器 -Server Addr=伺服器位址 -Server Port=伺服器連接埠 -Password=密碼 -Show Password=顯示密碼 -Encryption=加密 -Plugin Program=外掛程式 -Plugin Options=外掛程式選項 -Plugin Arguments=外掛程式參數 -Proxy Port=Proxy 連接埠 -Portable Mode=便攜模式 -Restart required=需要重新啟動SS -Remarks=註解 -Timeout(Sec)=逾時 (秒) -OK=確定 -Cancel=取消 -Apply=應用 -New server=新伺服器 -Move &Up=上移 (&U) -Move D&own=下移 (&O) - -# 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=認證用戶 -Auth Pwd=認證口令 - -# Log Form - -&File=檔案 (&F) -&Open Location=在檔案總管中開啟 (&O) -E&xit=結束 (&X) -&View=檢視 (&V) -&Clear Logs=清除記錄檔 (&C) -Change &Font=變更字型 (&F) -&Wrap Text=自動換行 (&W) -&Top Most=置頂 (&T) -&Show Toolbar=顯示工具列 (&S) -Log Viewer=記錄檔檢視器 -Inbound=輸入 -Outbound=輸出 - -# QRCode Form - -QRCode and URL=QR 碼與 URL - -# PAC Url Form - -Edit Online PAC URL=編輯線上 PAC 網址 -Edit Online PAC URL...=編輯線上 PAC 網址... -Please input PAC Url=請輸入 PAC 網址 - -# HotkeySettings Form - -Switch system proxy=切換系統 Proxy 狀態 -Switch system proxy mode=切換系統 Proxy 模式 -Switch share over LAN=切換區域網路共用 -Show Logs=顯示記錄檔 -Switch to prev server=切換上一個伺服器 -Switch to next server=切換下一個伺服器 -Reg All=註冊所有快速鍵 -Reg Hotkeys At Startup=啟動時註冊快速鍵 - -# Messages - -Shadowsocks Error: {0}=Shadowsocks 錯誤: {0} -Port {0} already in use=連接埠號碼 {0} 已被使用 -Port {0} is reserved by system=連接埠號碼 {0} 由系統保留 -Invalid server address=無效伺服器位址 -Illegal port number format=無效連接埠號碼格式 -Illegal timeout format=無效逾時格式 -Server IP can not be blank=伺服器 IP 不能為空 -Password can not be blank=密碼不能為空 -Port out of range=連接埠號碼超出範圍 -Port can't be 8123=連接埠號碼不能為 8123 -Shadowsocks {0} Update Found=Shadowsocks {0} 更新 -No update is available=沒有可用的更新 -Click here to update=點按此處升級 -Shadowsocks is here=Shadowsocks 在這裡 -You can turn on/off Shadowsocks in the context menu=可以在右鍵選項單中開關 Shadowsocks -System Proxy Enabled=系統 Proxy 已啟用 -System Proxy Disabled=系統 Proxy 未啟用 -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.=未發現 QR 碼,嘗試把它放大或移動到靠近熒幕中間的位置 -Shadowsocks is already running.=Shadowsocks 已經在執行。 -Find Shadowsocks icon in your notify tray.=請在工作列裡尋找 Shadowsocks 圖示。 -If you want to start multiple Shadowsocks, make a copy in another directory.=如果想同時啟動多個,可以另外複製一份至別的目錄。 -Failed to decode QRCode=QR 碼解碼失敗 -Failed to update registry=無法修改登錄檔 -System Proxy On: =系統 Proxy 已啟用: -Running: Port {0}=正在執行:連接埠號碼 {0} -Unexpected error, shadowsocks will exit. Please report to=非預期錯誤,Shadowsocks 將結束。請報告此錯誤至 -Unsupported operating system, use Windows Vista at least.=不支援的作業系統版本,最低需求為 Windows Vista。 -Unsupported .NET Framework, please update to 4.6.2 or later.=目前 .NET Framework 版本過低,最低需求為4.6.2。 -Proxy request failed=Proxy 要求失敗 -Proxy handshake failed=Proxy 交握失敗 -Register hotkey failed=註冊快速鍵失敗 -Cannot parse hotkey: {0}=剖析快速鍵失敗: {0} -Timeout is invalid, it should not exceed {0}=逾時無效,不應超過 {0} -Auth user can not be blank=認證用戶不能為空 -Auth pwd can not be blank=認證口令不能為空 \ No newline at end of file diff --git a/shadowsocks-csharp/Properties/Resources.Designer.cs b/shadowsocks-csharp/Properties/Resources.Designer.cs index 4a601877..dea95e63 100644 --- a/shadowsocks-csharp/Properties/Resources.Designer.cs +++ b/shadowsocks-csharp/Properties/Resources.Designer.cs @@ -1,326 +1,259 @@ -//------------------------------------------------------------------------------ -// -// 此代码由工具生成。 -// 运行时版本:4.0.30319.42000 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace Shadowsocks.Properties { - using System; - - - /// - /// 一个强类型的资源类,用于查找本地化的字符串等。 - /// - // 此类是由 StronglyTypedResourceBuilder - // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 - // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen - // (以 /str 作为命令选项),或重新生成 VS 项目。 - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// 返回此类使用的缓存的 ResourceManager 实例。 - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Shadowsocks.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// 重写当前线程的 CurrentUICulture 属性 - /// 重写当前线程的 CurrentUICulture 属性。 - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// 查找类似 /* eslint-disable */ - ///// Was generated by gfwlist2pac in precise mode - ///// https://github.com/clowwindy/gfwlist2pac - /// - ///// 2019-10-06: More 'javascript' way to interaction with main program - ///// 2019-02-08: Updated to support shadowsocks-windows user rules. - /// - ///var proxy = __PROXY__; - ///var userrules = __USERRULES__; - ///var rules = __RULES__; - /// - ////* - ///* This file is part of Adblock Plus <http://adblockplus.org/>, - ///* Copyright (C) 2006-2014 Eyeo GmbH - ///* - ///* Adblock Plus is free software: you can redistribute it and/or [字符串的其余部分被截断]"; 的本地化字符串。 - /// - internal static string abp_js { - get { - return ResourceManager.GetString("abp_js", resourceCulture); - } - } - - /// - /// 查找类似 var __USERRULES__ = []; - ///var __RULES__ = [ - /// "|http://85.17.73.31/", - /// "||agnesb.fr", - /// "||akiba-web.com", - /// "||altrec.com", - /// "||angela-merkel.de", - /// "||angola.org", - /// "||apartmentratings.com", - /// "||apartments.com", - /// "||arena.taipei", - /// "||asianspiss.com", - /// "||assimp.org", - /// "||athenaeizou.com", - /// "||azubu.tv", - /// "||bankmobilevibe.com", - /// "||banorte.com", - /// "||bash-hackers.org", - /// "||beeg.com", - /// "||global.bing.com", - /// "||bloombergview.com", - /// " [字符串的其余部分被截断]"; 的本地化字符串。 - /// - internal static string default_abp_rule { - get { - return ResourceManager.GetString("default_abp_rule", resourceCulture); - } - } - - /// - /// 查找类似 # translation for Japanese - /// - ///Shadowsocks=Shadowsocks - /// - ///# Menu items - /// - ///System Proxy=システムプロキシ - ///Disable=無効 - ///PAC=PAC - ///Global=全般 - ///Servers=サーバー - ///Edit Servers...=サーバーの編集... - ///Statistics Config...=統計情報の設定... - ///Start on Boot=システムと同時に起動 - ///Forward Proxy...=フォワードプロキシの設定... - ///Allow other Devices to connect=他のデバイスからの接続を許可する - ///Local PAC=ローカル PAC - ///Online PAC=オンライン PAC - ///Edit Local PAC File...=ローカル PAC ファイルの編集... - ///Update Local PAC from GFWList=GFWList からローカル PAC を更新 - ///Edit User Rule for GFWList...=ユーザールールの編集... - ///Secure Local PA [字符串的其余部分被截断]"; 的本地化字符串。 - /// - internal static string ja { - get { - return ResourceManager.GetString("ja", resourceCulture); - } - } - - /// - /// 查找 System.Byte[] 类型的本地化资源。 - /// - internal static byte[] libsscrypto_dll { - get { - object obj = ResourceManager.GetObject("libsscrypto_dll", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// 查找类似 listen-address __PRIVOXY_BIND_IP__:__PRIVOXY_BIND_PORT__ - ///toggle 0 - ///logfile ss_privoxy.log - ///show-on-task-bar 0 - ///activity-animation 0 - ///forward-socks5 / __SOCKS_HOST__:__SOCKS_PORT__ . - ///max-client-connections 2048 - ///hide-console - /// 的本地化字符串。 - /// - internal static string privoxy_conf { - get { - return ResourceManager.GetString("privoxy_conf", resourceCulture); - } - } - - /// - /// 查找 System.Byte[] 类型的本地化资源。 - /// - internal static byte[] privoxy_exe { - get { - object obj = ResourceManager.GetObject("privoxy_exe", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// 查找 System.Drawing.Bitmap 类型的本地化资源。 - /// - internal static System.Drawing.Bitmap ss32Fill { - get { - object obj = ResourceManager.GetObject("ss32Fill", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// 查找 System.Drawing.Bitmap 类型的本地化资源。 - /// - internal static System.Drawing.Bitmap ss32In { - get { - object obj = ResourceManager.GetObject("ss32In", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// 查找 System.Drawing.Bitmap 类型的本地化资源。 - /// - internal static System.Drawing.Bitmap ss32Out { - get { - object obj = ResourceManager.GetObject("ss32Out", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// 查找 System.Drawing.Bitmap 类型的本地化资源。 - /// - internal static System.Drawing.Bitmap ss32Outline { - get { - object obj = ResourceManager.GetObject("ss32Outline", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// 查找 System.Drawing.Bitmap 类型的本地化资源。 - /// - internal static System.Drawing.Bitmap ssw128 { - get { - object obj = ResourceManager.GetObject("ssw128", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// 查找 System.Byte[] 类型的本地化资源。 - /// - internal static byte[] sysproxy_exe { - get { - object obj = ResourceManager.GetObject("sysproxy_exe", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// 查找 System.Byte[] 类型的本地化资源。 - /// - internal static byte[] sysproxy64_exe { - get { - object obj = ResourceManager.GetObject("sysproxy64_exe", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// 查找类似 ! Put user rules line by line in this file. - ///! See https://adblockplus.org/en/filter-cheatsheet - /// 的本地化字符串。 - /// - internal static string user_rule { - get { - return ResourceManager.GetString("user_rule", resourceCulture); - } - } - - /// - /// 查找类似 # translation for Simplified Chinese - /// - ///Shadowsocks=Shadowsocks - /// - ///# Menu items - /// - ///System Proxy=系统代理 - ///Disable=禁用 - ///PAC=PAC 模式 - ///Global=全局模式 - ///Servers=服务器 - ///Edit Servers...=编辑服务器... - ///Statistics Config...=统计配置... - ///Start on Boot=开机启动 - ///Forward Proxy...=正向代理设置... - ///Allow other Devices to connect=允许其他设备连入 - ///Local PAC=使用本地 PAC - ///Online PAC=使用在线 PAC - ///Edit Local PAC File...=编辑本地 PAC 文件... - ///Update Local PAC from GFWList=从 GFWList 更新本地 PAC - ///Edit User Rule for GFWList...=编辑 GFWList 的用户规则... - ///Secure Local PAC=保护本地 PAC - ///Copy Lo [字符串的其余部分被截断]"; 的本地化字符串。 - /// - internal static string zh_CN { - get { - return ResourceManager.GetString("zh_CN", resourceCulture); - } - } - - /// - /// 查找类似 # translation for Traditional Chinese - /// - ///Shadowsocks=Shadowsocks - /// - ///# Menu items - /// - ///System Proxy=系統代理 - ///Disable=禁用 - ///PAC=PAC 模式 - ///Global=全局模式 - ///Servers=伺服器 - ///Edit Servers...=編輯伺服器... - ///Statistics Config...=統計設定檔... - ///Start on Boot=開機啟動 - ///Forward Proxy...=正向 Proxy 設定... - ///Allow other Devices to connect=允許其他裝置連入 - ///Local PAC=使用本機 PAC - ///Online PAC=使用線上 PAC - ///Edit Local PAC File...=編輯本機 PAC 檔案... - ///Update Local PAC from GFWList=從 GFWList 更新本機 PAC - ///Edit User Rule for GFWList...=編輯 GFWList 的使用者規則... - ///Secure Local PAC=安全本機 PAC /// [字符串的其余部分被截断]"; 的本地化字符串。 - /// - internal static string zh_TW { - get { - return ResourceManager.GetString("zh_TW", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace Shadowsocks.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Shadowsocks.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找类似 /* eslint-disable */ + ///// Was generated by gfwlist2pac in precise mode + ///// https://github.com/clowwindy/gfwlist2pac + /// + ///// 2019-10-06: More 'javascript' way to interaction with main program + ///// 2019-02-08: Updated to support shadowsocks-windows user rules. + /// + ///var proxy = __PROXY__; + ///var userrules = __USERRULES__; + ///var rules = __RULES__; + /// + ////* + ///* This file is part of Adblock Plus <http://adblockplus.org/>, + ///* Copyright (C) 2006-2014 Eyeo GmbH + ///* + ///* Adblock Plus is free software: you can redistribute it and/or [字符串的其余部分被截断]"; 的本地化字符串。 + /// + internal static string abp_js { + get { + return ResourceManager.GetString("abp_js", resourceCulture); + } + } + + /// + /// 查找类似 var __USERRULES__ = []; + ///var __RULES__ = [ + /// "|http://85.17.73.31/", + /// "||agnesb.fr", + /// "||akiba-web.com", + /// "||altrec.com", + /// "||angela-merkel.de", + /// "||angola.org", + /// "||apartmentratings.com", + /// "||apartments.com", + /// "||arena.taipei", + /// "||asianspiss.com", + /// "||assimp.org", + /// "||athenaeizou.com", + /// "||azubu.tv", + /// "||bankmobilevibe.com", + /// "||banorte.com", + /// "||bash-hackers.org", + /// "||beeg.com", + /// "||global.bing.com", + /// "||bloombergview.com", + /// " [字符串的其余部分被截断]"; 的本地化字符串。 + /// + internal static string default_abp_rule { + get { + return ResourceManager.GetString("default_abp_rule", resourceCulture); + } + } + + /// + /// 查找类似 en,zh-CN,zh-TW,ja + ///,,, + ///Shadowsocks,Shadowsocks,Shadowsocks,Shadowsocks + ///,,, + ///System Proxy,系统代理,系統代理,システムプロキシ + ///Disable,禁用,禁用,無効 + ///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 + ///Online PAC,使用在线 PAC,使 [字符串的其余部分被截断]"; 的本地化字符串。 + /// + internal static string i18n_csv { + get { + return ResourceManager.GetString("i18n_csv", resourceCulture); + } + } + + /// + /// 查找 System.Byte[] 类型的本地化资源。 + /// + internal static byte[] libsscrypto_dll { + get { + object obj = ResourceManager.GetObject("libsscrypto_dll", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// 查找类似 listen-address __PRIVOXY_BIND_IP__:__PRIVOXY_BIND_PORT__ + ///toggle 0 + ///logfile ss_privoxy.log + ///show-on-task-bar 0 + ///activity-animation 0 + ///forward-socks5 / __SOCKS_HOST__:__SOCKS_PORT__ . + ///max-client-connections 2048 + ///hide-console + /// 的本地化字符串。 + /// + internal static string privoxy_conf { + get { + return ResourceManager.GetString("privoxy_conf", resourceCulture); + } + } + + /// + /// 查找 System.Byte[] 类型的本地化资源。 + /// + internal static byte[] privoxy_exe { + get { + object obj = ResourceManager.GetObject("privoxy_exe", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap ss32Fill { + get { + object obj = ResourceManager.GetObject("ss32Fill", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap ss32In { + get { + object obj = ResourceManager.GetObject("ss32In", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap ss32Out { + get { + object obj = ResourceManager.GetObject("ss32Out", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap ss32Outline { + get { + object obj = ResourceManager.GetObject("ss32Outline", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap ssw128 { + get { + object obj = ResourceManager.GetObject("ssw128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Byte[] 类型的本地化资源。 + /// + internal static byte[] sysproxy_exe { + get { + object obj = ResourceManager.GetObject("sysproxy_exe", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// 查找 System.Byte[] 类型的本地化资源。 + /// + internal static byte[] sysproxy64_exe { + get { + object obj = ResourceManager.GetObject("sysproxy64_exe", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// 查找类似 ! Put user rules line by line in this file. + ///! See https://adblockplus.org/en/filter-cheatsheet + /// 的本地化字符串。 + /// + internal static string user_rule { + get { + return ResourceManager.GetString("user_rule", resourceCulture); + } + } + } +} diff --git a/shadowsocks-csharp/Properties/Resources.resx b/shadowsocks-csharp/Properties/Resources.resx index 62305142..9661ee9a 100755 --- a/shadowsocks-csharp/Properties/Resources.resx +++ b/shadowsocks-csharp/Properties/Resources.resx @@ -124,8 +124,8 @@ ..\Data\default-abp-rule.js;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - ..\Data\ja.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + ..\Data\i18n.csv;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 ..\Data\libsscrypto.dll.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -160,10 +160,4 @@ ..\data\user-rule.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - ..\data\zh_CN.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - ..\Data\zh_TW.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - \ No newline at end of file diff --git a/shadowsocks-csharp/Util/ViewUtils.cs b/shadowsocks-csharp/Util/ViewUtils.cs index fab38037..43f54721 100644 --- a/shadowsocks-csharp/Util/ViewUtils.cs +++ b/shadowsocks-csharp/Util/ViewUtils.cs @@ -1,4 +1,5 @@ -using System; +using Shadowsocks.Controller; +using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; @@ -17,11 +18,21 @@ namespace Shadowsocks.Util { return Enumerable.Empty(); } - var children = control.Controls.OfType().ToList(); return children.SelectMany(GetChildControls).Concat(children); } + public static IEnumerable GetMenuItems(Menu m) + { + if (m?.MenuItems == null || m.MenuItems.Count == 0) return Enumerable.Empty(); + var children = new List(); + foreach (var item in m.MenuItems) + { + children.Add((MenuItem)item); + } + return children.SelectMany(GetMenuItems).Concat(children); + } + // Workaround NotifyIcon's 63 chars limit // https://stackoverflow.com/questions/579665/how-can-i-show-a-systray-tooltip-longer-than-63-chars public static void SetNotifyIconText(NotifyIcon ni, string text) @@ -74,7 +85,7 @@ namespace Shadowsocks.Util return newBitmap; } - public static Bitmap ResizeBitmap (Bitmap original, int width, int height) + public static Bitmap ResizeBitmap(Bitmap original, int width, int height) { Bitmap newBitmap = new Bitmap(width, height); using (Graphics g = Graphics.FromImage(newBitmap)) diff --git a/shadowsocks-csharp/View/ConfigForm.cs b/shadowsocks-csharp/View/ConfigForm.cs index 67edf735..8151dc58 100755 --- a/shadowsocks-csharp/View/ConfigForm.cs +++ b/shadowsocks-csharp/View/ConfigForm.cs @@ -1,10 +1,9 @@ -using System; -using System.Drawing; -using System.Windows.Forms; - using Shadowsocks.Controller; using Shadowsocks.Model; using Shadowsocks.Properties; +using System; +using System.Drawing; +using System.Windows.Forms; namespace Shadowsocks.View { @@ -40,30 +39,8 @@ namespace Shadowsocks.View private void UpdateTexts() { - AddButton.Text = I18N.GetString("&Add"); - DeleteButton.Text = I18N.GetString("&Delete"); - DuplicateButton.Text = I18N.GetString("Dupli&cate"); - IPLabel.Text = I18N.GetString("Server Addr"); - ServerPortLabel.Text = I18N.GetString("Server Port"); - PasswordLabel.Text = I18N.GetString("Password"); - ShowPasswdCheckBox.Text = I18N.GetString("Show Password"); - EncryptionLabel.Text = I18N.GetString("Encryption"); - PluginLabel.Text = I18N.GetString("Plugin Program"); - PluginOptionsLabel.Text = I18N.GetString("Plugin Options"); - PluginArgumentsLabel.Text = I18N.GetString("Plugin Arguments"); - NeedPluginArgCheckBox.Text = I18N.GetString("Need Plugin Argument"); - ProxyPortLabel.Text = I18N.GetString("Proxy Port"); - PortableModeCheckBox.Text = I18N.GetString("Portable Mode"); + I18N.TranslateForm(this); toolTip1.SetToolTip(PortableModeCheckBox, I18N.GetString("Restart required")); - RemarksLabel.Text = I18N.GetString("Remarks"); - TimeoutLabel.Text = I18N.GetString("Timeout(Sec)"); - ServerGroupBox.Text = I18N.GetString("Server"); - OKButton.Text = I18N.GetString("OK"); - MyCancelButton.Text = I18N.GetString("Cancel"); - ApplyButton.Text = I18N.GetString("Apply"); - MoveUpButton.Text = I18N.GetString("Move &Up"); - MoveDownButton.Text = I18N.GetString("Move D&own"); - Text = I18N.GetString("Edit Servers"); } private void SetupValueChangedListeners() @@ -158,7 +135,7 @@ namespace Shadowsocks.View LoadServerNameListToUI(_modifiedConfiguration); - _lastSelectedIndex = (ServersListBox.SelectedIndex = ( _lastSelectedIndex == ServersListBox.Items.Count ? lastIndex : lastIndex - 1)); + _lastSelectedIndex = (ServersListBox.SelectedIndex = (_lastSelectedIndex == ServersListBox.Items.Count ? lastIndex : lastIndex - 1)); ServersListBox.SelectedIndexChanged += ServersListBox_SelectedIndexChanged; return true; diff --git a/shadowsocks-csharp/View/HotkeySettingsForm.cs b/shadowsocks-csharp/View/HotkeySettingsForm.cs index d5f44edc..b55e9ef1 100644 --- a/shadowsocks-csharp/View/HotkeySettingsForm.cs +++ b/shadowsocks-csharp/View/HotkeySettingsForm.cs @@ -1,13 +1,10 @@ -using System; -using System.Collections.Generic; +using Shadowsocks.Controller; +using Shadowsocks.Model; +using Shadowsocks.Properties; +using System; using System.Drawing; -using System.Linq; using System.Text; using System.Windows.Forms; - -using Shadowsocks.Controller; -using Shadowsocks.Model; -using Shadowsocks.Properties; using static Shadowsocks.Controller.HotkeyReg; namespace Shadowsocks.View @@ -33,18 +30,7 @@ namespace Shadowsocks.View private void UpdateTexts() { - // I18N stuff - SwitchSystemProxyLabel.Text = I18N.GetString("Switch system proxy"); - SwitchProxyModeLabel.Text = I18N.GetString("Switch system proxy mode"); - SwitchAllowLanLabel.Text = I18N.GetString("Switch share over LAN"); - ShowLogsLabel.Text = I18N.GetString("Show Logs"); - ServerMoveUpLabel.Text = I18N.GetString("Switch to prev server"); - ServerMoveDownLabel.Text = I18N.GetString("Switch to next server"); - RegHotkeysAtStartupLabel.Text = I18N.GetString("Reg Hotkeys At Startup"); - btnOK.Text = I18N.GetString("OK"); - btnCancel.Text = I18N.GetString("Cancel"); - btnRegisterAll.Text = I18N.GetString("Reg All"); - this.Text = I18N.GetString("Edit Hotkeys..."); + I18N.TranslateForm(this); } private void controller_ConfigChanged(object sender, EventArgs e) diff --git a/shadowsocks-csharp/View/HotkeySettingsForm.designer.cs b/shadowsocks-csharp/View/HotkeySettingsForm.designer.cs index 6e412edb..3d9428ec 100644 --- a/shadowsocks-csharp/View/HotkeySettingsForm.designer.cs +++ b/shadowsocks-csharp/View/HotkeySettingsForm.designer.cs @@ -33,6 +33,7 @@ this.btnCancel = new System.Windows.Forms.Button(); this.btnRegisterAll = new System.Windows.Forms.Button(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.RegHotkeysAtStartupLabel = new System.Windows.Forms.Label(); this.SwitchSystemProxyLabel = new System.Windows.Forms.Label(); this.SwitchProxyModeLabel = new System.Windows.Forms.Label(); this.SwitchAllowLanLabel = new System.Windows.Forms.Label(); @@ -45,7 +46,6 @@ this.ShowLogsTextBox = new System.Windows.Forms.TextBox(); this.ServerMoveUpTextBox = new System.Windows.Forms.TextBox(); this.ServerMoveDownTextBox = new System.Windows.Forms.TextBox(); - this.RegHotkeysAtStartupLabel = new System.Windows.Forms.Label(); this.RegHotkeysAtStartupCheckBox = new System.Windows.Forms.CheckBox(); flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); flowLayoutPanel1.SuspendLayout(); @@ -59,20 +59,21 @@ flowLayoutPanel1.Controls.Add(this.btnCancel); flowLayoutPanel1.Controls.Add(this.btnRegisterAll); flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.BottomUp; - flowLayoutPanel1.Location = new System.Drawing.Point(0, 218); + flowLayoutPanel1.Location = new System.Drawing.Point(0, 274); flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); flowLayoutPanel1.Name = "flowLayoutPanel1"; - flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 0, 16, 0); + flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 0, 20, 0); flowLayoutPanel1.RightToLeft = System.Windows.Forms.RightToLeft.Yes; - flowLayoutPanel1.Size = new System.Drawing.Size(475, 43); + flowLayoutPanel1.Size = new System.Drawing.Size(594, 52); flowLayoutPanel1.TabIndex = 6; // // btnOK // this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; - this.btnOK.Location = new System.Drawing.Point(333, 9); + this.btnOK.Location = new System.Drawing.Point(416, 9); + this.btnOK.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.btnOK.Name = "btnOK"; - this.btnOK.Size = new System.Drawing.Size(123, 31); + this.btnOK.Size = new System.Drawing.Size(154, 39); this.btnOK.TabIndex = 0; this.btnOK.Text = "OK"; this.btnOK.UseVisualStyleBackColor = true; @@ -81,9 +82,10 @@ // btnCancel // this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnCancel.Location = new System.Drawing.Point(204, 9); + this.btnCancel.Location = new System.Drawing.Point(254, 9); + this.btnCancel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.btnCancel.Name = "btnCancel"; - this.btnCancel.Size = new System.Drawing.Size(123, 31); + this.btnCancel.Size = new System.Drawing.Size(154, 39); this.btnCancel.TabIndex = 1; this.btnCancel.Text = "Cancel"; this.btnCancel.UseVisualStyleBackColor = true; @@ -92,9 +94,10 @@ // btnRegisterAll // this.btnRegisterAll.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnRegisterAll.Location = new System.Drawing.Point(75, 9); + this.btnRegisterAll.Location = new System.Drawing.Point(92, 9); + this.btnRegisterAll.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.btnRegisterAll.Name = "btnRegisterAll"; - this.btnRegisterAll.Size = new System.Drawing.Size(123, 31); + this.btnRegisterAll.Size = new System.Drawing.Size(154, 39); this.btnRegisterAll.TabIndex = 2; this.btnRegisterAll.Text = "Reg All"; this.btnRegisterAll.UseVisualStyleBackColor = true; @@ -122,6 +125,7 @@ this.tableLayoutPanel1.Controls.Add(this.RegHotkeysAtStartupCheckBox, 1, 6); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 8; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.16726F)); @@ -131,44 +135,56 @@ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.7784F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.38949F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.16309F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(491, 261); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(614, 326); this.tableLayoutPanel1.TabIndex = 0; // + // RegHotkeysAtStartupLabel + // + this.RegHotkeysAtStartupLabel.AutoSize = true; + this.RegHotkeysAtStartupLabel.Dock = System.Windows.Forms.DockStyle.Right; + this.RegHotkeysAtStartupLabel.Location = new System.Drawing.Point(40, 235); + this.RegHotkeysAtStartupLabel.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); + this.RegHotkeysAtStartupLabel.Name = "RegHotkeysAtStartupLabel"; + this.RegHotkeysAtStartupLabel.Size = new System.Drawing.Size(199, 39); + this.RegHotkeysAtStartupLabel.TabIndex = 16; + this.RegHotkeysAtStartupLabel.Text = "Reg Hotkeys At Startup"; + this.RegHotkeysAtStartupLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // // SwitchSystemProxyLabel // this.SwitchSystemProxyLabel.AutoSize = true; this.SwitchSystemProxyLabel.Dock = System.Windows.Forms.DockStyle.Right; - this.SwitchSystemProxyLabel.Location = new System.Drawing.Point(50, 0); - this.SwitchSystemProxyLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); + this.SwitchSystemProxyLabel.Location = new System.Drawing.Point(63, 0); + this.SwitchSystemProxyLabel.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); this.SwitchSystemProxyLabel.Name = "SwitchSystemProxyLabel"; - this.SwitchSystemProxyLabel.Size = new System.Drawing.Size(147, 31); + this.SwitchSystemProxyLabel.Size = new System.Drawing.Size(176, 39); this.SwitchSystemProxyLabel.TabIndex = 0; - this.SwitchSystemProxyLabel.Text = "Enable System Proxy"; + this.SwitchSystemProxyLabel.Text = "Switch system proxy"; this.SwitchSystemProxyLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // SwitchProxyModeLabel // this.SwitchProxyModeLabel.AutoSize = true; this.SwitchProxyModeLabel.Dock = System.Windows.Forms.DockStyle.Right; - this.SwitchProxyModeLabel.Location = new System.Drawing.Point(8, 31); - this.SwitchProxyModeLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); + this.SwitchProxyModeLabel.Location = new System.Drawing.Point(10, 39); + this.SwitchProxyModeLabel.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); this.SwitchProxyModeLabel.Name = "SwitchProxyModeLabel"; - this.SwitchProxyModeLabel.Size = new System.Drawing.Size(189, 31); + this.SwitchProxyModeLabel.Size = new System.Drawing.Size(229, 39); this.SwitchProxyModeLabel.TabIndex = 1; - this.SwitchProxyModeLabel.Text = "Switch System Proxy Mode"; + this.SwitchProxyModeLabel.Text = "Switch system proxy mode"; this.SwitchProxyModeLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // SwitchAllowLanLabel // this.SwitchAllowLanLabel.AutoSize = true; this.SwitchAllowLanLabel.Dock = System.Windows.Forms.DockStyle.Right; - this.SwitchAllowLanLabel.Location = new System.Drawing.Point(33, 62); - this.SwitchAllowLanLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); + this.SwitchAllowLanLabel.Location = new System.Drawing.Point(39, 78); + this.SwitchAllowLanLabel.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); this.SwitchAllowLanLabel.Name = "SwitchAllowLanLabel"; - this.SwitchAllowLanLabel.Size = new System.Drawing.Size(164, 31); + this.SwitchAllowLanLabel.Size = new System.Drawing.Size(200, 39); this.SwitchAllowLanLabel.TabIndex = 3; this.SwitchAllowLanLabel.Text = "Allow Clients from LAN"; this.SwitchAllowLanLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -177,10 +193,10 @@ // this.ShowLogsLabel.AutoSize = true; this.ShowLogsLabel.Dock = System.Windows.Forms.DockStyle.Right; - this.ShowLogsLabel.Location = new System.Drawing.Point(107, 93); - this.ShowLogsLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); + this.ShowLogsLabel.Location = new System.Drawing.Point(129, 117); + this.ShowLogsLabel.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); this.ShowLogsLabel.Name = "ShowLogsLabel"; - this.ShowLogsLabel.Size = new System.Drawing.Size(90, 31); + this.ShowLogsLabel.Size = new System.Drawing.Size(110, 39); this.ShowLogsLabel.TabIndex = 4; this.ShowLogsLabel.Text = "Show Logs..."; this.ShowLogsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -189,34 +205,34 @@ // this.ServerMoveUpLabel.AutoSize = true; this.ServerMoveUpLabel.Dock = System.Windows.Forms.DockStyle.Right; - this.ServerMoveUpLabel.Location = new System.Drawing.Point(128, 124); - this.ServerMoveUpLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); + this.ServerMoveUpLabel.Location = new System.Drawing.Point(25, 156); + this.ServerMoveUpLabel.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); this.ServerMoveUpLabel.Name = "ServerMoveUpLabel"; - this.ServerMoveUpLabel.Size = new System.Drawing.Size(69, 32); + this.ServerMoveUpLabel.Size = new System.Drawing.Size(214, 40); this.ServerMoveUpLabel.TabIndex = 4; - this.ServerMoveUpLabel.Text = "Move up"; + this.ServerMoveUpLabel.Text = "Switch to previous server"; this.ServerMoveUpLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // ServerMoveDownLabel // this.ServerMoveDownLabel.AutoSize = true; this.ServerMoveDownLabel.Dock = System.Windows.Forms.DockStyle.Right; - this.ServerMoveDownLabel.Location = new System.Drawing.Point(106, 156); - this.ServerMoveDownLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); + this.ServerMoveDownLabel.Location = new System.Drawing.Point(60, 196); + this.ServerMoveDownLabel.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); this.ServerMoveDownLabel.Name = "ServerMoveDownLabel"; - this.ServerMoveDownLabel.Size = new System.Drawing.Size(91, 31); + this.ServerMoveDownLabel.Size = new System.Drawing.Size(179, 39); this.ServerMoveDownLabel.TabIndex = 4; - this.ServerMoveDownLabel.Text = "Move Down"; + this.ServerMoveDownLabel.Text = "Switch to next server"; this.ServerMoveDownLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // SwitchSystemProxyTextBox // this.SwitchSystemProxyTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.SwitchSystemProxyTextBox.Location = new System.Drawing.Point(208, 3); - this.SwitchSystemProxyTextBox.Margin = new System.Windows.Forms.Padding(3, 3, 16, 3); + this.SwitchSystemProxyTextBox.Location = new System.Drawing.Point(253, 4); + this.SwitchSystemProxyTextBox.Margin = new System.Windows.Forms.Padding(4, 4, 20, 4); this.SwitchSystemProxyTextBox.Name = "SwitchSystemProxyTextBox"; this.SwitchSystemProxyTextBox.ReadOnly = true; - this.SwitchSystemProxyTextBox.Size = new System.Drawing.Size(276, 25); + this.SwitchSystemProxyTextBox.Size = new System.Drawing.Size(344, 29); this.SwitchSystemProxyTextBox.TabIndex = 7; this.SwitchSystemProxyTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.HotkeyDown); this.SwitchSystemProxyTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.HotkeyUp); @@ -224,11 +240,11 @@ // SwitchProxyModeTextBox // this.SwitchProxyModeTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.SwitchProxyModeTextBox.Location = new System.Drawing.Point(208, 34); - this.SwitchProxyModeTextBox.Margin = new System.Windows.Forms.Padding(3, 3, 16, 3); + this.SwitchProxyModeTextBox.Location = new System.Drawing.Point(253, 43); + this.SwitchProxyModeTextBox.Margin = new System.Windows.Forms.Padding(4, 4, 20, 4); this.SwitchProxyModeTextBox.Name = "SwitchProxyModeTextBox"; this.SwitchProxyModeTextBox.ReadOnly = true; - this.SwitchProxyModeTextBox.Size = new System.Drawing.Size(276, 25); + this.SwitchProxyModeTextBox.Size = new System.Drawing.Size(344, 29); this.SwitchProxyModeTextBox.TabIndex = 8; this.SwitchProxyModeTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.HotkeyDown); this.SwitchProxyModeTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.HotkeyUp); @@ -236,11 +252,11 @@ // SwitchAllowLanTextBox // this.SwitchAllowLanTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.SwitchAllowLanTextBox.Location = new System.Drawing.Point(208, 65); - this.SwitchAllowLanTextBox.Margin = new System.Windows.Forms.Padding(3, 3, 16, 3); + this.SwitchAllowLanTextBox.Location = new System.Drawing.Point(253, 82); + this.SwitchAllowLanTextBox.Margin = new System.Windows.Forms.Padding(4, 4, 20, 4); this.SwitchAllowLanTextBox.Name = "SwitchAllowLanTextBox"; this.SwitchAllowLanTextBox.ReadOnly = true; - this.SwitchAllowLanTextBox.Size = new System.Drawing.Size(276, 25); + this.SwitchAllowLanTextBox.Size = new System.Drawing.Size(344, 29); this.SwitchAllowLanTextBox.TabIndex = 10; this.SwitchAllowLanTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.HotkeyDown); this.SwitchAllowLanTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.HotkeyUp); @@ -248,11 +264,11 @@ // ShowLogsTextBox // this.ShowLogsTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.ShowLogsTextBox.Location = new System.Drawing.Point(208, 96); - this.ShowLogsTextBox.Margin = new System.Windows.Forms.Padding(3, 3, 16, 3); + this.ShowLogsTextBox.Location = new System.Drawing.Point(253, 121); + this.ShowLogsTextBox.Margin = new System.Windows.Forms.Padding(4, 4, 20, 4); this.ShowLogsTextBox.Name = "ShowLogsTextBox"; this.ShowLogsTextBox.ReadOnly = true; - this.ShowLogsTextBox.Size = new System.Drawing.Size(276, 25); + this.ShowLogsTextBox.Size = new System.Drawing.Size(344, 29); this.ShowLogsTextBox.TabIndex = 11; this.ShowLogsTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.HotkeyDown); this.ShowLogsTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.HotkeyUp); @@ -260,11 +276,11 @@ // ServerMoveUpTextBox // this.ServerMoveUpTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.ServerMoveUpTextBox.Location = new System.Drawing.Point(208, 127); - this.ServerMoveUpTextBox.Margin = new System.Windows.Forms.Padding(3, 3, 16, 3); + this.ServerMoveUpTextBox.Location = new System.Drawing.Point(253, 160); + this.ServerMoveUpTextBox.Margin = new System.Windows.Forms.Padding(4, 4, 20, 4); this.ServerMoveUpTextBox.Name = "ServerMoveUpTextBox"; this.ServerMoveUpTextBox.ReadOnly = true; - this.ServerMoveUpTextBox.Size = new System.Drawing.Size(276, 25); + this.ServerMoveUpTextBox.Size = new System.Drawing.Size(344, 29); this.ServerMoveUpTextBox.TabIndex = 12; this.ServerMoveUpTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.HotkeyDown); this.ServerMoveUpTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.HotkeyUp); @@ -272,45 +288,33 @@ // ServerMoveDownTextBox // this.ServerMoveDownTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.ServerMoveDownTextBox.Location = new System.Drawing.Point(208, 159); - this.ServerMoveDownTextBox.Margin = new System.Windows.Forms.Padding(3, 3, 16, 3); + this.ServerMoveDownTextBox.Location = new System.Drawing.Point(253, 200); + this.ServerMoveDownTextBox.Margin = new System.Windows.Forms.Padding(4, 4, 20, 4); this.ServerMoveDownTextBox.Name = "ServerMoveDownTextBox"; this.ServerMoveDownTextBox.ReadOnly = true; - this.ServerMoveDownTextBox.Size = new System.Drawing.Size(276, 25); + this.ServerMoveDownTextBox.Size = new System.Drawing.Size(344, 29); this.ServerMoveDownTextBox.TabIndex = 13; this.ServerMoveDownTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.HotkeyDown); this.ServerMoveDownTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.HotkeyUp); // - // RegHotkeysAtStartupLabel - // - this.RegHotkeysAtStartupLabel.AutoSize = true; - this.RegHotkeysAtStartupLabel.Dock = System.Windows.Forms.DockStyle.Right; - this.RegHotkeysAtStartupLabel.Location = new System.Drawing.Point(32, 187); - this.RegHotkeysAtStartupLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); - this.RegHotkeysAtStartupLabel.Name = "RegHotkeysAtStartupLabel"; - this.RegHotkeysAtStartupLabel.Size = new System.Drawing.Size(165, 31); - this.RegHotkeysAtStartupLabel.TabIndex = 16; - this.RegHotkeysAtStartupLabel.Text = "Reg Hotkeys At Startup"; - this.RegHotkeysAtStartupLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // // RegHotkeysAtStartupCheckBox // this.RegHotkeysAtStartupCheckBox.AutoSize = true; - this.RegHotkeysAtStartupCheckBox.Location = new System.Drawing.Point(208, 196); - this.RegHotkeysAtStartupCheckBox.Margin = new System.Windows.Forms.Padding(3, 9, 9, 9); + this.RegHotkeysAtStartupCheckBox.Location = new System.Drawing.Point(253, 246); + this.RegHotkeysAtStartupCheckBox.Margin = new System.Windows.Forms.Padding(4, 11, 11, 11); this.RegHotkeysAtStartupCheckBox.Name = "RegHotkeysAtStartupCheckBox"; - this.RegHotkeysAtStartupCheckBox.Size = new System.Drawing.Size(15, 13); + this.RegHotkeysAtStartupCheckBox.Size = new System.Drawing.Size(18, 17); this.RegHotkeysAtStartupCheckBox.TabIndex = 17; this.RegHotkeysAtStartupCheckBox.UseVisualStyleBackColor = true; // // HotkeySettingsForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(491, 261); + this.ClientSize = new System.Drawing.Size(614, 326); this.Controls.Add(this.tableLayoutPanel1); this.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "HotkeySettingsForm"; diff --git a/shadowsocks-csharp/View/LogForm.cs b/shadowsocks-csharp/View/LogForm.cs index 1a60fbd4..ba4e76cf 100644 --- a/shadowsocks-csharp/View/LogForm.cs +++ b/shadowsocks-csharp/View/LogForm.cs @@ -145,21 +145,7 @@ namespace Shadowsocks.View private void UpdateTexts() { - FileMenuItem.Text = I18N.GetString("&File"); - OpenLocationMenuItem.Text = I18N.GetString("&Open Location"); - ExitMenuItem.Text = I18N.GetString("E&xit"); - ClearLogsButton.Text = I18N.GetString("&Clear Logs"); - ChangeFontButton.Text = I18N.GetString("Change &Font"); - WrapTextCheckBox.Text = I18N.GetString("&Wrap Text"); - TopMostCheckBox.Text = I18N.GetString("&Top Most"); - ViewMenuItem.Text = I18N.GetString("&View"); - ClearLogsMenuItem.Text = I18N.GetString("&Clear Logs"); - ChangeFontMenuItem.Text = I18N.GetString("Change &Font"); - WrapTextMenuItem.Text = I18N.GetString("&Wrap Text"); - TopMostMenuItem.Text = I18N.GetString("&Top Most"); - ShowToolbarMenuItem.Text = I18N.GetString("&Show Toolbar"); - Text = I18N.GetString("Log Viewer"); - // traffic chart + I18N.TranslateForm(this); trafficChart.Series["Inbound"].LegendText = I18N.GetString("Inbound"); trafficChart.Series["Outbound"].LegendText = I18N.GetString("Outbound"); } diff --git a/shadowsocks-csharp/View/ProxyForm.cs b/shadowsocks-csharp/View/ProxyForm.cs index ef01407a..218f296f 100644 --- a/shadowsocks-csharp/View/ProxyForm.cs +++ b/shadowsocks-csharp/View/ProxyForm.cs @@ -31,18 +31,7 @@ namespace Shadowsocks.View private void UpdateTexts() { - UseProxyCheckBox.Text = I18N.GetString("Use Proxy"); - ProxyTypeLabel.Text = I18N.GetString("Proxy Type"); - ProxyAddrLabel.Text = I18N.GetString("Proxy Addr"); - ProxyPortLabel.Text = I18N.GetString("Proxy Port"); - ProxyTimeoutLabel.Text = I18N.GetString("Timeout(Sec)"); - ProxyNotificationLabel.Text = I18N.GetString("If server has a plugin, proxy will not be used"); - UseAuthCheckBox.Text = I18N.GetString("Use Auth"); - AuthUserLabel.Text = I18N.GetString("Auth User"); - AuthPwdLabel.Text = I18N.GetString("Auth Pwd"); - OKButton.Text = I18N.GetString("OK"); - MyCancelButton.Text = I18N.GetString("Cancel"); - this.Text = I18N.GetString("Edit Proxy"); + I18N.TranslateForm(this); } private void controller_ConfigChanged(object sender, EventArgs e) diff --git a/shadowsocks-csharp/View/StatisticsStrategyConfigurationForm.cs b/shadowsocks-csharp/View/StatisticsStrategyConfigurationForm.cs index a029ff7f..dac87c3b 100644 --- a/shadowsocks-csharp/View/StatisticsStrategyConfigurationForm.cs +++ b/shadowsocks-csharp/View/StatisticsStrategyConfigurationForm.cs @@ -38,17 +38,7 @@ namespace Shadowsocks.View private void UpdateTexts() { - Control[] controls = new Control[] - { - StatisticsEnabledCheckBox,PingCheckBox,PackagePerPingLabel, - byHourOfDayCheckBox,CollectDataPerLabel,MinutesLabel1,KeepChoiceForLabel,MinutesLabel2, - FinalScoreLabel,chartModeSelector,dayMode,allMode, - OKButton,CancelButton - }; - foreach (var item in controls) - { - item.Text = I18N.GetString(item.Text); - } + I18N.TranslateForm(this); foreach (var item in StatisticsChart.Series) { diff --git a/shadowsocks-csharp/shadowsocks-csharp.csproj b/shadowsocks-csharp/shadowsocks-csharp.csproj index d1b63f19..dd59f561 100644 --- a/shadowsocks-csharp/shadowsocks-csharp.csproj +++ b/shadowsocks-csharp/shadowsocks-csharp.csproj @@ -255,6 +255,7 @@ Designer + @@ -270,9 +271,6 @@ - - -