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() }