TranslationService
-
class
TranslationService -
- Fully qualified name
-
\Netresearch\Nr Llm\ Service\ Feature\ Translation Service
Language translation with formatting and terminology options.
The LLM path's
confidenceis a finish-reason heuristic:0.for9 stop,0.for6 lengthand0.otherwise. It is not a measured probability of a correct translation. Review important translations in context.5 translate(string $text, string $targetLanguage, ?string $sourceLanguage = null, ?TranslationOptions $options = null): TranslationResult-
Translate text to target language.
- param string $text
-
Text to translate
- param string $targetLanguage
-
Target language code (e.g., 'de', 'fr')
- param string|null $sourceLanguage
-
Source language code (auto-detected if null)
- param TranslationOptions|null $options
-
Translation options
See Translation options for translator and polishing options.
- Returns
-
TranslationResult
translateForConfiguration(string $text, string $targetLanguage, LlmConfiguration $configuration, ?string $sourceLanguage = null, ?TranslationOptions $options = null): TranslationResult-
Translate with a stored
Llm's persona/tone.Configuration Unlike
translate, this routes through() Llmso the configuration's storedService Manager:: chat With Configuration () system_, model and provider apply. This lower-level path does not inject attached skills.prompt translatesupplies its own system message and therefore short-circuits() Message, so a configuration'sShaper:: apply System Prompt () system_never reaches the model on that path. Here the translation task and constraints (target/source language, formality, glossary, "output only the translation") are layered into the user message instead, keeping the configuration'sprompt system_as the system message.prompt Mirrors
chatandWith Tools For Configuration () embed.For Configuration () - param string $text
-
Text to translate
- param string $targetLanguage
-
Target language code (e.g., 'de', 'fr')
- param LlmConfiguration $configuration
-
The configuration whose persona/model drive the call
- param string|null $sourceLanguage
-
Source language code (auto-detected if null)
- param TranslationOptions|null $options
-
Translation options;
temperature,max_andtokens modeloverride the configuration's stored defaults when set. Theproviderfield is ignored — the configuration selects the provider.
- Returns
-
TranslationResult
translateBatch(array $texts, string $targetLanguage, ?string $sourceLanguage = null, ?TranslationOptions $options = null): array-
Translate multiple texts.
- param array $texts
-
Array of texts
- param string $targetLanguage
-
Target language code
- param string|null $sourceLanguage
-
Source language code (auto-detected if null)
- param TranslationOptions|null $options
-
Translation options
- Returns
-
array<TranslationResult>
detectLanguage(string $text, ?TranslationOptions $options = null): string-
Detect the language of text.
- param string $text
-
Text to analyze
- param TranslationOptions|null $options
-
Translation options
- Returns
-
string Language code (ISO 639-1)
scoreTranslationQuality(string $sourceText, string $translatedText, string $targetLanguage, ?TranslationOptions $options = null): float-
Score translation quality.
- param string $sourceText
-
Original text
- param string $translatedText
-
Translated text
- param string $targetLanguage
-
Target language code
- param TranslationOptions|null $options
-
Translation options
- Returns
-
float Quality score (0.0 to 1.0)
Editor localization menu: translate with a chosen configuration
An editor localization menu that lets the user pick between
configurations with different tones/prompts resolves the chosen
Llm and hands it to
Translation — the
configuration's system_ (persona/tone) and model then drive
the call, while the translation task itself is layered in automatically.
use Netresearch\NrLlm\Service\Feature\TranslationServiceInterface;
use Netresearch\NrLlm\Service\LlmConfigurationServiceInterface;
public function __construct(
private readonly TranslationServiceInterface $translationService,
private readonly LlmConfigurationServiceInterface $configurationService,
) {}
// 1. Offer the configurations the current backend user may use.
$choices = $this->configurationService->getAccessibleConfigurations();
// 2. Resolve the one the editor selected in the menu.
$configuration = $this->configurationService->getConfiguration($selectedIdentifier);
// 3. Translate with that configuration's persona/tone and model.
$result = $this->translationService->translateForConfiguration(
$text,
'de',
$configuration,
// $sourceLanguage: null => auto-detected
);
LLM and specialized translator paths
| Entry point | Return type | Execution |
|---|---|---|
translate / translate | Domain\ | LLM call through the provider pipeline; translation holds the text. |
translate | Specialized\ | Translator registry, such as DeepL or the LLM translator;
translated holds the text. |
| Batch variants | Array of the corresponding result type | Empty input returns an empty array. |
translateWithTranslator(string $text, string $targetLanguage, ?string $sourceLanguage = null, ?TranslationOptions $options = null): TranslatorResult-
Selects a registered translator from options/configuration/default and returns its specialized result. Optional polishing can make another paid model call; a guardrail policy exception propagates rather than returning the first translation. See Translation options.
translateBatchWithTranslator(array $texts, string $targetLanguage, ?string $sourceLanguage = null, ?TranslationOptions $options = null): array-
Returns an array of
Translatorobjects.Result
getAvailableTranslators(): array-
Returns entries keyed by translator, each with
identifier,nameandavailable. Registration and availability are different states.
Detection, confidence and scoring costs
On the LLM path, source makes a separate detection request
before translating. An uninterpretable detection result or exhausted output
budget falls back to English. Other provider failures can still propagate.
Pass a known source language when a silent language assumption is unsuitable.
score makes another model request. Its output is cast
to a number and clamped to the supported range; it is a model judgment, not a
verified quality measurement. This cost is separate from translation and
from the finish-reason confidence heuristic.