---
title: "LanguageService"
manual: "TYPO3 Explained"
version: "12.4"
permalink: "https://docs.typo3.org/permalink/t3coreapi:languageservice-api@12.4"
source: "ApiOverview/Localization/LocalizationApi/LanguageService.rst"
rendered: "2026-10-21T15:29:37+00:00"
---

> [!WARNING]
> **Attention**
>
> TYPO3 v12 has reached end-of-life as of April 30th 2026 and
> is no longer being maintained. Use the version switcher on the top
> left of this page to select documentation for a supported version of TYPO3.
>
> Need more time before upgrading?
> You can purchase Extended Long Term Support (ELTS) for TYPO3 v12 here:
> [TYPO3 ELTS](https://typo3.com/services/extended-support-elts).

# LanguageService {#languageservice-api}

This class is used to translate strings in plain PHP. For examples
see [Localization in PHP](https://docs.typo3.org/permalink/t3coreapi:extension-localization-php@12.4). A `LanguageService` **should not**
be created directly, therefore its constructor is internal. Create a
`LanguageService` with the [LanguageServiceFactory](https://docs.typo3.org/permalink/t3coreapi:languageservicefactory-api@12.4).

In the backend context a `LanguageService` is stored in the global
variable `$GLOBALS['LANG']`.
In the frontend a `LanguageService` can be accessed via the contentObject:

-   **class LanguageService**

    -   *Fully qualified name:* `\TYPO3\CMS\Core\Localization\LanguageService`

    Main API to fetch labels from XLF (label files) based on the current system
    language of TYPO3. It is able to resolve references to files + their pointers to the
    proper language. If you see something about "LLL", this class does the trick for you. It
    is not related to language handling of content, but rather of labels for plugins.

    Usually this is injected into $GLOBALS\['LANG'\] when in backend or CLI context, and
    populated by the current backend user. Do not rely on $GLOBAL\['LANG'\] in frontend, as it is only
    available under certain circumstances!
    In frontend, this is also used to translate "labels", see TypoScriptFrontendController->sL()
    for that.

    As TYPO3 internally does not match the proper ISO locale standard, the "locale" here
    is actually a list of supported language keys, (see Locales class), whereas "English"
    has the language key "default".

    Further usages on setting up your own LanguageService in BE:

    ```php
    $languageService = GeneralUtility::makeInstance(LanguageServiceFactory::class)
        ->createFromUserPreferences($GLOBALS['BE_USER']);
    ```

    -   **public lang**

        This is set to the language that is currently running for the user

    -   **public debugKey**

        If true, will show the key/location of labels in the backend.

    -   **getLL(?string $index)**

        **Deprecated:** will be removed in TYPO3 v13.0. Use sL() instead.

        Returns the label with key $index from the globally loaded $LOCAL_LANG array.

        Mostly used from modules with only one LOCAL_LANG file loaded into the global space.

        -   *param $index:* Label key

        *Returns:* `string`

    -   **sL(?string $input)**

        Main and most often used method.

        Resolve strings like these:

        ```php
        'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.depth_0'
        ```

        This looks up the given .xlf file path in the 'core' extension for label labels.depth_0

        -   *param $input:* Label key/reference

        *Returns:* `string`

    -   **overrideLabels(string $fileRef, array $labels)**

        Define custom labels which can be overridden for a given file. This is typically
        the case for TypoScript plugins.

        -   *param $fileRef:* the fileRef
        -   *param $labels:* the labels

    -   **getLocale()**

        *Returns:* `?TYPO3CMSCoreLocalizationLocale`

## Example: Use {#example-use}

**EXT:my_extension/Classes/Controller/ExampleController.php (not Extbase)**

```php
<?php

use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Core\Localization\LanguageServiceFactory;

final class ExampleController
{
    private ServerRequestInterface $request;

    public function __construct(
        private readonly LanguageServiceFactory $LanguageServiceFactory,
    ) {}

    public function processAction(
        string $content,
        array $configurations,
        ServerRequestInterface $request,
    ): string {
        $this->request = $request;

        // ...
        $content .=  $this->getTranslatedLabel(
            'LLL:EXT:my_extension/Resources/Private/Language/locallang.xlf:labels.exampleLabel',
        );
        // ...

        return $content;
    }

    private function getTranslatedLabel(string $key): string
    {
        $language =
            $this->request->getAttribute('language')
                ?? $this->request->getAttribute('site')->getDefaultLanguage();
        $languageService = $this->LanguageServiceFactory
            ->createFromSiteLanguage($language);

        return $languageService->sL($key);
    }
}

```
