{"record":{"id":"134a4310d314c72a","repo":"EllanJiang/GameFramework","slug":"language-is-invalid","errorCode":null,"errorMessage":"Language is invalid.","messagePattern":"Language is invalid\\.","errorType":"exception","errorClass":"GameFrameworkException","httpStatus":null,"severity":"error","filePath":"GameFramework/Localization/LocalizationManager.cs","lineNumber":48,"sourceCode":"            m_DataProvider = new DataProvider<ILocalizationManager>(this);\n            m_LocalizationHelper = null;\n            m_Language = Language.Unspecified;\n        }\n\n        /// <summary>\n        /// 获取或设置本地化语言。\n        /// </summary>\n        public Language Language\n        {\n            get\n            {\n                return m_Language;\n            }\n            set\n            {\n                if (value == Language.Unspecified)\n                {\n                    throw new GameFrameworkException(\"Language is invalid.\");\n                }\n\n                m_Language = value;\n            }\n        }\n\n        /// <summary>\n        /// 获取系统语言。\n        /// </summary>\n        public Language SystemLanguage\n        {\n            get\n            {\n                if (m_LocalizationHelper == null)\n                {\n                    throw new GameFrameworkException(\"You must set localization helper first.\");\n                }\n","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/EllanJiang/GameFramework/blob/d0c010b05167c58e92350449d04864a91ca13fd2/GameFramework/Localization/LocalizationManager.cs#L30-L66","documentation":"The LocalizationManager.Language property setter rejects Language.Unspecified. Language is an enum and Unspecified is the sentinel meaning 'no language chosen'; assigning it to the manager would leave the localization system in an undefined state, so the library throws instead of accepting it.","triggerScenarios":"Assigning localization.Language = Language.Unspecified directly, or copying a Language value read from uninitialized data/config/UI that defaulted to Unspecified.","commonSituations":"Binding the property to a UI dropdown whose default selected value maps to Unspecified; deserializing a settings file where the language field was missing and the enum defaulted to 0 (Unspecified); propagating a failed system-language lookup as Unspecified instead of a concrete language.","solutions":["Assign a concrete language, e.g. localization.Language = Language.English.","Guard with if (lang != Language.Unspecified) before setting the property.","If the language came from config, provide a non-Unspecified default (e.g. fall back to English) when parsing fails."],"exampleFix":"// before\nLocalization.Language = (Language)savedInt; // may be Language.Unspecified\n\n// after\nvar lang = (Language)savedInt;\nif (lang != Language.Unspecified)\n{\n    Localization.Language = lang;\n}\nelse\n{\n    Localization.Language = Language.English;\n}","handlingStrategy":"validation","validationCode":"if (System.Enum.IsDefined(typeof(Language), lang) && lang != Language.Unspecified)\n{\n    Localization.Language = lang;\n}","typeGuard":"static bool IsValidLanguage(Language l) => l != Language.Unspecified && System.Enum.IsDefined(typeof(Language), l);","tryCatchPattern":"try { Localization.Language = lang; }\ncatch (GameFrameworkException) { Localization.Language = Language.English; }","preventionTips":["Never persist or copy Language.Unspecified; serialize concrete languages only.","Fall back to a default language when config/UI values are missing.","Validate enum values with Enum.IsDefined after loading from data files."],"tags":["localization","enum","invalid-value"],"backgroundTag":"invalid-enum-value","analyzedSha":"d0c010b05167c58e92350449d04864a91ca13fd2","analyzedAt":"2026-09-15T13:37:15.352Z","contentChangedAt":"2026-09-15T13:37:15.352Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}