PHPackages                             sitegeist/csv-labels - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Localization &amp; i18n](/categories/localization)
4. /
5. sitegeist/csv-labels

ActiveTypo3-cms-extension[Localization &amp; i18n](/categories/localization)

sitegeist/csv-labels
====================

Use CSV files to provide translation labels to TYPO3

1.1.0(4mo ago)379.3k—9%1[1 PRs](https://github.com/sitegeist/csv-labels/pulls)GPL-2.0-or-laterPHPCI passing

Since Feb 3Pushed 4mo ago3 watchersCompare

[ Source](https://github.com/sitegeist/csv-labels)[ Packagist](https://packagist.org/packages/sitegeist/csv-labels)[ Docs](https://github.com/sitegeist/csv-labels)[ RSS](/packages/sitegeist-csv-labels/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (6)Dependencies (3)Versions (13)Used By (0)

CSV Translation Files for TYPO3
===============================

[](#csv-translation-files-for-typo3)

This utility extension extends the language handling of TYPO3 to be able to use a simple CSV file format to specify language labels. While the XLIFF file format is a widely used standard and is more powerful, CSV files can be a pragmatic approach for language files that only contain a handful of entries.

This extension **does not** remove or disable XLIFF files, it merely provides another file format to choose from. We at sitegeist use the CSV file format to define language labels for [Fluid Components](https://github.com/sitegeist/fluid-components).

Getting started
---------------

[](#getting-started)

Install the extension either [from TER](https://extensions.typo3.org/extension/csv_labels/) or [via composer](https://packagist.org/packages/sitegeist/csv-labels):

```
composer require sitegeist/csv-labels

```

File format
-----------

[](#file-format)

**locallang.csv:**

```
"id","description","default","de"
"Actions","","Actions","Aktionen"
"ConfirmDelete","Message in the delete user dialog","Should the following user be deleted?","Soll der folgende Nutzer gelöscht werden?"

```

Rules:

- The column `id` represents the label identifier
- The column `description` represents the label description (for documentation purposes)
- All other columns are treated as a translation for the locale from the header line
- The csv files use `,` as delimiter and `"` as text delimiters (default configuration of [fgetcsv](https://www.php.net/manual/en/function.fgetcsv.php))

Usage
-----

[](#usage)

```

```

Authors &amp; Sponsors
----------------------

[](#authors--sponsors)

- Ulrich Mathes -
- Simon Praetorius -
- [All contributors](https://github.com/sitegeist/fluid-components/graphs/contributors)

*The development and the public-releases of this package is generously sponsored by my employer .*

###  Health Score

49

—

FairBetter than 95% of packages

Maintenance76

Regular maintenance activity

Popularity34

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 61.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~360 days

Recently: every ~450 days

Total

6

Last Release

129d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/ca4eee1e54bccd482945cd03a170a3dfa0c4672c32d0a565dc1228a905a06c27?d=identicon)[s2b](/maintainers/s2b)

---

Top Contributors

[![s2b](https://avatars.githubusercontent.com/u/458524?v=4)](https://github.com/s2b "s2b (19 commits)")[![ulrichmathes](https://avatars.githubusercontent.com/u/26324456?v=4)](https://github.com/ulrichmathes "ulrichmathes (11 commits)")[![Atomschinken](https://avatars.githubusercontent.com/u/3041069?v=4)](https://github.com/Atomschinken "Atomschinken (1 commits)")

---

Tags

localizationtypo3typo3-extension

###  Code Quality

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/sitegeist-csv-labels/health.svg)

```
[![Health](https://phpackages.com/badges/sitegeist-csv-labels/health.svg)](https://phpackages.com/packages/sitegeist-csv-labels)
```

###  Alternatives

[web-vision/wv_deepltranslate

This extension provides option to translate content element, and TCA record texts to DeepL supported languages using DeepL API services with TYPO3 CMS

32283.1k](/packages/web-vision-wv-deepltranslate)[web-vision/deepltranslate-core

This extension provides option to translate content element, and TCA record texts to DeepL supported languages using DeepL API services with TYPO3 CMS

3289.7k2](/packages/web-vision-deepltranslate-core)[leuchtfeuer/locate

Locate - The users country, preferred language and other facts will be detected. Depending on configurable rules the user can be redirected to other languages or pages. Locate also provides geo blocking for configurable pages in configurable countries.

1182.8k](/packages/leuchtfeuer-locate)[undefined/translate-locallang

Backend Module for creating and editing of language files (locallang.xlf).

12256.9k2](/packages/undefined-translate-locallang)[georgringer/extbase-with-no-l10n-parent

Show records in extbase if those got a different language defined then -1 (all) or 0 (default) and no language parent

12103.4k](/packages/georgringer-extbase-with-no-l10n-parent)[evoweb/ew-llxml2xliff

Convert locallang.xml/.php files to .xlf

1045.7k1](/packages/evoweb-ew-llxml2xliff)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
