{"record":{"id":"71c00f61571f28ad","repo":"langgenius/dify","slug":"lang-is-not-a-valid-language","errorCode":null,"errorMessage":"{lang} is not a valid language.","messagePattern":"(.+?) is not a valid language\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"api/constants/languages.py","lineNumber":35,"sourceCode":"    \"hi-IN\": \"Asia/Kolkata\",\n    \"tr-TR\": \"Europe/Istanbul\",\n    \"fa-IR\": \"Asia/Tehran\",\n    \"sl-SI\": \"Europe/Ljubljana\",\n    \"th-TH\": \"Asia/Bangkok\",\n    \"id-ID\": \"Asia/Jakarta\",\n    \"ar-TN\": \"Africa/Tunis\",\n    \"nl-NL\": \"Europe/Amsterdam\",\n}\n\nlanguages = list(language_timezone_mapping.keys())\n\n\ndef supported_language(lang):\n    if lang in languages:\n        return lang\n\n    error = f\"{lang} is not a valid language.\"\n    raise ValueError(error)\n\n\ndef get_valid_language(lang: str | None) -> str:\n    if lang and lang in languages:\n        return lang\n    return languages[0]\n","sourceCodeStart":17,"sourceCodeEnd":42,"githubUrl":"https://github.com/langgenius/dify/blob/ef8544b173fd6cd7a8e71df2cab576e52bebbfbc/api/constants/languages.py#L17-L42","documentation":"Raised by supported_language(lang) when lang is not a key in language_timezone_mapping. The supported set is the 23 locale codes in api/constants/languages.py (en-US, zh-Hans, zh-Hant, pt-BR, es-ES, fr-FR, de-DE, ja-JP, ko-KR, ru-RU, it-IT, uk-UA, vi-VN, ro-RO, pl-PL, hi-IN, tr-TR, fa-IR, sl-SI, th-TH, id-ID, ar-TN, nl-NL).","triggerScenarios":"Calling supported_language('en') (missing region), 'en_US' (underscore vs hyphen), or any unsupported locale such as 'de' or 'zh'.","commonSituations":"Browser locale negotiation yielding a bare language code, an Accept-Language header mapped naively, or hardcoded locale strings that differ from the supported keys.","solutions":["Pass one of the supported locale codes (e.g. 'en-US', 'zh-Hans').","Map bare codes to a supported default, or use get_valid_language which falls back instead of raising.","Normalize underscores to hyphens and append a region if missing."],"exampleFix":"// before\nsupported_language('en')\n// after\nfrom constants.languages import get_valid_language\nlang = get_valid_language('en')  # falls back to en-US\n// or pass an exact supported code:\nsupported_language('en-US')","handlingStrategy":"validation","validationCode":"from constants.languages import languages\n\ndef is_supported_language(lang: str | None) -> bool:\n    return lang in languages","typeGuard":"from constants.languages import languages\n\ndef is_supported_language(lang: str | None) -> bool:\n    return isinstance(lang, str) and lang in languages","tryCatchPattern":null,"preventionTips":["Prefer get_valid_language for untrusted input — it falls back instead of raising.","Normalize browser locale codes (underscore -> hyphen) before calling supported_language.","Keep a whitelist aligned with language_timezone_mapping keys."],"tags":["i18n","validation","locale","constants"],"backgroundTag":null,"analyzedSha":"ef8544b173fd6cd7a8e71df2cab576e52bebbfbc","analyzedAt":"2026-08-12T05:15:17.394Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}