{"record":{"id":"af709e25439af978","repo":"stanfordnlp/CoreNLP","slug":"unknown-language-props-containskey-language","errorCode":null,"errorMessage":"Unknown language <props.containsKey(\"language\")>","messagePattern":"Unknown language <props\\.containsKey\\(\"language\"\\)>","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/edu/stanford/nlp/parser/nndep/Config.java","lineNumber":260,"sourceCode":"    saveIntermediate = PropertiesUtils.getBool(props, \"saveIntermediate\", saveIntermediate);\n    unlabeled = PropertiesUtils.getBool(props, \"unlabeled\", unlabeled);\n    cPOS = PropertiesUtils.getBool(props, \"cPOS\", cPOS);\n    noPunc = PropertiesUtils.getBool(props, \"noPunc\", noPunc);\n    doWordEmbeddingGradUpdate = PropertiesUtils.getBool(props, \"doWordEmbeddingGradUpdate\", doWordEmbeddingGradUpdate);\n\n    // Runtime parsing options\n    sentenceDelimiter = PropertiesUtils.getString(props, \"sentenceDelimiter\", sentenceDelimiter);\n    tagger = PropertiesUtils.getString(props, \"tagger.model\", tagger);\n\n    String escaperClass = props.getProperty(\"escaper\");\n    escaper = escaperClass != null ? ReflectionLoading.loadByReflection(escaperClass) : null;\n\n    // Language options\n    language = props.containsKey(\"language\")\n               ? getLanguage(props.getProperty(\"language\"))\n               : language;\n    if (language == null) {\n      throw new IllegalArgumentException(\"Unknown language \" + props.containsKey(\"language\"));\n    }\n    if (language.params == null) {\n      throw new IllegalArgumentException(\"Language \" + language + \" does not support parsing!\");\n    }\n    tlp = language.params.treebankLanguagePack();\n    preTokenized = PropertiesUtils.getBool(props, \"tokenized\", preTokenized);\n\n    // if a tlp was specified go with that\n    String tlpCanonicalName = props.getProperty(\"tlp\");\n    if (tlpCanonicalName != null) {\n      try {\n        tlp = ReflectionLoading.loadByReflection(tlpCanonicalName);\n        System.err.println(\"Loaded TreebankLanguagePack: \"+tlpCanonicalName);\n      } catch (Exception e) {\n        System.err.println(\"Error: Failed to load TreebankLanguagePack: \"+tlpCanonicalName);\n      }\n    }\n  }","sourceCodeStart":242,"sourceCodeEnd":278,"githubUrl":"https://github.com/stanfordnlp/CoreNLP/blob/1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a/src/edu/stanford/nlp/parser/nndep/Config.java#L242-L278","documentation":"DependencyParser's Config.setProperties() resolves the `language` property via getLanguage(). If no language property is given (or an unrecognized name is given) the resolved `language` ends up null, and this IllegalArgumentException is thrown. It indicates the parser could not determine which language configuration (treebank language pack, head rules, etc.) to use.","triggerScenarios":"Instantiating DependencyParser/Config with a Properties object whose `language` key is missing or whose value getLanguage() doesn't recognize (note the message prints props.containsKey(\"language\"), so it confusingly shows true/false).","commonSituations":"Typos in -language value (e.g. 'english' vs 'englishsd'); building a parser programmatically without setting language; copying config from another parser (e.g. stanford-parser) that used different language keys.","solutions":["Set the `language` property to a known value, e.g. -language english (or the appropriate UD language name)","Check accepted values in Config.getLanguage() / the Language enum and fix spelling/case","If constructing Config programmatically, pass props.put(\"language\", \"english\") before creating the parser"],"exampleFix":"// before\nProperties props = new Properties();\nDependencyParser parser = DependencyParser.train(props); // language missing\n// after\nProperties props = new Properties();\nprops.setProperty(\"language\", \"english\");\nDependencyParser parser = DependencyParser.train(props);","handlingStrategy":"validation","validationCode":"Properties props = new Properties();\nif (props.getProperty(\"language\") == null) props.setProperty(\"language\", \"english\");","typeGuard":null,"tryCatchPattern":"try {\n  DependencyParser parser = DependencyParser.train(props);\n} catch (IllegalArgumentException e) {\n  props.setProperty(\"language\", \"english\");\n  DependencyParser parser = DependencyParser.train(props);\n}","preventionTips":["Always set `language` explicitly in parser properties","Verify language names against Config.getLanguage()'s supported set","Note the exception prints containsKey(true/false), not the bad value - log your props yourself"],"tags":["java","illegal-argument","nndep","config"],"backgroundTag":"invalid-config-value","analyzedSha":"1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a","analyzedAt":"2026-09-10T02:24:07.274Z","contentChangedAt":"2026-09-10T02:24:07.274Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}