Attention

TYPO3 v10 has reached end-of-life as of April 30th 2023 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 v10 here: TYPO3 ELTS.

Localization

TYPO3 is designed to be fully localizable. Hard-coded strings should thus be avoided unless there are some technical limitations (e.g. some very early or low-level stuff where a $GLOBALS['LANG'] object is not yet available).

Defining Localized Strings

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

  • Always check the existing locallang files to see if a given localized string already exists, in particular EXT:core/Resources/Private/Language/locallang_common.xlf and EXT: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() markers (%s, %d, etc.).

  • When a localized string contains several sprintf() markers, it must use numbered arguments (e.g. %1$d).

  • Localized strings should never contain configuration options (e.g. 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, except for CSH. They should be avoided whenever possible.

  • Punctuation marks must be included in the localized string – including trailing marks – as different punctuation marks (e.g. "?" 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.