diff --git a/src/connectionmanager.cpp b/src/connectionmanager.cpp index c0532cb5..847c7110 100644 --- a/src/connectionmanager.cpp +++ b/src/connectionmanager.cpp @@ -877,6 +877,13 @@ bool ConnectionManager::RequireUpgrade(void) DWORD WINAPI ConnectionManager::ConnectionManagerUpgradeThread(void* object) { + // We do not want to upgrade if we're running on a legacy version of Windows. + if (IsOSLegacy()) + { + my_print(NOT_SENSITIVE, false, _T("Legacy OS detected; disabling upgrade via VPN")); + return 0; + } + my_print(NOT_SENSITIVE, true, _T("%s: enter"), __TFUNCTION__); my_print(NOT_SENSITIVE, false, _T("Downloading new version...")); diff --git a/src/diagnostic_info.cpp b/src/diagnostic_info.cpp index e305cae3..89c2a72c 100644 --- a/src/diagnostic_info.cpp +++ b/src/diagnostic_info.cpp @@ -697,6 +697,11 @@ string GetClientPlatform() string(CLIENT_PLATFORM) + "_" + WStringToUTF8(sysInfo.version) + "_" + WStringToUTF8(mshtmlVersion); + + if (IsOSLegacy()) { + cachedResult += "_LEGACY"; + } + return cachedResult; } diff --git a/src/psiclient.cpp b/src/psiclient.cpp index 79d8721f..5a8de2d7 100644 --- a/src/psiclient.cpp +++ b/src/psiclient.cpp @@ -326,9 +326,14 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_PSIPHON_CREATED: { // Display client version number - my_print(NOT_SENSITIVE, false, (tstring(_T("Client Version: ")) + UTF8ToWString(CLIENT_VERSION)).c_str()); + string clientVersion = "Client Version: "s + CLIENT_VERSION; + if (IsOSLegacy()) + { + clientVersion += " LEGACY"; + } + my_print(NOT_SENSITIVE, false, UTF8ToWString(clientVersion).c_str()); - if (!IsOSSupported()) + if (IsOSUnsupported()) { // We're not showing the main app window, as it will probably be garbage // and the app should close momentarily. diff --git a/src/psiclient.rc b/src/psiclient.rc index 18a0a38a..13cc587d 100644 Binary files a/src/psiclient.rc and b/src/psiclient.rc differ diff --git a/src/psiclient2015.vcxproj b/src/psiclient2015.vcxproj index 9ec145b4..124f9191 100644 --- a/src/psiclient2015.vcxproj +++ b/src/psiclient2015.vcxproj @@ -43,10 +43,12 @@ true psiphon + false false psiphon + false @@ -366,6 +368,9 @@ + + + diff --git a/src/psiclient2015.vcxproj.filters b/src/psiclient2015.vcxproj.filters index a125754b..5cacd4f3 100644 --- a/src/psiclient2015.vcxproj.filters +++ b/src/psiclient2015.vcxproj.filters @@ -577,4 +577,7 @@ + + + \ No newline at end of file diff --git a/src/psiclient_ui.cpp b/src/psiclient_ui.cpp index 3d726ce6..88b202d1 100644 --- a/src/psiclient_ui.cpp +++ b/src/psiclient_ui.cpp @@ -77,7 +77,7 @@ void CreateHTMLControl(HWND hWndParent, float dpiScaling) { initJSON["Cookies"] = Settings::GetCookies(); initJSON["Config"] = Json::Value(); initJSON["Config"]["ClientVersion"] = CLIENT_VERSION; - initJSON["Config"]["ClientBuild"] = GetBuildTimestamp(); + initJSON["Config"]["ClientBuild"] = GetBuildTimestamp() + (IsOSLegacy() ? ".LEGACY" : ""); initJSON["Config"]["Language"] = WStringToUTF8(GetLocaleID()); initJSON["Config"]["Banner"] = "banner.png"; initJSON["Config"]["InfoURL"] = WStringToUTF8(INFO_LINK_URL); @@ -365,7 +365,7 @@ static void AddStringTableEntry(const string& utf8EntryJson) // As soon as the OS_UNSUPPORTED string is available, do the OS check. if (key == STRING_KEY_OS_UNSUPPORTED) { - EnforceOSSupport(g_hWnd, wideStr); + EnforceOSSupport(g_hWnd, wideStr, FAQ_URL); } } diff --git a/src/psiphon.manifest b/src/psiphon.manifest new file mode 100644 index 00000000..4507b2d9 --- /dev/null +++ b/src/psiphon.manifest @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/psiphon_tunnel_core_utilities.cpp b/src/psiphon_tunnel_core_utilities.cpp index 7fb231cd..be96319b 100644 --- a/src/psiphon_tunnel_core_utilities.cpp +++ b/src/psiphon_tunnel_core_utilities.cpp @@ -228,9 +228,19 @@ bool WriteParameterFiles(const WriteParameterFilesIn& in, WriteParameterFilesOut out.oldClientUpgradeFilename = filesystem::path(shortDataStoreDirectory).append(UPGRADE_EXE_NAME); config["MigrateUpgradeDownloadFilename"] = WStringToUTF8(out.oldClientUpgradeFilename); - config["UpgradeDownloadURLs"] = LoadJSONArray(UPGRADE_URLS_JSON); config["UpgradeDownloadClientVersionHeader"] = string("x-amz-meta-psiphon-client-version"); - config["EnableUpgradeDownload"] = true; + config["UpgradeDownloadURLs"] = LoadJSONArray(UPGRADE_URLS_JSON); + + // We do not want to upgrade if we're running on a legacy version of Windows. + if (IsOSLegacy()) + { + my_print(NOT_SENSITIVE, false, _T("Legacy OS detected; disabling upgrade via tunnel-core")); + config["EnableUpgradeDownload"] = false; + } + else + { + config["EnableUpgradeDownload"] = true; + } // Newer versions of tunnel-core download the upgrade file to its own data directory. Both oldClientUpgradeFilename and // newClientUpgradeFilename should be deleted when Psiphon starts if they exist. diff --git a/src/utilities.cpp b/src/utilities.cpp index 26345c1f..c76db9fd 100644 --- a/src/utilities.cpp +++ b/src/utilities.cpp @@ -1839,19 +1839,47 @@ wstring GetDeviceRegion() return L""; } -bool IsOSSupported() +// This define and function are copied from the Windows 10.0 SDK. When we are ready to +// upgrade the Target Version (which will properly give us access to these), we should +// remove these. +#define _WIN32_WINNT_WIN10 0x0A00 +VERSIONHELPERAPI IsWindows10OrGreater() { - return IsWindows7OrGreater(); + return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN10), LOBYTE(_WIN32_WINNT_WIN10), 0); } -void EnforceOSSupport(HWND parentWnd, const wstring& message) +/// Should be true iff this is the last version to support a deprecated Windows OS version +/// (or versions). It will result in upgrades being blocked for users on that OS version. +/// When changing this value, the versions used in IsOSUnsupported and/or IsOSLegacy +/// must change. +#define IS_LEGACY_BUILD true + +bool IsOSUnsupported() { - if (IsOSSupported()) + // We no longer support Windows XP or Vista. + return !IsWindows7OrGreater(); +} + +bool IsOSLegacy() +{ + // Windows 7, 8, and 8.1 are considered legacy -- this is the last build + // that will support them. + return IS_LEGACY_BUILD && IsWindows7OrGreater() && !IsWindows10OrGreater(); +} + +void EnforceOSSupport(HWND parentWnd, const wstring& message, const string& faqURL) +{ + if (!IsOSUnsupported()) { return; } - const wstring url = L"https://psiphon3.com/faq.html#windows-xp-eol"; + wstring fragment = L"#windows-7-eol"; + if (!IsWindows7OrGreater()) { + fragment = L"#windows-xp-eol"; + } + + const wstring url = UTF8ToWString(faqURL) + fragment; const wstring messageURL = message + L"\n" + url; ::MessageBoxW(parentWnd, messageURL.c_str(), L"Psiphon", MB_OK | MB_ICONSTOP); diff --git a/src/utilities.h b/src/utilities.h index d2c9fe8a..9404edca 100644 --- a/src/utilities.h +++ b/src/utilities.h @@ -170,13 +170,18 @@ void SetUiLocale(const wstring& uiLocale); // running in. Returns ISO 3166-1 alpha-2 format. wstring GetDeviceRegion(); -/// Returns true if the current Windows version is supported by the Psiphon client. -/// Otherwise Psiphon will not and cannot function and the user should be told. -bool IsOSSupported(); +/// Returns true if the current Windows version is unsupported by the Psiphon client. +/// In this case will not and cannot function and the user should be told. +bool IsOSUnsupported(); -/// Check is the current Windows version is support. If it's not, show a message +/// Returns true if the current Windows version is considered "legacy". This means that +/// the Psiphon client will run on it, but future versions will not -- i.e., version +/// upgrades must be disabled. +bool IsOSLegacy(); + +/// Check if the current Windows version is supported. If it's not, show a message /// and terminate the app. -void EnforceOSSupport(HWND parentWnd, const wstring& message); +void EnforceOSSupport(HWND parentWnd, const wstring& message, const string& faqURL); /// Copy the given string to the clipboard. Returns true on success. bool CopyToClipboard(HWND mainWnd, const tstring& s); diff --git a/src/webui/_locales/en/messages.json b/src/webui/_locales/en/messages.json index 7646ca5f..ff60b018 100644 --- a/src/webui/_locales/en/messages.json +++ b/src/webui/_locales/en/messages.json @@ -672,8 +672,8 @@ "description": "Appears in the notification area balloon when Psiphon has been minimized to the Windows' notification area (aka 'system tray' aka 'systray', the area of the taskbar with the clock, battery indicator, and other icons)." }, "appbackend#os-unsupported": { - "message": "Psiphon no longer supports Windows XP or Vista.\nPlease visit our website for more information.", - "description": "Appears in a message box when Psiphon is run on an unsuppoted version of Windows. Is followed by a URL." + "message": "Psiphon only supports Windows 10 and newer.\nPlease visit our website for more information.", + "description": "Appears in a message box when Psiphon is run on an unsupported version of Windows. Is followed by a URL." }, "psicash#transaction-error-title": { "message": "PsiCash transaction error", diff --git a/src/webui/_locales/haw-Arab/messages.json b/src/webui/_locales/haw-Arab/messages.json index 59ffc168..f8044ba5 100644 --- a/src/webui/_locales/haw-Arab/messages.json +++ b/src/webui/_locales/haw-Arab/messages.json @@ -40,8 +40,8 @@ "description": "Appears in the notification area balloon when Psiphon has been minimized to the Windows' notification area (aka 'system tray' aka 'systray', the area of the taskbar with the clock, battery indicator, and other icons). The word 'Psiphon' must not be translated or transliterated." }, "appbackend#os-unsupported": { - "message": "‮Ԁsıdɥou‬ ‮uo‬ ‮ʅouƃǝɹ‬ ‮snddoɹʇs‬ ‮Mıupoʍs‬ ‮XԀ‬ ‮oɹ‬ ‮Ʌısʇɐ‬.\n‮Ԁʅǝɐsǝ‬ ‮ʌısıʇ‬ ‮onɹ‬ ‮ʍǝqsıʇǝ‬ ‮ɟoɹ‬ ‮ɯoɹǝ‬ ‮ıuɟoɹɯɐʇıou‬.", - "description": "Appears in a message box when Psiphon is run on an unsuppoted version of Windows. Is followed by a URL." + "message": "‮Ԁsıdɥou‬ ‮ouʅʎ‬ ‮snddoɹʇs‬ ‮Mıupoʍs‬ 10 ‮ɐup‬ ‮uǝʍǝɹ‬.\n‮Ԁʅǝɐsǝ‬ ‮ʌısıʇ‬ ‮onɹ‬ ‮ʍǝqsıʇǝ‬ ‮ɟoɹ‬ ‮ɯoɹǝ‬ ‮ıuɟoɹɯɐʇıou‬.", + "description": "Appears in a message box when Psiphon is run on an unsupported version of Windows. Is followed by a URL." }, "appbackend#state-connected-body": { "message": "‮Ǝxdʅoɹǝ‬ ‮qǝʎoup‬ ‮ʎonɹ‬ ‮qoɹpǝɹs‬!", diff --git a/src/webui/_locales/haw-Cyrl/messages.json b/src/webui/_locales/haw-Cyrl/messages.json index 92a45f48..5d7303f4 100644 --- a/src/webui/_locales/haw-Cyrl/messages.json +++ b/src/webui/_locales/haw-Cyrl/messages.json @@ -40,8 +40,8 @@ "description": "Appears in the notification area balloon when Psiphon has been minimized to the Windows' notification area (aka 'system tray' aka 'systray', the area of the taskbar with the clock, battery indicator, and other icons). The word 'Psiphon' must not be translated or transliterated." }, "appbackend#os-unsupported": { - "message": "[Ƥşīīƥħǿǿƞ ƞǿǿ ŀǿǿƞɠḗḗř şŭŭƥƥǿǿřŧş Ẇīīƞḓǿǿẇş ẊƤ ǿǿř Ṽīīşŧȧȧ.\nƤŀḗḗȧȧşḗḗ ṽīīşīīŧ ǿǿŭŭř ẇḗḗƀşīīŧḗḗ ƒǿǿř ḿǿǿřḗḗ īīƞƒǿǿřḿȧȧŧīīǿǿƞ.]", - "description": "Appears in a message box when Psiphon is run on an unsuppoted version of Windows. Is followed by a URL." + "message": "[Ƥşīīƥħǿǿƞ ǿǿƞŀẏ şŭŭƥƥǿǿřŧş Ẇīīƞḓǿǿẇş 10 ȧȧƞḓ ƞḗḗẇḗḗř.\nƤŀḗḗȧȧşḗḗ ṽīīşīīŧ ǿǿŭŭř ẇḗḗƀşīīŧḗḗ ƒǿǿř ḿǿǿřḗḗ īīƞƒǿǿřḿȧȧŧīīǿǿƞ.]", + "description": "Appears in a message box when Psiphon is run on an unsupported version of Windows. Is followed by a URL." }, "appbackend#state-connected-body": { "message": "[Ḗḗẋƥŀǿǿřḗḗ ƀḗḗẏǿǿƞḓ ẏǿǿŭŭř ƀǿǿřḓḗḗřş!]", diff --git a/src/webui/_locales/zh-TW/messages.json b/src/webui/_locales/zh-TW/messages.json index 471d8854..82ad8afa 100644 --- a/src/webui/_locales/zh-TW/messages.json +++ b/src/webui/_locales/zh-TW/messages.json @@ -112,11 +112,11 @@ "description": "Settings section heading. If the user clicks this, the 'Split Tunnel' section will expand and can be edited. If 'split tunnel' is enabled, if the user is trying to get to a website in his/her own country, they will connect to it directly, instead of through Psiphon." }, "settings#split-tunnel#help-text": { - "message": "If enabled, requests made to servers within your home country will not be tunneled through Psiphon.", + "message": "如果啟用,連到身處國家的伺服器將不會通過 Psiphon 墜道。", "description": "Text explaining to the user what the 'Split Tunnel' setting does if enabled. The word 'Psiphon' must not be translated or transliterated." }, "settings#split-tunnel#reason": { - "message": "Websites within your home country are generally not blocked, so enabling this option will give you faster access to those sites and can sometimes reduce ISP data usage costs.", + "message": "您所在國家/地區境內網站通常不會被封鎖,啟用此選項將可以更快地訪問這些網站,有時還可降低 ISP 流量使用成本。", "description": "Help text in the 'Split Tunnel' settings section explaining to the user why they might want to modify (enable) the setting." }, "settings#split-tunnel#enable-label": { @@ -124,11 +124,11 @@ "description": "The label on the checkbox that enables 'Split Tunnel'." }, "settings#split-tunnel-chinese-sites#enable-label": { - "message": "Don't proxy Chinese websites", + "message": "不要代理中文網站", "description": "The label on the checkbox that enables 'Split Tunnel' for Chinese websites, regardless of what region the user is in." }, "settings#split-tunnel-chinese-sites#note": { - "message": "WARNING: This feature uses data which may not always be reliable. Use caution when enabling this feature as some censored websites may be unintentionally excluded from the proxy.", + "message": "警告:此功能所用的資料並不一定可靠。 啟用此功能時請務必小心,因為某些受審查的網站可能無意中被排除在代理之外。", "description": "A note cautioning the user that this feature may result in some sites being unproxied unintentionally." }, "settings#disable-timeouts#heading": { @@ -140,7 +140,7 @@ "description": "Text explaining to the user what the 'Disable Timeouts' setting does if enabled. The word 'Psiphon' must not be translated or transliterated." }, "settings#disable-timeouts#reason": { - "message": "When enabling this for a very slow network connection, you are less likely to experience unexpected disconnections.", + "message": "因網路連線很快而啟用此功能時,不太可能遇到意外斷線。", "description": "Help text in the 'Disable Timeouts' settings section explaining to the user why they might want to modify (enable) the setting." }, "settings#disable-timeouts#enable-label": { @@ -348,11 +348,11 @@ "description": "One of the choices in the 'Psiphon Server Region' combo box. If selected, a Psiphon server in Malaysia will be used." }, "settings#egress-region#description": { - "message": "Psiphon has servers in many different countries and regions. Using a Psiphon server in a region close to your home country will generally provide a better network connection, but you may wish to access websites and services like you are virtually in a specific country or region.", + "message": "Psiphon 在許多國家和地區擁有伺服器。 您所在國家/地區附近的地區使用 Psiphon 伺服器通常能提供更好的網路連線,但您可能希望像在特定國家或地區一樣存取網站和服務。", "description": "Help text in the 'Psiphon Server Region' settings section explaining what the option is and why the user may want to override the default ('best') setting value. The word 'Psiphon' must not be translated or transliterated." }, "settings#egress-region#default": { - "message": "Choosing the default “Best Performance” option allows Psiphon to automatically choose a server, which will generally result in the best network connection.", + "message": "選擇預設的 “最佳效能” 選項,讓 Psiphon 自行選擇最優網路連線的伺服器。", "description": "Help text below the 'Psiphon Server Region' combo box. It explains to the user what the default (and best) option is. The word 'Psiphon' must not be translated or transliterated." }, "settings#egress-region#invalid-error-msg": { @@ -364,7 +364,7 @@ "description": "Title text of the error modal dialog shown when it is detected that the user has an invalid 'Psiphon Server Region' currently configured." }, "settings#egress-region#error-modal-body-http": { - "message": "You have configured Psiphon to use a server in a specific region.
\nHowever, that region is no longer available.
\nYou must choose a new region or change to the default “Best Performance” choice.", + "message": "已將 Psiphon 設定為使用特定區域中的伺服器。
\n但是,該區域已不可用。
\n須選擇新區域或變更為預設的“最佳效能”選項。", "description": "Descriptive body text of the error modal dialog shown when it is detected that the user has an invalid 'Psiphon Server Region' currently configured. The word 'Psiphon' must not be translated or transliterated." }, "settings#local-proxy-ports#heading": { @@ -408,15 +408,15 @@ "description": "Main text in the 'Local Proxy Port Conflict' dialog box. This is shown when the conflict is with the SOCKS proxy port, rather than the HTTP proxy port. The word 'Psiphon' must not be translated or transliterated." }, "settings#expose-local-proxies-to-lan#help-text": { - "message": "If you have other devices on your network, such as a smart TV or gaming console, you can allow them to use these HTTP and SOCKS proxies while Psiphon is connected.", + "message": "如果網路上有其他裝置(例如智慧電視或遊戲機),可以讓它們連接 Psiphon 時使用這些 HTTP 和 SOCKS 代理程式。", "description": "Help text explaining the setting to allow other devices on the network to use the local Psiphon proxies. Smart TV refers to televisions that have Internet connectivity and apps that access Internet services." }, "settings#expose-local-proxies-to-lan#hint": { - "message": "HINT: You should specify at least one of the port numbers above in order to use this feature. The addresses of the local proxies will be displayed in the logs.", + "message": "提示:應至少指定某一個上述連接埠數字才能使用此功能。 本地代理的地址將顯示在日誌中。 ", "description": "Helpful hint suggesting to set port numbers for the local Psiphon proxies when using the setting to allow other devices on the network to use the local Psiphon proxies." }, "settings#expose-local-proxies-to-lan#enable-label": { - "message": "Allow other devices on your network to use the local Psiphon proxies", + "message": "允許網路上的其他裝置使用本機 Psiphon 代理", "description": "Label for the setting to allow other devices on the network to use the local Psiphon proxies." }, "settings#upstream-proxy#heading": { @@ -460,11 +460,11 @@ "description": "Label for the checkbox that allows the user to override the default 'upstream proxy' usage and totally disable the feature." }, "settings#upstream-proxy#set-hostname-error-msg": { - "message": "You must provide a Hostname, or leave all Upstream Proxy fields blank for automatic selection.", + "message": "須提供主機名稱,或將所有上游代理欄位留空以便自動選擇。", "description": "Error message that is shown if the user enters a value for one of the other upstream proxy fields but not for 'hostname', which is required. Alternatively, the user can leave all fields blank to allow the automatic behaviour." }, "settings#upstream-proxy#set-username-error-msg": { - "message": "You must provide a Username if you are setting Password or Domain; or leave all authentication fields blank for no authentication.", + "message": "若要設定密碼或域名,請提供用戶名稱; 或將所有身份驗證欄位留空不進行身份驗證。", "description": "Error message that is shown if the user enters a value for one of 'Password' or 'Domain', but does not provide a 'Username' -- this is not valid, as username is are required. Alternatively, the user can leave all authentication fields blank to use an upstream proxy which doesn't require authentication." }, "settings#upstream-proxy#error-modal-title": { @@ -596,7 +596,7 @@ "description": "Paragraph on the 'About' page telling users that they can also get a new version of Psiphon via email. The text in this resource is then followed by an email address. The word 'Psiphon' must not be translated or transliterated." }, "about#license-agree": { - "message": "By using Psiphon you signal that you agree to the terms of the End-User License and Privacy Policy.", + "message": "使用 Psiphon 即表示同意以下條款 終端用戶許可隱私權政策。", "description": "Paragraph on the 'About' page telling users that they agreeing to Psiphon's End-User License Agreement and Privacy Policy. The link URLs must not be modified. The word 'Psiphon' must not be translated or transliterated." }, "about#client-version": { @@ -668,23 +668,23 @@ "description": "Appears in the notification area balloon when Psiphon has been minimized to the Windows' notification area (aka 'system tray' aka 'systray', the area of the taskbar with the clock, battery indicator, and other icons)." }, "appbackend#os-unsupported": { - "message": "Psiphon no longer supports Windows XP or Vista.\nPlease visit our website for more information.", + "message": "Psiphon 不再支援 Windows XP 或 Vista。\n請訪問我們的網站了解更多資訊。", "description": "Appears in a message box when Psiphon is run on an unsuppoted version of Windows. Is followed by a URL." }, "psicash#transaction-error-title": { - "message": "PsiCash transaction error", + "message": "PsiCash 交易出錯", "description": "Title of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-error-body": { - "message": "Your PsiCash transaction attempt failed unexpectedly.", + "message": "PsiCash 交易發生無預警錯誤。", "description": "Body text of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-ExistingTransaction-title": { - "message": "PsiCash purchase already exists", + "message": "PsiCash 購買已存在。", "description": "Title of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-ExistingTransaction-body": { - "message": "You have an existing PsiCash purchase of this type. Another purchase of this type is not allowed until the previous one expires. Your PsiCash state will be refreshed now.", + "message": "您已 購買此類 PsiCash。 在前一次購買到期之前,無法再次購買同類產品。 您的 PsiCash 狀態會立即刷新。", "description": "Body text of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-InsufficientBalance-title": { @@ -692,35 +692,35 @@ "description": "Title of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The user doesn't have enough PsiCash to make the attempted purchase. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-InsufficientBalance-body": { - "message": "You do not have sufficient PsiCash balance for this purchase.", + "message": "沒有足夠的 PsiCash 餘額來完成此次購買。", "description": "Body text of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The user doesn't have enough PsiCash to make the attempted purchase. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-TransactionAmountMismatch-title": { - "message": "PsiCash purchase price mismatch", + "message": "PsiCash 購買價格不符", "description": "Title of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-TransactionAmountMismatch-body": { - "message": "PsiCash purchase prices are out-of-date. Your PsiCash state will be refreshed now.", + "message": "PsiCash 購買價格已過時。 您的 PsiCash 狀態會刷新。", "description": "Body text of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-TransactionTypeNotFound-title": { - "message": "PsiCash purchase type not found", + "message": "找不到 PsiCash 購買種類", "description": "Title of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-TransactionTypeNotFound-body": { - "message": "The product you are trying to buy no longer exists. You may need to update or reinstall the application.", + "message": "試圖購買的產品已不存在。 可能需要更新或重新安裝該應用程式。", "description": "Body text of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-InvalidTokens-title-tracker": { - "message": "Invalid PsiCash state", + "message": "無效的 PsiCash 狀態", "description": "Title of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. This error is extremely rare and should only occur if there's data corruption. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-InvalidTokens-body-tracker": { - "message": "Your PsiCash state is invalid. Try restarting the application. If that doesn't work, you will need to clear your local storage.", + "message": "您的 PsiCash 狀態無效。 嘗試重新啟動應用程式。 如果不起作用,則需清理本地儲存。", "description": "Body text of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. This error is extremely rare and should only occur if there's data corruption. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-InvalidTokens-title-account": { - "message": "PsiCash login expired", + "message": "PsiCash 登入逾時", "description": "Title of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-InvalidTokens-body-account": { @@ -732,23 +732,23 @@ "description": "Title of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The word 'PsiCash' must not be translated or transliterated." }, "psicash#transaction-ServerError-body": { - "message": "The PsiCash server responded with an error while trying to make the purchase. Please retry your purchase later.", + "message": "欲購買時,PsiCash 伺服器回應錯誤。 請稍後重試購買。", "description": "Body text of a modal dialog shown when a PsiCash transaction (like Speed Boost purchase) fails. The word 'PsiCash' must not be translated or transliterated." }, "psicash#ui-speedboost-active": { - "message": "Speed Boost active for %s", + "message": "Speed Boost 運作中 %s", "description": "When the user has Speed Boost active, this shows them how much time they have remaining. '%s' is like 'an hour' or '30 minutes' (localized). This text will be shown on a narrow button that should have at most 3 lines. You may use ` `, `
`, ``, `­`, etc. to control word wrap. 'Speed Boost' is a reward that can be purchased with PsiCash credit. It provides unlimited network connection speed through Psiphon. Other words that can be used to help with translation are: 'turbo' (like cars), 'accelerate', 'warp speed', 'blast off', or anything that indicates a fast or unrestricted speed." }, "psicash#ui-buypsi": { - "message": "Buy PsiCash", + "message": "購買 PsiCash", "description": "Label for a button/link that opens a store web page were users can spend money to buy PsiCash. At this point, the user has no PsiCash at all. The word 'PsiCash' must not be translated or transliterated." }, "psicash#ui-buymorepsi": { - "message": "Buy more PsiCash", + "message": "購買更多的 PsiCash", "description": "Label for a button/link that opens a store web page were users can spend money to buy PsiCash. At this point, the user already has some PsiCash, but may wish to buy more. The word 'PsiCash' must not be translated or transliterated." }, "psicash#ui-nsfbalance-buttontext": { - "message": "Needed for Speed Boost", + "message": "需要 Speed Boost", "description": "Label on a disabled button, followed by a value in PsiCash indicating how much it costs to buy an hour of Speed Boost. When the user has enough PsiCash, the button will be enabled and the text will change. You may use ` `, `
`, ``, `­`, etc. to control word wrap. 'Speed Boost' is a reward that can be purchased with PsiCash credit. It provides unlimited network connection speed through Psiphon. Other words that can be used to help with translation are: 'turbo' (like cars), 'accelerate', 'warp speed', 'blast off', or anything that indicates a fast or unrestricted speed." }, "psicash#ui-speedboost-button": { @@ -772,19 +772,19 @@ "description": "Label on a button. Clicking this button will buy 1 month (31 days) of Speed Boost." }, "psicash#ui-buyingboost-buttontext": { - "message": "Starting Speed Boost!", + "message": "開始 Speed Boost!", "description": "Label for a disabled button. The user has clicked the button in order to buy an hour of Speed Boost, and now the purchase is completing and Speed Boost is activating. You may use ` `, `
`, ``, `­`, etc. to control word wrap. 'Speed Boost' is a reward that can be purchased with PsiCash credit. It provides unlimited network connection speed through Psiphon. Other words that can be used to help with translation are: 'turbo' (like cars), 'accelerate', 'warp speed', 'blast off', or anything that indicates a fast or unrestricted speed." }, "psicash#pane-create-account": { - "message": "Create an account to protect your PsiCash!", + "message": "創建帳戶以保障 PsiCash!", "description": "Text for a link displayed when the user does not have a PsiCash account. This is an strong suggestion, hence the exclamation point -- use whatever makes sense in your language. It encourages them to make one. The word 'PsiCash' must not be translated or transliterated." }, "psicash#pane-balance-header": { - "message": "Balance:", + "message": "餘額:", "description": "Text before showing the user's PsiCash balance. So it will appear like: 'Balance: Ⓟ100'." }, "psicash#pane-log-in": { - "message": "Log In!", + "message": "登入!", "description": "Text on a button that will lead the user to log into their PsiCash account. This is an strong suggestion, hence the exclamation point -- use whatever makes sense in your language." }, "psicash#pane-log-out": { @@ -792,23 +792,23 @@ "description": "Text on a button that will log the user out of their PsiCash account." }, "psicash#pane-manage-web": { - "message": "Manage on the web", + "message": "在網頁上進行管理", "description": "Text for a link to a web site where users can manage their PsiCash account." }, "psicash#pane-create-account-plea": { - "message": "Creating a PsiCash account will help preserve your PsiCash if you clear the app's storage or use Psiphon on another device. Learn more.", + "message": "如果清除應用程式的儲存空間或在其他裝置上使用 Psiphon,建立 PsiCash 帳戶將有助於保留您的 PsiCash。了解詳情", "description": "Text shown below the PsiCash balance when the user does not have a PsiCash account. 'Learn more' is a link to an FAQ entry explaining the benefits of creating an account. The word 'PsiCash' must not be translated or transliterated." }, "psicash#pane-l2tp-incompatible": { - "message": "Speed Boost cannot be used while Psiphon is connected in L2TP/IPSec transport mode.", + "message": "以L2TP/IPSec 傳輸模式連接 Psiphon 時無法使用 Speed Boost 。", "description": "A message shown when L2TP/IPSec mode is enabled in Psiphon. Speed Boost cannot be used in this mode." }, "psicash#pane-must-log-in": { - "message": "You must log in to use PsiCash.", + "message": "需登入方可使用 PsiCash。", "description": "Message shown when the user was logged in with an account and then logged out. It's telling the user that they have to log in again. The word 'PsiCash' must not be translated or transliterated." }, "psicash#pane-create-new-account": { - "message": "Create a New Account", + "message": "創建新帳戶", "description": "Text on button that user can click to create a new account (opens an external web page)." }, "psicash#pane-speed-port-limits-head": { @@ -820,19 +820,19 @@ "description": "Body of an information section explaining that there are port and speed restrictions when the user doesn't have Speed Boost active. The word 'PsiCash' must not be translated or transliterated. 'Speed Boost' is a reward that can be purchased with PsiCash credit. It provides unlimited network connection speed through Psiphon. Other words that can be used to help with translation are: 'turbo' (like cars), 'accelerate', 'warp speed', 'blast off', or anything that indicates a fast or unrestricted speed." }, "psicash#pane-speed-boost-cta": { - "message": "Unleash the full potential of Psiphon with Speed Boost!", + "message": "通過 Speed Boost 檡放 Psiphon 的全部潛力! ", "description": "Text encouraging the user to purchase Speed Boost. 'Unleash' can translated to something like 'unlock', 'release', 'enable', 'amplify', or generally 'make a lot better'. 'Psiphon' must not be translated/transliterated. 'Speed Boost' is a reward that can be purchased with PsiCash credit. It provides unlimited network connection speed through Psiphon. Other words that can be used to help with translation are: 'turbo' (like cars), 'accelerate', 'warp speed', 'blast off', or anything that indicates a fast or unrestricted speed." }, "psicash#pane-need-more-psicash-header": { - "message": "You need more PsiCash!", + "message": "需要更多的 PsiCash !", "description": "Header for a section telling the user that they don't have enough PsiCash to buy any Speed Boost and need to buy more. The word 'PsiCash' must not be translated or transliterated." }, "psicash#pane-need-more-psicash-body": { - "message": "In order activate Speed Boost, you need to buy more PsiCash.", + "message": "欲激活 Speed Boost,請購買更多的 PsiCash。", "description": "Body of a section telling the user that they don't have enough PsiCash to buy any Speed Boost and need to buy more. The word 'PsiCash' must not be translated or transliterated. 'Speed Boost' is a reward that can be purchased with PsiCash credit. It provides unlimited network connection speed through Psiphon. Other words that can be used to help with translation are: 'turbo' (like cars), 'accelerate', 'warp speed', 'blast off', or anything that indicates a fast or unrestricted speed." }, "psicash#pane-need-psicash-visit-store": { - "message": "Need PsiCash? Visit our store to buy more!", + "message": "需要 PsiCash ? 請到我們的商店訂購!", "description": "Text encouraging the user to buy PsiCash (with real money). The word 'PsiCash' must not be translated or transliterated." }, "psicash#overlay-logging-in": { @@ -840,15 +840,15 @@ "description": "Text on a screen shown while the user's log-in request is in progress." }, "psicash#overlay-logging-out": { - "message": "Logging out…", + "message": "登出....", "description": "Text on a screen shown while the user's log-out request is in progress." }, "psicash#modal-create-psicash-account-header": { - "message": "Create a PsiCash Account", + "message": "建立 PsiCash 帳戶", "description": "Header of a modal dialog that appears when the user tries to buy PsiCash with real money but doens't have an account. The word 'PsiCash' must not be translated or transliterated." }, "psicash#modal-create-psicash-account-body": { - "message": "We strongly encourage you to create a PsiCash account before buying PsiCash. Having an account allows you to share your balance between devices and protect your purchases.", + "message": "強烈建議在購買 PsiCash 前建先立一個 PsiCash 帳戶。 擁有帳戶可在不同裝置間共享餘額並保護您的購買。", "description": "Body of a modal dialog that appears when the user tries to buy PsiCash with real money but doens't have an account. The word 'PsiCash' must not be translated or transliterated." }, "psicash#modal-create-psicash-account-create-button": { @@ -884,7 +884,7 @@ "description": "Header of modal dialog in which the user can log in to an existing account or click a link to create a new one. The word 'PsiCash' must not be translated or transliterated." }, "psicash#modal-login-body": { - "message": " or log in below.", + "message": "或在下方登入。", "description": "Body of modal dialog in which the user can log in to an existing account or click a link to create a new one." }, "psicash#modal-login-username-field": { @@ -908,7 +908,7 @@ "description": "Text on the cancel button in the PsiCash account login modal dialog." }, "psicash#alert#buyspeedboost-purchase-complete": { - "message": "Speed Boost started!", + "message": "Speed Boost 已啟動!", "description": "A non-modal alert shown when a new Speed Boost has been activated. 'Speed Boost' is a reward that can be purchased with PsiCash credit. It provides unlimited network connection speed through Psiphon. Other words that can be used to help with translation are: 'turbo' (like cars), 'accelerate', 'warp speed', 'blast off', or anything that indicates a fast or unrestricted speed." }, "psicash#modal-logout-header": { @@ -916,7 +916,7 @@ "description": "Header of modal dialog shown when the user attempts to log out of their PsiCash account and a message results. 'PsiCash' must not be translated or transliterated." }, "psicash#modal-logout-error-body": { - "message": "You logout attempt failed unexpectedly. Please try restarting the application. If that doesn't work, you will need to clear your local storage.", + "message": "登出嘗試失敗。 請嘗試重新啟動應用程式。 如果不起作用,則需 清理本地儲存。", "description": "Body of modal dialog shown when the user attempts to log out of their PsiCash account and an unexpected error occurs. Please don't modify the link URL." }, "positive-value-indicator": { @@ -932,31 +932,31 @@ "description": "Body text of a modal dialog shown when the user tries to use (spend, buy, etc.) PsiCash, if they not currently connected. 'Use' here means buy, spend, or otherwise interact with. 'Psiphon' must not be translated/transliterated. 'PsiCash' must not be translated/transliterated." }, "psicash#init-error-title": { - "message": "PsiCash initialization error", + "message": "PsiCash 安裝錯誤", "description": "Title of a modal dialog shown when the PsiCash library fails to initialize. The word 'PsiCash' must not be translated or transliterated." }, "psicash#init-error-body-unrecovered": { - "message": "PsiCash failed to initialize. This is probably due to a file system problem, such as being out of disk space. Your balance and other state have been lost. PsiCash will not be usable. You can try restarting the application to recover from the problem.", + "message": "PsiCash 初始化失敗。 可能是檔案系統問題,例如磁碟空間不足。 已遺失餘額與其它相關狀態資料,PsiCash 無法使用。 您可以嘗試重新啟動應用程式來恢復。", "description": "Body text of a modal dialog shown when the PsiCash library fails to initialize. The word 'PsiCash' must not be translated or transliterated." }, "psicash#init-error-body-recovered": { - "message": "PsiCash failed to initialize. This is probably due to a file system problem, such as being out of disk space. Your balance and other state have been reset.", + "message": "PsiCash 初始化失敗。 這可能是檔案系統問題,例如磁碟空間不足。 已重設您的餘額和其他狀態。", "description": "Body text of a modal dialog shown when the PsiCash library fails to initialize. The word 'PsiCash' must not be translated or transliterated." }, "psicash#psiphon-speed": { - "message": "Psiphon
Speed", + "message": "Psiphon
網速", "description": "Text on a badge next to an image or gauge that will indicate 'fast' or 'slow'. This is the current Psiphon tunnel speed limit. Speed Boost is required in order to get the fastest speed. The word 'Psiphon' must not be translated or transliterated. The word 'Psiphon' can be dropped if necessary to get a meaning like 'speed limit'. This text must be kept narrow and short -- only two or three lines of one or two words each. Use hard breaks (like
) to separate lines (perhaps with hyphens), and soft break indicators (like ­ or or ​) to indicate were long words can be broken." }, "psicash#psiphon-speed-nobreak": { - "message": "Psiphon Speed", + "message": "Psiphon 網速", "description": "Text on a badge next to an image or gauge that will indicate 'fast' or 'slow'. This is the current Psiphon tunnel speed limit. Speed Boost is required in order to get the fastest speed. The word 'Psiphon' must not be translated or transliterated. The word 'Psiphon' can be dropped if necessary to get a meaning like 'speed limit'. This text must be kept short." }, "psicash#corner-logged-out": { - "message": "You are logged out of PsiCash", + "message": "已登出 PsiCash", "description": "Message shown to the user when they have a PsiCash account, but they are logged out. The word 'PsiCash' must not be translated or transliterated." }, "psicash#more-ellipsis": { - "message": "More…", + "message": "更多…", "description": "Label for a button that leads to more Speed Boost purchase choices. The translation can be like 'More options' or 'More choices' or 'See more'. Only use an ellipsis if it makes sense in your language." }, "psicash#login#failure-modal-title": { @@ -972,7 +972,7 @@ "description": "Body text of a modal dialog shown when a PsiCash login fails due to bad username or password." }, "psicash#login#invalid-credentials-body-multiple-attempts": { - "message": "Would you instead like to or recover your account?", + "message": "想要 還是 回復帳戶?", "description": "Body text of a modal dialog shown when a PsiCash login fails due to bad username or password." }, "psicash#login#server-error-body": { @@ -980,7 +980,7 @@ "description": "Body text of a modal dialog shown when a PsiCash account login fails due to a server error. The word 'PsiCash' must not be translated or transliterated." }, "psicash#login#badrequest-error-body": { - "message": "The PsiCash server indicated that the login request was invalid. Please re-enter your login information and try again.", + "message": "PsiCash 伺服器顥示登入請求無效。 請重新輸入登入資訊重試。", "description": "Body text of a modal dialog shown when a PsiCash account login fails due to a 'bad request' error. The word 'PsiCash' must not be translated or transliterated." }, "psicash#login#success-modal-title": { @@ -992,7 +992,7 @@ "description": "Body text of a modal dialog shown when a PsiCash login succeeds. There is a fixed number of times that a user can merge a pre-account balance into a PsiCash account. This message indicates that the user has hit that limit and the merge that occurred is the last one allowed. The word 'PsiCash' must not be translated or transliterated." }, "psicash#alert#tokens-expired": { - "message": "PsiCash login expired. Please log back in.", + "message": "PsiCash 登入已過期。 請重新登入。", "description": "An alert shown when the user's PsiCash account tokens expire. This is a normal occurrence (once per year), and the user needs to log into their PsiCash account again to continue to use it. The word 'PsiCash' must not be translated or transliterated." }, "psicash#alert#logged-out": { @@ -1004,43 +1004,43 @@ "description": "Title of modal error message shown to user when Psiphon disallows some non-web internet traffic. The user will be told to 'upgrade' their connection with Speed Boost (giving more speed and app compatibility). The word 'Psiphon' must not be translated or transliterated." }, "notice#disallowed-traffic-alert-body": { - "message": "

Apps not working?

\n

Some internet traffic is not supported without an active Speed Boost. Activate Speed Boost with PsiCash to unlock the full potential of your Psiphon experience.

", + "message": "

應用程式無法正常運作?

\n

某些網路流量需要 Speed Boost 支援。 使用 PsiCash 激活 Speed Boost ,釋放 Psiphon 體驗的全部潛力。\n\n

", "description": "Body text of modal error message shown to user when Psiphon disallows some non-web internet traffic. The user needs to purchase Speed Boost in order to full app compatibilty and more speed. The words 'Psiphon' and 'PsiCash' must not be translated or transliterated. 'Speed Boost' is a reward that can be purchased with PsiCash credit. It provides unlimited network connection speed through Psiphon. Other words that can be used to help with translation are: 'turbo' (like cars), 'accelerate', 'warp speed', 'blast off', or anything that indicates a fast or unrestricted speed." }, "appbackend#disallowed-traffic-notification-title": { - "message": "Apps not working?", + "message": "應用程式無法正常運作?", "description": "Appears in the notification area balloon when Psiphon disallows some non-web internet traffic. The user needs to purchase Speed Boost in order to full app compatibilty and more speed." }, "appbackend#disallowed-traffic-notification-body": { - "message": "Activate Speed Boost to unlock the full potential of your Psiphon experience.", + "message": "使用 PsiCash 激活 Speed Boost ,釋放 Psiphon 體驗的全部潛力。", "description": "Appears in the notification area balloon when Psiphon disallows some non-web internet traffic. The user needs to purchase Speed Boost in order to full app compatibilty and more speed. 'Speed Boost' is a reward that can be purchased with PsiCash credit. It provides unlimited network connection speed through Psiphon. Other words that can be used to help with translation are: 'turbo' (like cars), 'accelerate', 'warp speed', 'blast off', or anything that indicates a fast or unrestricted speed." }, "settings#disallowed-traffic-alert#heading": { - "message": "Disallowed Traffic Alert", + "message": "禁用流量警告", "description": "Settings section heading. In this section the user can choose to enable or disable alerts telling the user when app traffic has been disallowed and they need to get Speed Boost." }, "settings#disallowed-traffic-alert#help-text": { - "message": "Some types of internet traffic are not supported without an active Speed Boost. When such traffic is disallowed, an alert is shown. (Re-enabling will require a reconnection.)", + "message": "某些類型的網路流量必須用到 Speed Boost 支援。 當此類流量被禁止時,會顯示警報。 (重新啟用需要重新連線。)", "description": "Text explaining to the user what the 'Disallowed Traffic Alert' setting does if enabled. 'Speed Boost' is a reward that can be purchased with PsiCash credit. It provides unlimited network connection speed through Psiphon. Other words that can be used to help with translation are: 'turbo' (like cars), 'accelerate', 'warp speed', 'blast off', or anything that indicates a fast or unrestricted speed." }, "settings#disallowed-traffic-alert#disable-label": { - "message": "Disable disallowed traffic alerts", + "message": "關閉禁用流量警告", "description": "The label on the checkbox that disables the 'Disallowed Traffic Alert'." }, "ui#alert#url-copied-to-clipboard": { - "message": "URL copied to clipboard.
If browser fails to open, paste the URL into the browser address bar.", + "message": "URL複製到剪貼簿。
如果瀏覽器無法打開,請將 URL 貼到瀏覽器網址列。", "description": "Sometimes when the Psiphon UI tries to open an external URL in the browser, it fails to open. This message indicates to the user that URL has been copied to the Windows system clipboard and is available for pasting into a browser. `
` may be used to split the message over two lines to ensure the alert doesn't take too much horizontal space." }, "notice#psiphonui-fileerror-error-title": { - "message": "File Access Error", + "message": "檔案存取錯誤", "description": "Title of modal error message shown to user when Psiphon cannot read/write/delete a file that it needs to access in order to function properly." }, "notice#psiphonui-fileerror-error-body": { - "message": "

Psiphon cannot access a file it needs in order to work properly.

\n

Close the Psiphon application, delete the file listed below, and try running Psiphon again.

", + "message": "

Psiphon 無法存取正常運作所需的檔案。

\n

關閉 Psiphon 應用程式,刪除下列檔案,然後嘗試再次執行 Psiphon。

", "description": "Body text of modal error message shown to user when Psiphon cannot read/write/delete a file that it needs to access in order to function properly. If this occurs, the user cannot connect and must take manual action to fix it. The word 'Psiphon' must not be translated or transliterated." }, "notice#psiphonui-fileerror-detail-preamble": { - "message": "Filename and error message:", + "message": "檔名與錯誤訊息:", "description": "Preamble text before technical details displayed in a modal error message shown to user when Psiphon cannot read/write/delete a file that it needs to access in order to function properly." }, "banner#sponsored-by": { diff --git a/src/webui/_locales/zh/messages.json b/src/webui/_locales/zh/messages.json index 8470453e..a1507b13 100644 --- a/src/webui/_locales/zh/messages.json +++ b/src/webui/_locales/zh/messages.json @@ -324,19 +324,19 @@ "description": "One of the choices in the 'Psiphon Server Region' combo box. If selected, a Psiphon server in New Zealand will be used." }, "settings#egress-region#select-gr": { - "message": "Greece", + "message": "希腊", "description": "One of the choices in the 'Psiphon Server Region' combo box. If selected, a Psiphon server in Greece will be used." }, "settings#egress-region#select-hr": { - "message": "Croatia", + "message": "克罗地亚", "description": "One of the choices in the 'Psiphon Server Region' combo box. If selected, a Psiphon server in Croatia will be used." }, "settings#egress-region#select-pt": { - "message": "Portugal", + "message": "葡萄牙", "description": "One of the choices in the 'Psiphon Server Region' combo box. If selected, a Psiphon server in Portugal will be used." }, "settings#egress-region#select-ua": { - "message": "Ukraine", + "message": "乌克兰", "description": "One of the choices in the 'Psiphon Server Region' combo box. If selected, a Psiphon server in Ukraine will be used." }, "settings#egress-region#select-co": { @@ -344,7 +344,7 @@ "description": "One of the choices in the 'Psiphon Server Region' combo box. If selected, a Psiphon server in Colombia will be used." }, "settings#egress-region#select-my": { - "message": "Malaysia", + "message": "马来西亚", "description": "One of the choices in the 'Psiphon Server Region' combo box. If selected, a Psiphon server in Malaysia will be used." }, "settings#egress-region#description": { diff --git a/src/webui/js/locales.js b/src/webui/js/locales.js index ba2a5621..f659fbdb 100644 --- a/src/webui/js/locales.js +++ b/src/webui/js/locales.js @@ -2306,7 +2306,7 @@ "appbackend#state-connected-reminder-body-2": "Keep Psiphon free by visiting our sponsor pages!", "appbackend#minimized-to-systray-title": "Psiphon has been minimized to the notification area", "appbackend#minimized-to-systray-body": "Click the icon to restore the application", - "appbackend#os-unsupported": "Psiphon no longer supports Windows XP or Vista.\nPlease visit our website for more information.", + "appbackend#os-unsupported": "Psiphon only supports Windows 10 and newer.\nPlease visit our website for more information.", "psicash#transaction-error-title": "PsiCash transaction error", "psicash#transaction-error-body": "Your PsiCash transaction attempt failed unexpectedly.", "psicash#transaction-ExistingTransaction-title": "PsiCash purchase already exists", @@ -3750,7 +3750,7 @@ "appbackend#disallowed-traffic-notification-title": "‮∀dds‬ ‮uoʇ‬ ‮ʍoɹʞıuƃ‬?", "appbackend#minimized-to-systray-body": "‮Ↄʅıɔʞ‬ ‮ʇɥǝ‬ ‮ıɔou‬ ‮ʇo‬ ‮ɹǝsʇoɹǝ‬ ‮ʇɥǝ‬ ‮ɐddʅıɔɐʇıou‬", "appbackend#minimized-to-systray-title": "‮Ԁsıdɥou‬ ‮ɥɐs‬ ‮qǝǝu‬ ‮ɯıuıɯızǝp‬ ‮ʇo‬ ‮ʇɥǝ‬ ‮uoʇıɟıɔɐʇıou‬ ‮ɐɹǝɐ‬", - "appbackend#os-unsupported": "‮Ԁsıdɥou‬ ‮uo‬ ‮ʅouƃǝɹ‬ ‮snddoɹʇs‬ ‮Mıupoʍs‬ ‮XԀ‬ ‮oɹ‬ ‮Ʌısʇɐ‬.\n‮Ԁʅǝɐsǝ‬ ‮ʌısıʇ‬ ‮onɹ‬ ‮ʍǝqsıʇǝ‬ ‮ɟoɹ‬ ‮ɯoɹǝ‬ ‮ıuɟoɹɯɐʇıou‬.", + "appbackend#os-unsupported": "‮Ԁsıdɥou‬ ‮ouʅʎ‬ ‮snddoɹʇs‬ ‮Mıupoʍs‬ 10 ‮ɐup‬ ‮uǝʍǝɹ‬.\n‮Ԁʅǝɐsǝ‬ ‮ʌısıʇ‬ ‮onɹ‬ ‮ʍǝqsıʇǝ‬ ‮ɟoɹ‬ ‮ɯoɹǝ‬ ‮ıuɟoɹɯɐʇıou‬.", "appbackend#state-connected-body": "‮Ǝxdʅoɹǝ‬ ‮qǝʎoup‬ ‮ʎonɹ‬ ‮qoɹpǝɹs‬!", "appbackend#state-connected-reminder-body": "‮Ӽǝǝd‬ ‮Ԁsıdɥou‬ ‮ɟɹǝǝ‬. ‮Ↄʅıɔʞ‬ ‮ɥǝɹǝ‬ ‮ʇo‬ ‮ʌısıʇ‬ ‮onɹ‬ ‮sdousoɹ‬ ‮dɐƃǝs‬!", "appbackend#state-connected-reminder-body-2": "‮Ӽǝǝd‬ ‮Ԁsıdɥou‬ ‮ɟɹǝǝ‬ ‮qʎ‬ ‮ʌısıʇıuƃ‬ ‮onɹ‬ ‮sdousoɹ‬ ‮dɐƃǝs‬!", @@ -4017,7 +4017,7 @@ "appbackend#disallowed-traffic-notification-title": "[Ȧȧƥƥş ƞǿǿŧ ẇǿǿřķīīƞɠ?]", "appbackend#minimized-to-systray-body": "[Ƈŀīīƈķ ŧħḗḗ īīƈǿǿƞ ŧǿǿ řḗḗşŧǿǿřḗḗ ŧħḗḗ ȧȧƥƥŀīīƈȧȧŧīīǿǿƞ]", "appbackend#minimized-to-systray-title": "[Ƥşīīƥħǿǿƞ ħȧȧş ƀḗḗḗḗƞ ḿīīƞīīḿīīẑḗḗḓ ŧǿǿ ŧħḗḗ ƞǿǿŧīīƒīīƈȧȧŧīīǿǿƞ ȧȧřḗḗȧȧ]", - "appbackend#os-unsupported": "[Ƥşīīƥħǿǿƞ ƞǿǿ ŀǿǿƞɠḗḗř şŭŭƥƥǿǿřŧş Ẇīīƞḓǿǿẇş ẊƤ ǿǿř Ṽīīşŧȧȧ.\nƤŀḗḗȧȧşḗḗ ṽīīşīīŧ ǿǿŭŭř ẇḗḗƀşīīŧḗḗ ƒǿǿř ḿǿǿřḗḗ īīƞƒǿǿřḿȧȧŧīīǿǿƞ.]", + "appbackend#os-unsupported": "[Ƥşīīƥħǿǿƞ ǿǿƞŀẏ şŭŭƥƥǿǿřŧş Ẇīīƞḓǿǿẇş 10 ȧȧƞḓ ƞḗḗẇḗḗř.\nƤŀḗḗȧȧşḗḗ ṽīīşīīŧ ǿǿŭŭř ẇḗḗƀşīīŧḗḗ ƒǿǿř ḿǿǿřḗḗ īīƞƒǿǿřḿȧȧŧīīǿǿƞ.]", "appbackend#state-connected-body": "[Ḗḗẋƥŀǿǿřḗḗ ƀḗḗẏǿǿƞḓ ẏǿǿŭŭř ƀǿǿřḓḗḗřş!]", "appbackend#state-connected-reminder-body": "[Ķḗḗḗḗƥ Ƥşīīƥħǿǿƞ ƒřḗḗḗḗ. Ƈŀīīƈķ ħḗḗřḗḗ ŧǿǿ ṽīīşīīŧ ǿǿŭŭř şƥǿǿƞşǿǿř ƥȧȧɠḗḗş!]", "appbackend#state-connected-reminder-body-2": "[Ķḗḗḗḗƥ Ƥşīīƥħǿǿƞ ƒřḗḗḗḗ ƀẏ ṽīīşīīŧīīƞɠ ǿǿŭŭř şƥǿǿƞşǿǿř ƥȧȧɠḗḗş!]", @@ -11030,12 +11030,12 @@ "settings#egress-region#select-lv": "拉脱维亚", "settings#egress-region#select-id": "印度尼西亚", "settings#egress-region#select-nz": "新西兰", - "settings#egress-region#select-gr": "Greece", - "settings#egress-region#select-hr": "Croatia", - "settings#egress-region#select-pt": "Portugal", - "settings#egress-region#select-ua": "Ukraine", + "settings#egress-region#select-gr": "希腊", + "settings#egress-region#select-hr": "克罗地亚", + "settings#egress-region#select-pt": "葡萄牙", + "settings#egress-region#select-ua": "乌克兰", "settings#egress-region#select-co": "哥伦比亚", - "settings#egress-region#select-my": "Malaysia", + "settings#egress-region#select-my": "马来西亚", "settings#egress-region#description": "赛风在很多不同的国家和地区都有服务器。使用一个距离您近的赛风服务器一般来说可以提供更好的网络连接,但是您也可能想要像真的在某一个国家或地区一样使用网站和服务。", "settings#egress-region#default": "选择默认“最好性能”选择可以使赛风自动选择一个最好网络连接的服务器。", "settings#egress-region#invalid-error-msg": "请选择一个有效的赛风服务器区域。", @@ -11244,14 +11244,14 @@ "settings#vpn-incompatible-msg": "(不能用於 L2TP/IPSec 模式)", "settings#vpn-incompatible-label": "L2TP/IPSec", "settings#split-tunnel#heading": "拆分通道", - "settings#split-tunnel#help-text": "If enabled, requests made to servers within your home country will not be tunneled through Psiphon.", - "settings#split-tunnel#reason": "Websites within your home country are generally not blocked, so enabling this option will give you faster access to those sites and can sometimes reduce ISP data usage costs.", + "settings#split-tunnel#help-text": "如果啟用,連到身處國家的伺服器將不會通過 Psiphon 墜道。", + "settings#split-tunnel#reason": "您所在國家/地區境內網站通常不會被封鎖,啟用此選項將可以更快地訪問這些網站,有時還可降低 ISP 流量使用成本。", "settings#split-tunnel#enable-label": "不代理您所在國家內的網站", - "settings#split-tunnel-chinese-sites#enable-label": "Don't proxy Chinese websites", - "settings#split-tunnel-chinese-sites#note": "WARNING: This feature uses data which may not always be reliable. Use caution when enabling this feature as some censored websites may be unintentionally excluded from the proxy.", + "settings#split-tunnel-chinese-sites#enable-label": "不要代理中文網站", + "settings#split-tunnel-chinese-sites#note": "警告:此功能所用的資料並不一定可靠。 啟用此功能時請務必小心,因為某些受審查的網站可能無意中被排除在代理之外。", "settings#disable-timeouts#heading": "慢速網路請取消暫停功能", "settings#disable-timeouts#help-text": "如果啟動,與Psiphon 伺服器之間的通訊將不會逾時。", - "settings#disable-timeouts#reason": "When enabling this for a very slow network connection, you are less likely to experience unexpected disconnections.", + "settings#disable-timeouts#reason": "因網路連線很快而啟用此功能時,不太可能遇到意外斷線。", "settings#disable-timeouts#enable-label": "慢速網路請取消暫停功能", "settings#egress-region#heading": "賽風伺服器區域", "settings#egress-region#select-best-performance": "最佳性能", @@ -11303,11 +11303,11 @@ "settings#egress-region#select-ua": "烏克蘭", "settings#egress-region#select-co": "哥倫比亞", "settings#egress-region#select-my": "馬來西亞", - "settings#egress-region#description": "Psiphon has servers in many different countries and regions. Using a Psiphon server in a region close to your home country will generally provide a better network connection, but you may wish to access websites and services like you are virtually in a specific country or region.", - "settings#egress-region#default": "Choosing the default “Best Performance” option allows Psiphon to automatically choose a server, which will generally result in the best network connection.", + "settings#egress-region#description": "Psiphon 在許多國家和地區擁有伺服器。 您所在國家/地區附近的地區使用 Psiphon 伺服器通常能提供更好的網路連線,但您可能希望像在特定國家或地區一樣存取網站和服務。", + "settings#egress-region#default": "選擇預設的 “最佳效能” 選項,讓 Psiphon 自行選擇最優網路連線的伺服器。", "settings#egress-region#invalid-error-msg": "請選擇一個有效的賽風伺服器區域。", "settings#egress-region#error-modal-title": "伺服器區域不可用", - "settings#egress-region#error-modal-body-http": "You have configured Psiphon to use a server in a specific region.
\nHowever, that region is no longer available.
\nYou must choose a new region or change to the default “Best Performance” choice.", + "settings#egress-region#error-modal-body-http": "已將 Psiphon 設定為使用特定區域中的伺服器。
\n但是,該區域已不可用。
\n須選擇新區域或變更為預設的“最佳效能”選項。", "settings#local-proxy-ports#heading": "本地代理端口", "settings#local-proxy-ports#leave-blank": "留空以自動選擇端口(推薦)。", "settings#local-proxy-ports#reason": "如果您在電腦上使用了需要手動配置才能利用賽風的工具,您可能希望賽風始終使用同一個本地端口號。如果您沒有特定的理由來指定端口號,您應該允許賽風自動選擇端口號,這樣可以避免端口衝突。", @@ -11318,9 +11318,9 @@ "settings#local-proxy-ports#error-modal-title": "本地代理端口衝突", "settings#local-proxy-ports#error-modal-body-http": "

\n您已配置賽風使用指定的本地端口開啟 HTTP 代理。
\n然而,此端口似乎已被占用,賽風無法使用之。\n

\n

\n請更改配置的 HTTP 代理端口值然後再試。我們建議您清除該值,使賽風自動挑選可用端口。\n

", "settings#local-proxy-ports#error-modal-body-socks": "

\n您已配置賽風使用指定的本地端口開啟 SOCKS 代理。
\n然而,此端口似乎已被占用,賽風無法使用之。\n

\n

\n請更改配置的 SOCKS 代理端口值後再再試。我們建議您清除該值,使賽風自動挑選可用端口。\n

", - "settings#expose-local-proxies-to-lan#help-text": "If you have other devices on your network, such as a smart TV or gaming console, you can allow them to use these HTTP and SOCKS proxies while Psiphon is connected.", - "settings#expose-local-proxies-to-lan#hint": "HINT: You should specify at least one of the port numbers above in order to use this feature. The addresses of the local proxies will be displayed in the logs.", - "settings#expose-local-proxies-to-lan#enable-label": "Allow other devices on your network to use the local Psiphon proxies", + "settings#expose-local-proxies-to-lan#help-text": "如果網路上有其他裝置(例如智慧電視或遊戲機),可以讓它們連接 Psiphon 時使用這些 HTTP 和 SOCKS 代理程式。", + "settings#expose-local-proxies-to-lan#hint": "提示:應至少指定某一個上述連接埠數字才能使用此功能。 本地代理的地址將顯示在日誌中。 ", + "settings#expose-local-proxies-to-lan#enable-label": "允許網路上的其他裝置使用本機 Psiphon 代理", "settings#upstream-proxy#heading": "上層代理", "settings#upstream-proxy#by-default": "如果您的電腦已經配置了代理,默認情況下賽風將在建立通道時使用該代理。您可以變更此行為,指定要使用的代理,或者要求不使用此類“上層代理”。", "settings#upstream-proxy#reason": "有些地方如學校和企業等需要使用上層代理。如果您的網路提供者給過您上層代理的參數,請在此手動設置之以便成功連接。", @@ -11331,8 +11331,8 @@ "settings#upstream-proxy#password-label": "密碼", "settings#upstream-proxy#domain-label": "域名", "settings#upstream-proxy#skip-label": "不使用上層代理", - "settings#upstream-proxy#set-hostname-error-msg": "You must provide a Hostname, or leave all Upstream Proxy fields blank for automatic selection.", - "settings#upstream-proxy#set-username-error-msg": "You must provide a Username if you are setting Password or Domain; or leave all authentication fields blank for no authentication.", + "settings#upstream-proxy#set-hostname-error-msg": "須提供主機名稱,或將所有上游代理欄位留空以便自動選擇。", + "settings#upstream-proxy#set-username-error-msg": "若要設定密碼或域名,請提供用戶名稱; 或將所有身份驗證欄位留空不進行身份驗證。", "settings#upstream-proxy#error-modal-title": "上層代理錯誤", "settings#upstream-proxy#error-modal-body-default": "賽風當前使用您的系統代理作為其“上層代理”。
\n然而,我們似乎無法通過該代理連接到賽風伺服器。
\n請啟用“不使用上層代理”后再試。", "settings#upstream-proxy#error-modal-body-configured": "您已配置賽風使用一個“上層代理”。
\n然而,我們似乎無法通過該代理連接到賽風伺服器。
\n請修正設置後再試。", @@ -11365,7 +11365,7 @@ "about#description": "賽風是一個規避審查的工具——旨在提供開放的網路訪問,繞過審查與防火牆。其為開源軟件,開發於加拿大多倫多。", "about#visit-download-site": "請訪問網站以下載最新版本或者獲取幫助與相關資訊。賽風在 Android 和 Windows 平台上可用。", "about#get-by-email": "若網站無法訪問,您可以發送郵件至如下地址以獲取新版本的賽風:", - "about#license-agree": "By using Psiphon you signal that you agree to the terms of the End-User License and Privacy Policy.", + "about#license-agree": "使用 Psiphon 即表示同意以下條款 終端用戶許可隱私權政策。", "about#client-version": "賽風 Windows 客戶端版本:", "general#modal-close-button": "關閉", "general#modal-feedback-button": "发送反馈", @@ -11383,52 +11383,52 @@ "appbackend#state-connected-reminder-body-2": "透過訪問點擊贊助者頁面來維持免費的賽風。", "appbackend#minimized-to-systray-title": "Psiphon 已最小化到通知區域", "appbackend#minimized-to-systray-body": "點擊圖標恢復應用程式", - "appbackend#os-unsupported": "Psiphon no longer supports Windows XP or Vista.\nPlease visit our website for more information.", - "psicash#transaction-error-title": "PsiCash transaction error", - "psicash#transaction-error-body": "Your PsiCash transaction attempt failed unexpectedly.", - "psicash#transaction-ExistingTransaction-title": "PsiCash purchase already exists", - "psicash#transaction-ExistingTransaction-body": "You have an existing PsiCash purchase of this type. Another purchase of this type is not allowed until the previous one expires. Your PsiCash state will be refreshed now.", + "appbackend#os-unsupported": "Psiphon 不再支援 Windows XP 或 Vista。\n請訪問我們的網站了解更多資訊。", + "psicash#transaction-error-title": "PsiCash 交易出錯", + "psicash#transaction-error-body": "PsiCash 交易發生無預警錯誤。", + "psicash#transaction-ExistingTransaction-title": "PsiCash 購買已存在。", + "psicash#transaction-ExistingTransaction-body": "您已 購買此類 PsiCash。 在前一次購買到期之前,無法再次購買同類產品。 您的 PsiCash 狀態會立即刷新。", "psicash#transaction-InsufficientBalance-title": "PsiCash餘額不足", - "psicash#transaction-InsufficientBalance-body": "You do not have sufficient PsiCash balance for this purchase.", - "psicash#transaction-TransactionAmountMismatch-title": "PsiCash purchase price mismatch", - "psicash#transaction-TransactionAmountMismatch-body": "PsiCash purchase prices are out-of-date. Your PsiCash state will be refreshed now.", - "psicash#transaction-TransactionTypeNotFound-title": "PsiCash purchase type not found", - "psicash#transaction-TransactionTypeNotFound-body": "The product you are trying to buy no longer exists. You may need to update or reinstall the application.", - "psicash#transaction-InvalidTokens-title-tracker": "Invalid PsiCash state", - "psicash#transaction-InvalidTokens-body-tracker": "Your PsiCash state is invalid. Try restarting the application. If that doesn't work, you will need to clear your local storage.", - "psicash#transaction-InvalidTokens-title-account": "PsiCash login expired", + "psicash#transaction-InsufficientBalance-body": "沒有足夠的 PsiCash 餘額來完成此次購買。", + "psicash#transaction-TransactionAmountMismatch-title": "PsiCash 購買價格不符", + "psicash#transaction-TransactionAmountMismatch-body": "PsiCash 購買價格已過時。 您的 PsiCash 狀態會刷新。", + "psicash#transaction-TransactionTypeNotFound-title": "找不到 PsiCash 購買種類", + "psicash#transaction-TransactionTypeNotFound-body": "試圖購買的產品已不存在。 可能需要更新或重新安裝該應用程式。", + "psicash#transaction-InvalidTokens-title-tracker": "無效的 PsiCash 狀態", + "psicash#transaction-InvalidTokens-body-tracker": "您的 PsiCash 狀態無效。 嘗試重新啟動應用程式。 如果不起作用,則需清理本地儲存。", + "psicash#transaction-InvalidTokens-title-account": "PsiCash 登入逾時", "psicash#transaction-InvalidTokens-body-account": "PsiCash登入逾時,請重新登入後再試。", "psicash#transaction-ServerError-title": "PsiCash 服務器錯誤", - "psicash#transaction-ServerError-body": "The PsiCash server responded with an error while trying to make the purchase. Please retry your purchase later.", - "psicash#ui-speedboost-active": "Speed Boost active for %s", - "psicash#ui-buypsi": "Buy PsiCash", - "psicash#ui-buymorepsi": "Buy more PsiCash", - "psicash#ui-nsfbalance-buttontext": "Needed for Speed Boost", + "psicash#transaction-ServerError-body": "欲購買時,PsiCash 伺服器回應錯誤。 請稍後重試購買。", + "psicash#ui-speedboost-active": "Speed Boost 運作中 %s", + "psicash#ui-buypsi": "購買 PsiCash", + "psicash#ui-buymorepsi": "購買更多的 PsiCash", + "psicash#ui-nsfbalance-buttontext": "需要 Speed Boost", "psicash#ui-speedboost-button": "加速版 Speed Boost", "psicash#1-hour": "1 小時", "psicash#1-day": "1 天", "psicash#1-week": "1 週", "psicash#1-month": "每月", - "psicash#ui-buyingboost-buttontext": "Starting Speed Boost!", - "psicash#pane-create-account": "Create an account to protect your PsiCash!", - "psicash#pane-balance-header": "Balance:", - "psicash#pane-log-in": "Log In!", + "psicash#ui-buyingboost-buttontext": "開始 Speed Boost!", + "psicash#pane-create-account": "創建帳戶以保障 PsiCash!", + "psicash#pane-balance-header": "餘額:", + "psicash#pane-log-in": "登入!", "psicash#pane-log-out": "登出", - "psicash#pane-manage-web": "Manage on the web", - "psicash#pane-create-account-plea": "Creating a PsiCash account will help preserve your PsiCash if you clear the app's storage or use Psiphon on another device. Learn more.", - "psicash#pane-l2tp-incompatible": "Speed Boost cannot be used while Psiphon is connected in L2TP/IPSec transport mode.", - "psicash#pane-must-log-in": "You must log in to use PsiCash.", - "psicash#pane-create-new-account": "Create a New Account", + "psicash#pane-manage-web": "在網頁上進行管理", + "psicash#pane-create-account-plea": "如果清除應用程式的儲存空間或在其他裝置上使用 Psiphon,建立 PsiCash 帳戶將有助於保留您的 PsiCash。了解詳情", + "psicash#pane-l2tp-incompatible": "以L2TP/IPSec 傳輸模式連接 Psiphon 時無法使用 Speed Boost 。", + "psicash#pane-must-log-in": "需登入方可使用 PsiCash。", + "psicash#pane-create-new-account": "創建新帳戶", "psicash#pane-speed-port-limits-head": "速度與端口限制", "psicash#pane-speed-port-limits-body": "沒有啟用加速器,您的速度會受限且無法支援某些網路流量。透過 PsiCash 啟動加速以解效完全的 Psiphon 使用體驗。", - "psicash#pane-speed-boost-cta": "Unleash the full potential of Psiphon with Speed Boost!", - "psicash#pane-need-more-psicash-header": "You need more PsiCash!", - "psicash#pane-need-more-psicash-body": "In order activate Speed Boost, you need to buy more PsiCash.", - "psicash#pane-need-psicash-visit-store": "Need PsiCash? Visit our store to buy more!", + "psicash#pane-speed-boost-cta": "通過 Speed Boost 檡放 Psiphon 的全部潛力! ", + "psicash#pane-need-more-psicash-header": "需要更多的 PsiCash !", + "psicash#pane-need-more-psicash-body": "欲激活 Speed Boost,請購買更多的 PsiCash。", + "psicash#pane-need-psicash-visit-store": "需要 PsiCash ? 請到我們的商店訂購!", "psicash#overlay-logging-in": "正在登录...", - "psicash#overlay-logging-out": "Logging out…", - "psicash#modal-create-psicash-account-header": "Create a PsiCash Account", - "psicash#modal-create-psicash-account-body": "We strongly encourage you to create a PsiCash account before buying PsiCash. Having an account allows you to share your balance between devices and protect your purchases.", + "psicash#overlay-logging-out": "登出....", + "psicash#modal-create-psicash-account-header": "建立 PsiCash 帳戶", + "psicash#modal-create-psicash-account-body": "強烈建議在購買 PsiCash 前建先立一個 PsiCash 帳戶。 擁有帳戶可在不同裝置間共享餘額並保護您的購買。", "psicash#modal-create-psicash-account-create-button": "創建或登入帳號", "psicash#modal-create-psicash-account-continue-button": "繼續而不登入帳號", "psicash#modal-psicash-logout-offline-header": "PsiCash 帳號登出", @@ -11437,46 +11437,46 @@ "psicash#modal-psicash-logout-offline-logout-anyway-button": "繼續登出", "psicash#modal-psicash-logout-offline-cancel-button": "取消", "psicash#modal-login-header": "PsiCash 帳號", - "psicash#modal-login-body": " or log in below.", + "psicash#modal-login-body": "或在下方登入。", "psicash#modal-login-username-field": "PsiCash 用戶名稱", "psicash#modal-login-password-field": "密碼", "psicash#modal-login-forgot-password-link": "忘記帳號或密碼?", "psicash#modal-login-submit-button": "送出", "psicash#modal-login-cancel-button": "取消", - "psicash#alert#buyspeedboost-purchase-complete": "Speed Boost started!", + "psicash#alert#buyspeedboost-purchase-complete": "Speed Boost 已啟動!", "psicash#modal-logout-header": "PsiCash 帳號登出", - "psicash#modal-logout-error-body": "You logout attempt failed unexpectedly. Please try restarting the application. If that doesn't work, you will need to clear your local storage.", + "psicash#modal-logout-error-body": "登出嘗試失敗。 請嘗試重新啟動應用程式。 如果不起作用,則需 清理本地儲存。", "positive-value-indicator": "+%d", "psicash#mustconnect-modal#title": "要求 Psiphon 連線", "psicash#mustconnect-modal#body": "要使用 PsiCash, 必須先連線到 Psiphon 網路。", - "psicash#init-error-title": "PsiCash initialization error", - "psicash#init-error-body-unrecovered": "PsiCash failed to initialize. This is probably due to a file system problem, such as being out of disk space. Your balance and other state have been lost. PsiCash will not be usable. You can try restarting the application to recover from the problem.", - "psicash#init-error-body-recovered": "PsiCash failed to initialize. This is probably due to a file system problem, such as being out of disk space. Your balance and other state have been reset.", - "psicash#psiphon-speed": "Psiphon
Speed", - "psicash#psiphon-speed-nobreak": "Psiphon Speed", - "psicash#corner-logged-out": "You are logged out of PsiCash", - "psicash#more-ellipsis": "More…", + "psicash#init-error-title": "PsiCash 安裝錯誤", + "psicash#init-error-body-unrecovered": "PsiCash 初始化失敗。 可能是檔案系統問題,例如磁碟空間不足。 已遺失餘額與其它相關狀態資料,PsiCash 無法使用。 您可以嘗試重新啟動應用程式來恢復。", + "psicash#init-error-body-recovered": "PsiCash 初始化失敗。 這可能是檔案系統問題,例如磁碟空間不足。 已重設您的餘額和其他狀態。", + "psicash#psiphon-speed": "Psiphon
網速", + "psicash#psiphon-speed-nobreak": "Psiphon 網速", + "psicash#corner-logged-out": "已登出 PsiCash", + "psicash#more-ellipsis": "更多…", "psicash#login#failure-modal-title": "PsiCash 登入失敗", "psicash#login#catastrophic-error-body": "嘗試登入 PsiCash 意外失敗", "psicash#login#invalid-credentials-body": "輸入的密碼或帳號不正確", - "psicash#login#invalid-credentials-body-multiple-attempts": "Would you instead like to or recover your account?", + "psicash#login#invalid-credentials-body-multiple-attempts": "想要 還是 回復帳戶?", "psicash#login#server-error-body": "您欲登入時 PsiCash 伺服器傳回錯誤訊息,請稍候再試。", - "psicash#login#badrequest-error-body": "The PsiCash server indicated that the login request was invalid. Please re-enter your login information and try again.", + "psicash#login#badrequest-error-body": "PsiCash 伺服器顥示登入請求無效。 請重新輸入登入資訊重試。", "psicash#login#success-modal-title": "PsiCash 登入成功", "psicash#login#last-tracker-merge-body": "當登人您的 PsiCash 帳號,這台登入設備之前的餘額會轉入您的帳號,其為最後一次餘額合併。", - "psicash#alert#tokens-expired": "PsiCash login expired. Please log back in.", + "psicash#alert#tokens-expired": "PsiCash 登入已過期。 請重新登入。", "psicash#alert#logged-out": "PsiCash 帳號已完全登出。", "notice#disallowed-traffic-alert-title": "昇級 Psiphon 連線", - "notice#disallowed-traffic-alert-body": "

Apps not working?

\n

Some internet traffic is not supported without an active Speed Boost. Activate Speed Boost with PsiCash to unlock the full potential of your Psiphon experience.

", - "appbackend#disallowed-traffic-notification-title": "Apps not working?", - "appbackend#disallowed-traffic-notification-body": "Activate Speed Boost to unlock the full potential of your Psiphon experience.", - "settings#disallowed-traffic-alert#heading": "Disallowed Traffic Alert", - "settings#disallowed-traffic-alert#help-text": "Some types of internet traffic are not supported without an active Speed Boost. When such traffic is disallowed, an alert is shown. (Re-enabling will require a reconnection.)", - "settings#disallowed-traffic-alert#disable-label": "Disable disallowed traffic alerts", - "ui#alert#url-copied-to-clipboard": "URL copied to clipboard.
If browser fails to open, paste the URL into the browser address bar.", - "notice#psiphonui-fileerror-error-title": "File Access Error", - "notice#psiphonui-fileerror-error-body": "

Psiphon cannot access a file it needs in order to work properly.

\n

Close the Psiphon application, delete the file listed below, and try running Psiphon again.

", - "notice#psiphonui-fileerror-detail-preamble": "Filename and error message:", + "notice#disallowed-traffic-alert-body": "

應用程式無法正常運作?

\n

某些網路流量需要 Speed Boost 支援。 使用 PsiCash 激活 Speed Boost ,釋放 Psiphon 體驗的全部潛力。\n\n

", + "appbackend#disallowed-traffic-notification-title": "應用程式無法正常運作?", + "appbackend#disallowed-traffic-notification-body": "使用 PsiCash 激活 Speed Boost ,釋放 Psiphon 體驗的全部潛力。", + "settings#disallowed-traffic-alert#heading": "禁用流量警告", + "settings#disallowed-traffic-alert#help-text": "某些類型的網路流量必須用到 Speed Boost 支援。 當此類流量被禁止時,會顯示警報。 (重新啟用需要重新連線。)", + "settings#disallowed-traffic-alert#disable-label": "關閉禁用流量警告", + "ui#alert#url-copied-to-clipboard": "URL複製到剪貼簿。
如果瀏覽器無法打開,請將 URL 貼到瀏覽器網址列。", + "notice#psiphonui-fileerror-error-title": "檔案存取錯誤", + "notice#psiphonui-fileerror-error-body": "

Psiphon 無法存取正常運作所需的檔案。

\n

關閉 Psiphon 應用程式,刪除下列檔案,然後嘗試再次執行 Psiphon。

", + "notice#psiphonui-fileerror-detail-preamble": "檔名與錯誤訊息:", "banner#sponsored-by": "贊助者:" } } diff --git a/src/webui/main-inline.html b/src/webui/main-inline.html index 26bfcdda..42fc5727 100644 --- a/src/webui/main-inline.html +++ b/src/webui/main-inline.html @@ -13459,14 +13459,14 @@ "object"!=typeof JSON&&(JSON={}),function(){"use strict";var rx_one=/^[\],:{}\s]*$/,rx_two=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,rx_three=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,rx_four=/(?:^|:|,)(?:\s*\[)+/g,rx_escapable=/[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,rx_dangerous=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta,rep;function f(t){return t<10?"0"+t:t}function this_value(){return this.valueOf()}function quote(t){return rx_escapable.lastIndex=0,rx_escapable.test(t)?'"'+t.replace(rx_escapable,function(t){var e=meta[t];return"string"==typeof e?e:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'}function str(t,e){var r,n,o,u,f,a=gap,i=e[t];switch(i&&"object"==typeof i&&"function"==typeof i.toJSON&&(i=i.toJSON(t)),"function"==typeof rep&&(i=rep.call(e,t,i)),typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";if(gap+=indent,f=[],"[object Array]"===Object.prototype.toString.apply(i)){for(u=i.length,r=0;r