{"record":{"id":"470ea162cf7d9b9e","repo":"docling-project/docling","slug":"rapidocr-backend-backend-does-not-support-langua","errorCode":null,"errorMessage":"RapidOCR {backend} backend does not support language {lang!r}. Supported: {sorted(PP_OCRV6_LANGS | _PPOCRV5_LANGS)}.","messagePattern":"RapidOCR (.+?) backend does not support language (.+?)\\. Supported: (.+?)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"docling/models/stages/ocr/rapid_ocr_model.py","lineNumber":168,"sourceCode":"    from rapidocr.utils.typings import OCRVersion\n\n    code = lang.strip().lower()\n    code = _DOCLING_LANG_NORMALIZE.get(code, code)\n    aliased = COMMON_LANG_ALIASES.get(code, code)\n\n    if aliased in PP_OCRV6_LANGS:\n        version = OCRVersion.PPOCRV6\n    elif backend == \"torch\":\n        if aliased not in _PPOCRV4_LANGS:\n            raise ValueError(\n                f\"RapidOCR torch backend does not support language {lang!r}. \"\n                f\"Supported: {sorted(PP_OCRV6_LANGS | _PPOCRV4_LANGS)}.\"\n            )\n        version = OCRVersion.PPOCRV4\n    elif aliased in _PPOCRV5_LANGS:\n        version = OCRVersion.PPOCRV5\n    else:\n        raise ValueError(\n            f\"RapidOCR {backend} backend does not support language {lang!r}. \"\n            f\"Supported: {sorted(PP_OCRV6_LANGS | _PPOCRV5_LANGS)}.\"\n        )\n\n    _log.debug(\n        \"RapidOCR resolved lang=%r backend=%r -> version=%s rec_lang=%r\",\n        lang,\n        backend,\n        version.value,\n        aliased,\n    )\n    return _RapidOcrModelSpec(\n        backend=backend,\n        user_lang=lang,\n        rapidocr_lang_token=aliased,\n        ppocr_version=version,\n    )\n","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/docling-project/docling/blob/61d76f1ff3f8428065465889f7b4577da7df704c/docling/models/stages/ocr/rapid_ocr_model.py#L150-L186","documentation":"For non-torch backends the language resolver falls back from PP-OCRv6 to PP-OCRv5. If the requested language (after normalization and aliasing) is in neither PP_OCRV6_LANGS nor _PPOCRV5_LANGS, this ValueError is raised listing the supported codes for this backend.","triggerScenarios":"RapidOcrOptions(lang=X, backend='onnxruntime'|'openvino'|'paddle') where X is not a PP-OCRv5 or PP-OCRv6 language code, e.g. a fabricated code like 'klingon' or an unsupported regional code.","commonSituations":"Misspelled language codes ('ch' vs 'chinese'); using ISO codes that rapidocr does not alias; assuming a language is supported because another OCR engine supports it.","solutions":["Use one of the language codes listed in the error message (they are the exact accepted tokens after aliasing).","Check Docling's _DOCLING_LANG_NORMALIZE and rapidocr's COMMON_LANG_ALIASES to confirm your spelling maps correctly.","If the language is unsupported by RapidOCR entirely, select a different OCR engine via pipeline_options.ocr_options."],"exampleFix":"# before\nocr_options = RapidOcrOptions(lang=\"jpan\")\n\n# after\nocr_options = RapidOcrOptions(lang=\"japan\")","handlingStrategy":"validation","validationCode":"from rapidocr.utils.model_resolver import COMMON_LANG_ALIASES, PP_OCRV6_LANGS\n\ncode = lang.strip().lower()\naliased = COMMON_LANG_ALIASES.get(code, code)\nassert aliased in PP_OCRV6_LANGS | _PPOCRV5_LANGS, f\"unsupported lang {lang!r}\"","typeGuard":"def is_supported_rapidocr_lang(lang: str) -> bool:\n    from rapidocr.utils.model_resolver import COMMON_LANG_ALIASES, PP_OCRV6_LANGS\n    code = lang.strip().lower()\n    aliased = COMMON_LANG_ALIASES.get(code, code)\n    return aliased in PP_OCRV6_LANGS  # v6 is the preferred superset","tryCatchPattern":"try:\n    RapidOcrModel(options=RapidOcrOptions(lang=lang, backend=backend))\nexcept ValueError as e:\n    if \"does not support language\" in str(e):\n        log.warning(\"unsupported lang %r, falling back to default OCR language\", lang)\n        options.lang = [\"en\"]\n    else:\n        raise","preventionTips":["Source language codes from the rapidocr-supported set rather than free-form user input.","Normalize lang strings (strip, lowercase) before validation.","Document the accepted language codes for your deployment next to the OCR config."],"tags":["ocr","rapidocr","language","validation"],"backgroundTag":null,"analyzedSha":"61d76f1ff3f8428065465889f7b4577da7df704c","analyzedAt":"2026-08-14T23:53:18.727Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}