{"id":85,"date":"2026-09-21T16:35:29","date_gmt":"2026-09-21T16:35:29","guid":{"rendered":"https:\/\/docs.latw.ai\/uncategorized\/ai-providers-2\/"},"modified":"2026-09-21T16:35:29","modified_gmt":"2026-09-21T16:35:29","slug":"ai-providers-2","status":"publish","type":"post","link":"https:\/\/docs.latw.ai\/pl\/latw-for-wpml\/ai-providers-2\/","title":{"rendered":"Translation Engine &#8211; AI Providers"},"content":{"rendered":"<p>The plugin supports five translation providers, plus any endpoint that speaks OpenAI&#8217;s API. You pick one in <strong>Settings \u2192 General<\/strong>, paste its API key and choose a model. Only one provider is active at a time.<\/p>\n<p>Every engine on this page is billed by its provider, per token. If you would rather not pay per word at all, the plugin can also be driven from Claude or ChatGPT, where the assistant translates and your subscription covers it &#8211; see <em>Translating from Claude and ChatGPT (MCP)<\/em>. That is a separate route, not a provider you select here.<\/p>\n<h2>Available engines<\/h2>\n<h3>OpenAI<\/h3>\n<p>Full LLM translation &#8211; follows the translation prompt, the website description, the glossary and the reasoning effort setting. Billed per token.<\/p>\n<ul>\n<li>Get an API key: <a href=\"https:\/\/platform.openai.com\/api-keys\">https:\/\/platform.openai.com\/api-keys<\/a><\/li>\n<li>Step-by-step guide: <a href=\"https:\/\/help.openai.com\/en\/articles\/4936850-where-do-i-find-my-openai-api-key\">https:\/\/help.openai.com\/en\/articles\/4936850-where-do-i-find-my-openai-api-key<\/a><\/li>\n<li>Key format: starts with <code>sk-<\/code><\/li>\n<\/ul>\n<p><strong>Recommended mode: Background.<\/strong> It is the only provider offering it, and it never depends on your server surviving a long request. If speed does not matter, use <strong>Batch<\/strong> instead &#8211; same result for about 50% less.<\/p>\n<h3>Anthropic (Claude)<\/h3>\n<p>Full LLM translation, same prompt\/context\/glossary support as OpenAI. Billed per token.<\/p>\n<ul>\n<li>Get an API key: <a href=\"https:\/\/console.anthropic.com\/settings\/keys\">https:\/\/console.anthropic.com\/settings\/keys<\/a><\/li>\n<li>Step-by-step guide: <a href=\"https:\/\/platform.claude.com\/docs\/en\/get-api-key\">https:\/\/platform.claude.com\/docs\/en\/get-api-key<\/a><\/li>\n<li>Key format: starts with <code>sk-ant-<\/code><\/li>\n<\/ul>\n<p>Claude has no background mode, so asynchronous jobs always go through the Batch API &#8211; and Claude batches usually take <strong>2\u20138 hours<\/strong>.<\/p>\n<h3>Google Gemini<\/h3>\n<p>Full LLM translation, same prompt\/context\/glossary support. Billed per token.<\/p>\n<ul>\n<li>Get an API key: <a href=\"https:\/\/aistudio.google.com\/apikey\">https:\/\/aistudio.google.com\/apikey<\/a><\/li>\n<li>Step-by-step guide: <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/api-key\">https:\/\/ai.google.dev\/gemini-api\/docs\/api-key<\/a><\/li>\n<\/ul>\n<h3>DeepL<\/h3>\n<p>A machine-translation engine, not an LLM. It translates text instead of following instructions, so the translation prompt, the website description and the reasoning effort are ignored. Glossary terms are respected &#8211; they are uploaded to DeepL as a native glossary. Billed per character.<\/p>\n<ul>\n<li>Get an API key: <a href=\"https:\/\/www.deepl.com\/your-account\/keys\">https:\/\/www.deepl.com\/your-account\/keys<\/a><\/li>\n<li>Step-by-step guide: <a href=\"https:\/\/developers.deepl.com\/docs\/getting-started\/auth\">https:\/\/developers.deepl.com\/docs\/getting-started\/auth<\/a><\/li>\n<li>Free keys end with <code>:fx<\/code> and are routed to the free endpoint automatically.<\/li>\n<\/ul>\n<p>Synchronous only (no Batch API), but content is split into many small requests, so long posts are safe.<\/p>\n<h3>Google Translate<\/h3>\n<p>A machine-translation engine, not an LLM. The translation prompt, website description, reasoning effort and the glossary are all ignored. Billed per character.<\/p>\n<ul>\n<li>Get an API key: <a href=\"https:\/\/console.cloud.google.com\/apis\/credentials\">https:\/\/console.cloud.google.com\/apis\/credentials<\/a><\/li>\n<li>Step-by-step guide: <a href=\"https:\/\/cloud.google.com\/translate\/docs\/setup\">https:\/\/cloud.google.com\/translate\/docs\/setup<\/a><\/li>\n<li>Requires a Google Cloud API key with the Cloud Translation API enabled.<\/li>\n<\/ul>\n<p>Synchronous only, content split into small requests &#8211; safe for long posts.<\/p>\n<h3>Custom endpoint (OpenAI-compatible)<\/h3>\n<p><em>Available in LATW AI Translator for WPML <strong>PRO<\/strong> (version 3.0.1 and later).<\/em><\/p>\n<p>Not a service of its own, but an address you provide: any API that speaks OpenAI&#8217;s chat format. That covers a model you host yourself (Ollama, vLLM, LM Studio, llama.cpp, LocalAI) and the gateways that resell other people&#8217;s models behind the same format &#8211; <strong>OpenRouter<\/strong> and <strong>Groq<\/strong> among them.<\/p>\n<p>Full LLM translation: the translation prompt, the website description and the glossary all apply, exactly as they do for OpenAI.<\/p>\n<ul>\n<li>Instead of a key you enter the endpoint URL, for example <code>https:\/\/openrouter.ai\/api\/v1<\/code>, <code>https:\/\/api.groq.com\/openai\/v1<\/code> or <code>http:\/\/127.0.0.1:11434\/v1<\/code>.<\/li>\n<li>The model is typed in by hand &#8211; there is no list to choose from, because the models are whatever your endpoint serves.<\/li>\n<li>The API key is optional. A server running on your own machine usually needs none.<\/li>\n<li>Billing is whatever your provider charges, so you enter the price yourself. Leave it at 0 for a model you host.<\/li>\n<\/ul>\n<p>Synchronous only: there is no Batch API and no Background mode behind a custom endpoint.<\/p>\n<p>Setting it up, including step-by-step recipes for OpenRouter, Groq and a model on your own server, is covered in <em>Using Your Own Model or Any OpenAI-Compatible API<\/em>.<\/p>\n<hr \/>\n<h2>Processing Mode<\/h2>\n<p>The processing mode decides how each translation is sent to the provider and when the result comes back.<\/p>\n<h3>Synchronous (wait for result)<\/h3>\n<p>The cron calls the provider and waits for the answer in the same run, so the translation appears within a minute or two. Full price.<\/p>\n<p>Best for short content (terms, titles, strings) and for seeing results immediately while setting things up.<\/p>\n<h3>Batch (cheaper, delayed)<\/h3>\n<p>The request is handed to the provider&#8217;s Batch API for about <strong>50% of the normal price<\/strong> and polled every minute until it is ready.<\/p>\n<ul>\n<li>OpenAI \/ Gemini: most batches come back in 10\u201360 minutes (typically 20\u201330).<\/li>\n<li>Anthropic (Claude): usually 2\u20138 hours.<\/li>\n<\/ul>\n<p>The only guarantee providers give is a 24-hour window, so a single job can take much longer at peak times. Best for bulk translating many or long posts, where cost matters more than speed.<\/p>\n<h3>Background (OpenAI only)<\/h3>\n<p>The request is started without blocking and polled every minute, usually finishing in a few minutes. Full price, but it never depends on your server surviving a long request &#8211; the safest choice for long posts.<\/p>\n<p>A mode the active engine cannot serve falls back to <strong>Synchronous<\/strong> on its own: Background works with OpenAI only, and Google Translate, MyMemory and a custom endpoint have no Batch API.<\/p>\n<h3>\u26a0\ufe0f Warning: long content in Synchronous mode can fail.<\/h3>\n<p>One long post is a single HTTP request that can take minutes, so it may be cut short by a PHP, web-server or proxy timeout &#8211; and the whole translation is then retried from scratch. For long posts and bulk jobs pick Batch (or Background on OpenAI).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The plugin supports five translation providers, plus any endpoint that speaks OpenAI&#8217;s API. You pick one in Settings \u2192 General, paste its API key and choose\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_latwm_translated_slug":"","footnotes":""},"categories":[3],"tags":[],"class_list":["post-85","post","type-post","status-publish","format-standard","hentry","category-latw-for-wpml"],"_links":{"self":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts\/85","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/comments?post=85"}],"version-history":[{"count":2,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts\/85\/revisions"}],"predecessor-version":[{"id":91,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts\/85\/revisions\/91"}],"wp:attachment":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/media?parent=85"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/categories?post=85"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/tags?post=85"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}