XLIFF coding guidelines

Language files are typically stored in XLIFF files. XLIFF is based on XML.

Directory and file names

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

Format

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

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'] object is not yet available).

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) and EXT:core/Resources/Private/Language/locallang_core.xlf (GitHub).
  • 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 (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.