{"record":{"id":"5101e16a2d58f471","repo":"SubtitleEdit/subtitleedit","slug":"unknown-kind-language-requested-for-this-tra","errorCode":null,"errorMessage":"Unknown {kind} language '{requested}' for this translate engine. Use a code or English name; codes include: {known}...","messagePattern":"Unknown (.+?) language '(.+?)' for this translate engine\\. Use a code or English name; codes include: (.+?)\\.\\.\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/seconv/Core/AutoTranslateRunner.cs","lineNumber":189,"sourceCode":"    /// <summary>\n    /// Completes a user-supplied --translate-url to the full chat/completions endpoint.\n    /// Accepts a bare <c>host:port</c>, an OpenAI-style <c>.../v1</c> base (with or without\n    /// trailing slash), or an already-complete <c>.../chat/completions</c> URL.\n    /// </summary>\n    internal static string CompleteChatCompletionsUrl(string url)\n    {\n        return AutoTranslateUrl.Complete(url, LlamaCppTranslate.DefaultUrl);\n    }\n\n    internal static TranslationPair ResolveLanguage(List<TranslationPair> languages, string requested, string kind)\n    {\n        var match = languages.FirstOrDefault(p => p.Code.Equals(requested, StringComparison.OrdinalIgnoreCase))\n                    ?? languages.FirstOrDefault(p => p.TwoLetterIsoLanguageName.Equals(requested, StringComparison.OrdinalIgnoreCase))\n                    ?? languages.FirstOrDefault(p => p.Name.Equals(requested, StringComparison.OrdinalIgnoreCase));\n        if (match == null)\n        {\n            var known = string.Join(\", \", languages.Select(p => p.Code).Take(30));\n            throw new InvalidOperationException(\n                $\"Unknown {kind} language '{requested}' for this translate engine. Use a code or English name; codes include: {known}...\");\n        }\n\n        return match;\n    }\n\n    /// <summary>\n    /// Local llama.cpp mode: resolve the llama-server binary and a translate model without\n    /// downloading anything. The Subtitle Edit data folders are probed first so an install\n    /// done via the SE GUI (Auto-translate &gt; llama.cpp) is picked up automatically.\n    /// </summary>\n    private static LlamaCppModel ResolveLocalLlamaCpp(string? requestedModel)\n    {\n        LlamaCppLocal.EnsureServerBinary(\"Auto-translate > llama.cpp\", \"--translate-url\");\n        return ResolveLlamaCppModel(requestedModel);\n    }\n\n    private static LlamaCppModel ResolveLlamaCppModel(string? requestedModel)","sourceCodeStart":171,"sourceCodeEnd":207,"githubUrl":"https://github.com/SubtitleEdit/subtitleedit/blob/17a9f0748781032255db3526b7215d2fb891e3af/src/seconv/Core/AutoTranslateRunner.cs#L171-L207","documentation":"InvalidOperationException from ResolveLanguage: the requested source/target language could not be matched against the engine's language list by Code, TwoLetterIsoLanguageName, or Name (all case-insensitive). The message lists up to 30 known codes so the caller can pick a valid one.","triggerScenarios":"Passing a language code/name the active engine does not expose — e.g. 'zh-TW' for an engine that only lists 'zho'/'Chinese', or a 3-letter code where only the 2-letter is registered, or a typo.","commonSituations":"CLI --translate-source/--translate-target with a code not in the engine's list; switching engines without updating language args; macrolanguage vs. variant mismatch.","solutions":["Look at the 'codes include:' list in the message and pass one of those exact codes.","Use the ISO 639-1 two-letter code (e.g. 'en', 'ja') which most engines register under TwoLetterIsoLanguageName.","Use the English display name (e.g. 'Japanese') — also matched.","If the engine is missing a needed language, switch to one that supports it (e.g. nllb covers 200+ languages)."],"exampleFix":"// before\nthrow new InvalidOperationException(\n    $\"Unknown {kind} language '{requested}' for this translate engine. ...\");\n\n// after — surface the closest matches to cut trial-and-error\nvar suggestions = languages.Where(p => p.Code.StartsWith(requested, StringComparison.OrdinalIgnoreCase) || p.Name.Contains(requested, StringComparison.OrdinalIgnoreCase)).Take(5);\nthrow new InvalidOperationException($\"Unknown {kind} language '{requested}'. Closest: {string.Join(\", \", suggestions.Select(p => p.Code))}.\");","handlingStrategy":"validation","validationCode":"static TranslationPair? TryResolve(List<TranslationPair> langs, string requested) =>\n    langs.FirstOrDefault(p => p.Code.Equals(requested, StringComparison.OrdinalIgnoreCase)) ??\n    langs.FirstOrDefault(p => p.TwoLetterIsoLanguageName.Equals(requested, StringComparison.OrdinalIgnoreCase)) ??\n    langs.FirstOrDefault(p => p.Name.Equals(requested, StringComparison.OrdinalIgnoreCase));","typeGuard":"static bool IsKnownLanguage(List<TranslationPair> langs, string requested) => TryResolve(langs, requested) != null;","tryCatchPattern":"null","preventionTips":["Validate source/target against the engine's language list before starting the batch.","Prefer ISO 639-1 two-letter codes (en, ja, de) for broadest engine support.","Surface closest matches in the validation message to cut trial-and-error."],"tags":["translate","language-code","validation","configuration"],"backgroundTag":null,"analyzedSha":"17a9f0748781032255db3526b7215d2fb891e3af","analyzedAt":"2026-08-13T18:11:43.374Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}