---
title: "XLIFF coding guidelines"
manual: "TYPO3 Explained"
version: "13.4"
permalink: "https://docs.typo3.org/permalink/t3coreapi:cgl-xliff@13.4"
source: "CodingGuidelines/CglXliff/Index.rst"
rendered: "2026-09-17T15:24:38+00:00"
---

# XLIFF coding guidelines {#xliff-coding-guidelines}

Language files are typically stored in [XLIFF](https://en.wikipedia.org/wiki/XLIFF)
files. XLIFF is based on XML.

> [!NOTE]
> **See also**
>
> [XLIFF Format](https://docs.typo3.org/permalink/t3coreapi:xliff@13.4)

## Directory and file names {#directory-and-file-names}

-   Files have the ending `.xlf`.
-   Language files are located in the directory `EXT:my_extension/Resources/Private/Language/`.

## Format {#format}

-   Use TABs, not spaces.
-   TAB size is 4.

> [!TIP]
> Have a look into the [.editorconfig](https://docs.typo3.org/permalink/t3coreapi:cgl-ide@13.4) file,
> which allows you to enforce file formatting.

## Language keys {#language-keys}

TYPO3 is designed to be fully localizable. Hard-coded strings should
thus be avoided unless there are some technical limitations (for example, some
very early or low-level stuff where a [$GLOBALS\['LANG'\]](https://docs.typo3.org/permalink/t3coreapi:languageservice-api@13.4)
object is not yet available).

### Defining localized strings {#defining-localized-strings}

Here are some rules to respect when working with labels in `locallang.xlf`
files:

-   Always check the existing `locallang.xlf` files to see, if a given localized
    string already exists, in particular [EXT:core/Resources/Private/Language/locallang_common.xlf (GitHub)](https://github.com/typo3/typo3/blob/13.4/typo3/sysext/core/Resources/Private/Language/locallang_common.xlf)
    and [EXT:core/Resources/Private/Language/locallang_core.xlf (GitHub)](https://github.com/typo3/typo3/blob/13.4/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf).
-   Localized strings should never be all uppercase. If uppercase is needed,
    then appropriate methods should be used to transform them to uppercase.
-   Localized strings must not be split into several parts to include
    stuff in their middle. Rather use a single string with
    [sprintf()](https://www.php.net/manual/en/function.sprintf.php)
    markers (`%s`, `%d`, etc.).
-   When a localized string contains several `sprintf()` markers, it
    **must** use numbered arguments (for example, `%1$d`).
-   Localized strings should never contain configuration options (for example,
    `index_config:timer_frequency`, which would display a link or
    `EXT:wizard_crpages/cshimages/wizards_1.png`, which would show
    an image). Configuration like this does not belong in language
    labels, but in TypoScript.
-   Localized strings are not supposed to contain HTML tags. They should
    be avoided whenever possible.
-   Punctuation marks must be included in the localized string –
    including trailing marks – as different punctuation marks (for example, "?"
    and "¿") may be used in various languages. Also some languages include
    blanks before some punctuation marks.

Once a localized string appears in a released version of TYPO3, it
cannot be changed (unless it needs grammar or spelling fixes). Nor can
it be removed. If the label of a localized string has to be changed, a
new one should be introduced instead.
