mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-10-26 13:06:56 +00:00
boxdd: Add insecure mode
This commit is contained in:
@@ -1,32 +1,103 @@
|
||||
package locale
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
|
||||
"golang.org/x/text/language"
|
||||
)
|
||||
|
||||
var (
|
||||
localeRegistry = make(map[string]*Locale)
|
||||
current = defaultLocal
|
||||
localeRegistry = map[string]*Locale{
|
||||
"en": defaultLocale,
|
||||
}
|
||||
localeMatcher = language.NewMatcher(
|
||||
[]language.Tag{
|
||||
language.English,
|
||||
language.SimplifiedChinese,
|
||||
language.TraditionalChinese,
|
||||
language.Persian,
|
||||
language.Russian,
|
||||
},
|
||||
language.PreferSameScript(true),
|
||||
)
|
||||
localeNames = []string{"en", "zh-Hans", "zh-Hant", "fa", "ru"}
|
||||
current atomic.Pointer[Locale]
|
||||
)
|
||||
|
||||
type Locale struct {
|
||||
// deprecated messages for graphical clients
|
||||
Locale string
|
||||
DeprecatedMessage string
|
||||
DeprecatedMessageNoLink string
|
||||
InsecureFeatureMessage string
|
||||
ExternalPathFeature string
|
||||
}
|
||||
|
||||
var defaultLocal = &Locale{
|
||||
Locale: "en_US",
|
||||
DeprecatedMessage: "%s is deprecated in sing-box %s and will be removed in sing-box %s please checkout documentation for migration.",
|
||||
var defaultLocale = &Locale{
|
||||
Locale: "en",
|
||||
DeprecatedMessage: "%s is deprecated in sing-box %s and will be removed in sing-box %s. Please check the documentation for migration.",
|
||||
DeprecatedMessageNoLink: "%s is deprecated in sing-box %s and will be removed in sing-box %s.",
|
||||
InsecureFeatureMessage: "%s is considered insecure in the graphical client for sing-box on Windows. Enable Insecure Mode in `Settings - Core - Insecure Mode` to use it.",
|
||||
ExternalPathFeature: "Access to %s (outside of the working directory) is considered insecure in the graphical client for sing-box on Windows. Enable Insecure Mode in `Settings - Core - Insecure Mode` to use it.",
|
||||
}
|
||||
|
||||
func init() {
|
||||
current.Store(defaultLocale)
|
||||
}
|
||||
|
||||
func Current() *Locale {
|
||||
return current
|
||||
return current.Load()
|
||||
}
|
||||
|
||||
func Set(localeId string) bool {
|
||||
locale, loaded := localeRegistry[localeId]
|
||||
func Set(localeID string) bool {
|
||||
localeEntries := strings.Split(localeID, ",")
|
||||
for i, localeEntry := range localeEntries {
|
||||
languageID, options, hasOptions := strings.Cut(localeEntry, ";")
|
||||
languageID, _, _ = strings.Cut(strings.TrimSpace(languageID), "@")
|
||||
languageID = strings.ReplaceAll(languageID, "_", "-")
|
||||
if !hasOptions {
|
||||
languageID, _, _ = strings.Cut(languageID, ".")
|
||||
}
|
||||
switch {
|
||||
case strings.EqualFold(languageID, "C"), strings.EqualFold(languageID, "POSIX"):
|
||||
languageID = "en"
|
||||
case strings.EqualFold(languageID, "zh-CHS"):
|
||||
languageID = "zh-Hans"
|
||||
case strings.EqualFold(languageID, "zh-CHT"):
|
||||
languageID = "zh-Hant"
|
||||
}
|
||||
localeEntries[i] = languageID
|
||||
if hasOptions {
|
||||
localeEntries[i] += ";" + options
|
||||
}
|
||||
}
|
||||
localeID = strings.Join(localeEntries, ",")
|
||||
tags, _, err := language.ParseAcceptLanguage(localeID)
|
||||
if err != nil || len(tags) == 0 {
|
||||
return false
|
||||
}
|
||||
for i, tag := range tags {
|
||||
base, script, region := tag.Raw()
|
||||
if base.String() != "zh" && base.String() != "cmn" {
|
||||
continue
|
||||
}
|
||||
if script.String() == "Hans" || script.String() == "Hant" {
|
||||
continue
|
||||
}
|
||||
languageID := "zh-Hans"
|
||||
if region.String() == "TW" || region.String() == "HK" || region.String() == "MO" {
|
||||
languageID = "zh-Hant"
|
||||
}
|
||||
if region.String() != "ZZ" {
|
||||
languageID += "-" + region.String()
|
||||
}
|
||||
tags[i] = language.MustParse(languageID)
|
||||
}
|
||||
_, localeIndex, _ := localeMatcher.Match(tags...)
|
||||
selectedLocale, loaded := localeRegistry[localeNames[localeIndex]]
|
||||
if !loaded {
|
||||
return false
|
||||
}
|
||||
current = locale
|
||||
current.Store(selectedLocale)
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package locale
|
||||
|
||||
func init() {
|
||||
localeRegistry["fa"] = &Locale{
|
||||
Locale: "fa",
|
||||
DeprecatedMessage: "%s از sing-box %s منسوخ شده است و در sing-box %s حذف خواهد شد؛ لطفاً راهنمای مهاجرت را ببینید.",
|
||||
DeprecatedMessageNoLink: "%s از sing-box %s منسوخ شده است و در sing-box %s حذف خواهد شد.",
|
||||
InsecureFeatureMessage: "%s در کلاینت گرافیکی sing-box برای Windows ناامن تلقی میشود. برای استفاده، `حالت ناامن` را در `تنظیمات - هسته - حالت ناامن` فعال کنید.",
|
||||
ExternalPathFeature: "دسترسی به %s (خارج از پوشهٔ کاری) در کلاینت گرافیکی sing-box برای Windows ناامن تلقی میشود. برای استفاده، `حالت ناامن` را در `تنظیمات - هسته - حالت ناامن` فعال کنید.",
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package locale
|
||||
|
||||
func init() {
|
||||
localeRegistry["ru"] = &Locale{
|
||||
Locale: "ru",
|
||||
DeprecatedMessage: "Использование %s устарело в sing-box %s, и эта возможность будет удалена в sing-box %s. Ознакомьтесь с руководством по миграции.",
|
||||
DeprecatedMessageNoLink: "Использование %s устарело в sing-box %s, и эта возможность будет удалена в sing-box %s.",
|
||||
InsecureFeatureMessage: "%s считается небезопасным в графическом клиенте sing-box для Windows. Чтобы использовать эту возможность, включите `Небезопасный режим` в разделе `Настройки — Ядро — Небезопасный режим`.",
|
||||
ExternalPathFeature: "Доступ к %s (за пределами рабочего каталога) считается небезопасным в графическом клиенте sing-box для Windows. Чтобы использовать эту возможность, включите `Небезопасный режим` в разделе `Настройки — Ядро — Небезопасный режим`.",
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,11 @@ package locale
|
||||
var warningMessageForEndUsers = "\n\n如果您不明白此消息意味着什么:您的配置文件已过时,且将很快不可用。请联系您的配置提供者以更新配置。"
|
||||
|
||||
func init() {
|
||||
localeRegistry["zh_CN"] = &Locale{
|
||||
Locale: "zh_CN",
|
||||
localeRegistry["zh-Hans"] = &Locale{
|
||||
Locale: "zh-Hans",
|
||||
DeprecatedMessage: "%s 已在 sing-box %s 中被弃用,且将在 sing-box %s 中被移除,请参阅迁移指南。" + warningMessageForEndUsers,
|
||||
DeprecatedMessageNoLink: "%s 已在 sing-box %s 中被弃用,且将在 sing-box %s 中被移除。" + warningMessageForEndUsers,
|
||||
InsecureFeatureMessage: "%s 在 sing-box 的 Windows 图形客户端中被视为不安全。请在 `设置 - 核心 - 不安全模式` 中启用不安全模式后使用。",
|
||||
ExternalPathFeature: "访问 %s(位于工作目录之外)在 sing-box 的 Windows 图形客户端中是不安全的。请在 `设置 - 核心 - 不安全模式` 中启用不安全模式后使用。",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package locale
|
||||
|
||||
func init() {
|
||||
localeRegistry["zh-Hant"] = &Locale{
|
||||
Locale: "zh-Hant",
|
||||
DeprecatedMessage: "%s 已在 sing-box %s 中棄用,且將在 sing-box %s 中移除,請參閱遷移指南。",
|
||||
DeprecatedMessageNoLink: "%s 已在 sing-box %s 中棄用,且將在 sing-box %s 中移除。",
|
||||
InsecureFeatureMessage: "%s 在 sing-box 的 Windows 圖形用戶端中被視為不安全。請在 `設置 - 核心 - 不安全模式` 中啟用不安全模式後使用。",
|
||||
ExternalPathFeature: "存取 %s(位於工作目錄之外)在 sing-box 的 Windows 圖形用戶端中被視為不安全。請在 `設置 - 核心 - 不安全模式` 中啟用不安全模式後使用。",
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user