mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00

- 修复重复输出问题:适配器层改为debug输出,避免与插件层重复 - 修复格式化错误:修正SaveExploitResult中的端口格式化问题 - 新增利用方法名称i18n:添加GetExploitMethodName函数支持方法名本地化 - 扩展i18n消息模板:新增利用方法执行、MySQL/Redis专用消息模板 - 完善exploiter国际化:所有利用方法和结果消息支持中英文切换 - 优化用户体验:利用方法显示从"information_gathering"变为"信息收集"
221 lines
6.3 KiB
Go
221 lines
6.3 KiB
Go
package i18n
|
||
|
||
import (
|
||
"fmt"
|
||
"sync"
|
||
)
|
||
|
||
/*
|
||
manager.go - 国际化管理器
|
||
|
||
提供统一的国际化文本管理,支持多语言动态切换,
|
||
包含完整的消息库和高效的文本查询机制。
|
||
*/
|
||
|
||
// =============================================================================
|
||
// 常量定义
|
||
// =============================================================================
|
||
|
||
// 支持的语言常量
|
||
const (
|
||
LangZH = "zh" // 中文
|
||
LangEN = "en" // 英文
|
||
)
|
||
|
||
// 默认配置
|
||
const (
|
||
DefaultLanguage = LangZH // 默认语言
|
||
FallbackLanguage = LangEN // 回退语言
|
||
)
|
||
|
||
// =============================================================================
|
||
// 国际化管理器
|
||
// =============================================================================
|
||
|
||
// Manager 国际化管理器
|
||
type Manager struct {
|
||
mu sync.RWMutex
|
||
currentLanguage string
|
||
fallbackLanguage string
|
||
messages map[string]map[string]string
|
||
enabled bool
|
||
}
|
||
|
||
// 全局管理器实例
|
||
var globalManager = NewManager()
|
||
|
||
// NewManager 创建新的国际化管理器
|
||
func NewManager() *Manager {
|
||
return &Manager{
|
||
currentLanguage: DefaultLanguage,
|
||
fallbackLanguage: FallbackLanguage,
|
||
messages: make(map[string]map[string]string),
|
||
enabled: true,
|
||
}
|
||
}
|
||
|
||
// =============================================================================
|
||
// 基础管理方法
|
||
// =============================================================================
|
||
|
||
// SetLanguage 设置当前语言
|
||
func (m *Manager) SetLanguage(lang string) {
|
||
m.mu.Lock()
|
||
defer m.mu.Unlock()
|
||
m.currentLanguage = lang
|
||
}
|
||
|
||
// SetFallbackLanguage 设置回退语言
|
||
func (m *Manager) SetFallbackLanguage(lang string) {
|
||
m.mu.Lock()
|
||
defer m.mu.Unlock()
|
||
m.fallbackLanguage = lang
|
||
}
|
||
|
||
// Enable 启用国际化
|
||
func (m *Manager) Enable() {
|
||
m.mu.Lock()
|
||
defer m.mu.Unlock()
|
||
m.enabled = true
|
||
}
|
||
|
||
// =============================================================================================
|
||
// 已删除的死代码函数(未使用):GetLanguage, Disable
|
||
// =============================================================================================
|
||
|
||
// IsEnabled 检查是否启用国际化
|
||
func (m *Manager) IsEnabled() bool {
|
||
m.mu.RLock()
|
||
defer m.mu.RUnlock()
|
||
return m.enabled
|
||
}
|
||
|
||
// =============================================================================
|
||
// 消息管理方法
|
||
// =============================================================================
|
||
|
||
// AddMessages 批量添加消息
|
||
func (m *Manager) AddMessages(messages map[string]map[string]string) {
|
||
m.mu.Lock()
|
||
defer m.mu.Unlock()
|
||
for key, translations := range messages {
|
||
m.messages[key] = translations
|
||
}
|
||
}
|
||
|
||
// GetMessage 获取指定键和语言的消息
|
||
func (m *Manager) GetMessage(key, lang string) (string, bool) {
|
||
m.mu.RLock()
|
||
defer m.mu.RUnlock()
|
||
|
||
if translations, exists := m.messages[key]; exists {
|
||
if message, exists := translations[lang]; exists {
|
||
return message, true
|
||
}
|
||
}
|
||
return "", false
|
||
}
|
||
|
||
// =============================================================================================
|
||
// 已删除的死代码函数(未使用):
|
||
// AddMessage, HasMessage, GetAllMessages, GetMessageCount, GetSupportedLanguages
|
||
// =============================================================================================
|
||
|
||
// =============================================================================
|
||
// 文本获取方法
|
||
// =============================================================================
|
||
|
||
// GetText 获取国际化文本(支持格式化)
|
||
func (m *Manager) GetText(key string, args ...interface{}) string {
|
||
if !m.IsEnabled() {
|
||
// 如果禁用国际化,返回原始键名
|
||
if len(args) > 0 {
|
||
return fmt.Sprintf(key, args...)
|
||
}
|
||
return key
|
||
}
|
||
|
||
m.mu.RLock()
|
||
currentLang := m.currentLanguage
|
||
fallbackLang := m.fallbackLanguage
|
||
m.mu.RUnlock()
|
||
|
||
// 尝试获取当前语言的消息
|
||
if message, exists := m.GetMessage(key, currentLang); exists {
|
||
if len(args) > 0 {
|
||
return fmt.Sprintf(message, args...)
|
||
}
|
||
return message
|
||
}
|
||
|
||
// 回退到回退语言
|
||
if currentLang != fallbackLang {
|
||
if message, exists := m.GetMessage(key, fallbackLang); exists {
|
||
if len(args) > 0 {
|
||
return fmt.Sprintf(message, args...)
|
||
}
|
||
return message
|
||
}
|
||
}
|
||
|
||
// 如果都没找到,返回键名作为兜底
|
||
if len(args) > 0 {
|
||
return fmt.Sprintf(key, args...)
|
||
}
|
||
return key
|
||
}
|
||
|
||
// =============================================================================================
|
||
// 已删除的死代码函数(未使用):GetTextWithLanguage
|
||
// =============================================================================================
|
||
|
||
// =============================================================================
|
||
// 全局访问函数
|
||
// =============================================================================
|
||
|
||
// SetLanguage 设置全局语言
|
||
func SetLanguage(lang string) {
|
||
globalManager.SetLanguage(lang)
|
||
}
|
||
|
||
// AddMessages 批量添加消息到全局管理器
|
||
func AddMessages(messages map[string]map[string]string) {
|
||
globalManager.AddMessages(messages)
|
||
}
|
||
|
||
// GetText 从全局管理器获取国际化文本
|
||
func GetText(key string, args ...interface{}) string {
|
||
return globalManager.GetText(key, args...)
|
||
}
|
||
|
||
// GetExploitMethodName 获取利用方法的本地化名称
|
||
func GetExploitMethodName(methodName string) string {
|
||
// 尝试获取本地化的方法名称
|
||
key := fmt.Sprintf("exploit_method_name_%s", methodName)
|
||
localizedName := globalManager.GetText(key)
|
||
|
||
// 如果没有找到对应的本地化名称,返回原始名称
|
||
if localizedName == key {
|
||
return methodName
|
||
}
|
||
return localizedName
|
||
}
|
||
|
||
// =============================================================================================
|
||
// 已删除的死代码函数(未使用):
|
||
// GetGlobalManager, GetLanguage, AddMessage, GetTextWithLanguage,
|
||
// Enable, Disable, IsEnabled, HasMessage, GetMessageCount, GetSupportedLanguages
|
||
// =============================================================================================
|
||
|
||
// =============================================================================
|
||
// 初始化函数
|
||
// =============================================================================
|
||
|
||
// init 初始化全局国际化管理器
|
||
func init() {
|
||
// 设置默认配置
|
||
globalManager.SetLanguage(DefaultLanguage)
|
||
globalManager.SetFallbackLanguage(FallbackLanguage)
|
||
globalManager.Enable()
|
||
}
|