cloud-castle / barcode
Генерация штрихкодов для PHP 8.1+ без внешних зависимостей и расширений: 76 типов символогий — линейные, товарные GS1, почтовые, российские (Честный ЗНАК, ЕГАИС, ШПИ Почты России) и двумерные (DataMatrix, PDF417, Aztec, Han Xin); шесть форматов вывода: SVG, PNG без ext-gd, EPS, HTML, текст и JSON. В
Requires
- php: >=8.1
Requires (Dev)
- deptrac/deptrac: ^3.0 || ^4.0
- ergebnis/composer-normalize: ^2.45
- friendsofphp/php-cs-fixer: ^3.75
- icanhazstring/composer-unused: ^0.9
- infection/infection: ^0.29 || ^0.33
- php-parallel-lint/php-parallel-lint: ^1.4
- phpmd/phpmd: ^2.15
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^1.12 || ^2.1
- phpstan/phpstan-deprecation-rules: ^1.2 || ^2.0
- phpstan/phpstan-phpunit: ^1.4 || ^2.0
- phpstan/phpstan-strict-rules: ^1.6 || ^2.0
- phpunit/phpunit: ^10.5 || ^11.5
- picqer/php-barcode-generator: ^2.3
- psalm/plugin-phpunit: ^0.19 || ^0.20
- rector/rector: ^1.2 || ^2.0
- roave/security-advisories: dev-latest
- squizlabs/php_codesniffer: ^3.12 || ^4.0
- vimeo/psalm: ^6.0
- webmozart/assert: ^1.11
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-16 08:51:55 UTC
README
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
CloudCastle Barcode
Генерация штриховых кодов на чистом PHP 8.1+ без единой внешней зависимости и без расширений: 76 типов символогий — линейные, товарные GS1, почтовые, российские (Честный ЗНАК, ЕГАИС, ШПИ Почты России) и двумерные (DataMatrix, PDF417, Aztec, Han Xin) — и шесть форматов вывода (SVG, PNG, EPS, HTML, текст, JSON). Вывод выверен байт-в-байт против эталонных реализаций и прочитан независимыми декодерами.
Установка
composer require cloud-castle/barcode
Требуется PHP 8.1+. Расширения не нужны: PNG собирается собственным
кодировщиком, поэтому ext-gd и ext-imagick не требуются.
Быстрый старт
<?php
use CloudCastle\Barcode\BarcodeGenerator;
use CloudCastle\Barcode\Enum\BarcodeType;
use CloudCastle\Barcode\Renderer\SvgRenderer;
$generator = new BarcodeGenerator();
// Линейный код: EAN-13 для товарной позиции.
$barcode = $generator->generate('4601234567893', BarcodeType::EAN13);
$svg = (new SvgRenderer())->render($barcode);
// Двумерный код: Aztec для билета или посадочного талона.
$ticket = $generator->generate('M1IVANOV/IVAN E1A2B3C SVOLED SU 1234 250Y', BarcodeType::AZTEC);
Симвология выбирается перечислением {@see BarcodeType}, формат вывода — рендерером. Кодировщик и рендерер не знают друг о друге: между ними стоит неизменяемая матрица модулей, поэтому любой код выводится в любой формат.
Возможности
Линейные символогии
| Семейство | Типы | Назначение |
|---|---|---|
| Code 128 | CODE128, CODE128_A, CODE128_B, CODE128_C | Логистика, GS1-128; автоматический выбор набора |
| Code 39 | CODE39, CODE39_CHECKSUM, CODE39_EXTENDED, CODE39_EXTENDED_CHECKSUM | Промышленность, оборонные стандарты |
| Code 32 | CODE32 | Итальянский фармакод |
| Code 93 | CODE93 | Уплотнённая замена Code 39 |
| Code 16K | CODE16K | Тот же набор знаков, что у Code 128, сложенный в строки |
| Code 49 | CODE49 | Два знака данных в одном знаке символа: 49 знаков в восьми строках |
| Interleaved 2 of 5 | ITF, ITF_CHECKSUM, ITF14 | Транспортная упаковка, GTIN-14 |
| 2 of 5 | STANDARD25, STANDARD25_CHECKSUM, IATA25, MATRIX25, DATALOGIC25 | Авиабагаж, складские системы |
| Codabar | CODABAR | Библиотеки, банки крови |
| MSI Plessey | MSI, MSI_CHECKSUM | Складские стеллажи |
| Plessey | PLESSEY | Британская торговля, исторические системы |
| Code 11 | CODE11 | Маркировка телекоммуникаций |
| Pharmacode | PHARMACODE, PHARMACODE_TWO_TRACK | Фармацевтическая упаковка |
| Аптечные и оборонные | PZN, LOGMARS | Немецкий аптечный номер, стандарт МО США |
| Deutsche Post | IDENTCODE, LEITCODE | Почта Германии |
| Telepen | TELEPEN, TELEPEN_NUMERIC | Библиотеки Великобритании |
| EAN / UPC | EAN13, EAN8, EAN2, EAN5, UPCA, UPCE | Розничная торговля и дополнения |
| HIBC | HIBC_CODE39, HIBC_CODE128, HIBC_DATAMATRIX, HIBC_AZTEC | Медицинские изделия по HIBC LIC |
Товарные символогии GS1
| Семейство | Типы | Назначение |
|---|---|---|
| GS1-128 | GS1_128, SSCC18, GS1_114 | Элементы GS1 с идентификаторами применения, ключи упаковки и товара |
| GS1 DataBar | GS1_DATABAR, GS1_DATABAR_TRUNCATED | GTIN-14 вдвое уже EAN-13 |
| GS1 DataBar составной | GS1_DATABAR_STACKED, GS1_DATABAR_STACKED_OMNI | Тот же номер в две строки, когда не хватает ширины |
| GS1 DataBar Limited | GS1_DATABAR_LIMITED | 79 модулей для мелкой штучной продукции |
| GS1 DataBar Expanded | GS1_DATABAR_EXPANDED, GS1_DATABAR_EXPANDED_STACKED | Вес, дата, цена и партия рядом с номером |
Почтовые символогии
| Семейство | Типы | Назначение |
|---|---|---|
| POSTNET / PLANET | POSTNET, PLANET | Почта США |
| Royal Mail / KIX | RMS4CC, KIX | Почта Великобритании и Нидерландов |
| Royal Mail Mailmark | MAILMARK | Отслеживание отправлений: индекс, цепь поставок и номер |
| Intelligent Mail | IMB, IMB_STATES | USPS OneCode: расчёт по номеру и печать по готовым штрихам |
| Japan Post | JAPAN_POST | Почта Японии, адрес каной и цифрами |
| Australia Post | AUSTRALIA_POST, AUSTRALIA_POST_NUMERIC | Почта Австралии, четыре положения штриха |
Российские символогии
| Семейство | Типы | Назначение |
|---|---|---|
| Честный ЗНАК | CHESTNY_ZNAK | Средство идентификации ГИС МТ: DataMatrix с разметкой GS1 |
| ЕГАИС | EGAIS | Федеральная специальная и акцизная марка: PDF417 на 68 или 150 знаков |
| Почта России | RUSSIAN_POST | Штриховой почтовый идентификатор внутреннего отправления |
| ВПС S10 | UPU_S10 | Идентификатор международного отправления вида RA123456785RU |
Двумерные символогии
| Семейство | Типы | Назначение |
|---|---|---|
| DataMatrix ECC 200 | DATAMATRIX | Маркировка деталей и лекарств; все схемы кодирования |
| DataMatrix прямоугольный | DATAMATRIX_RECTANGULAR, DATAMATRIX_DMRE | Торец детали, кабель, край платы: 24 вытянутых размера |
| PDF417 | PDF417, PDF417_COMPACT | Документы и удостоверения; уровни коррекции 0–8 |
| Aztec | AZTEC, AZTEC_FULL, AZTEC_RUNE | Транспортные билеты; не нуждается в тихой зоне |
| Han Xin Code | HANXIN | Иероглифы напрямую: 84 размера, четыре уровня коррекции |
Форматы вывода
| Рендерер | Формат | Когда применять |
|---|---|---|
SvgRenderer | SVG | Веб-страницы, печать любого размера |
PngRenderer | PNG | Растр без ext-gd: собственный кодировщик |
EpsRenderer | EPS | Типографская печать, вёрстка |
HtmlRenderer | HTML | Письма и страницы без внешних файлов |
TextRenderer | текст | Отладка, терминал |
JsonRenderer | JSON | Передача матрицы модулей в другую систему |
Сравнение с аналогами
Функциональность
| Показатель | cloud-castle/barcode | tc-lib-barcode | TCPDF | picqer | milon/barcode | chillerlan/php-qrcode | endroid/qr-code | bacon-qr-code | 🏆 Победитель |
|---|---|---|---|---|---|---|---|---|---|
| Символогий | 76 | 69 | 43 | 34 | 41 | 1 | 1 | 1 | cloud-castle/barcode |
| Двумерных | 13 | 13 | 3 | 0 | 3 | 1 | 1 | 1 | cloud-castle/barcode, tc-lib-barcode |
| Форматов вывода | 6 | 6 | 4 | 5 | 4 | 6 | 3 | 3 | ничья |
| Зависимостей | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | ничья |
| Расширений PHP | нет | ctype, gd, pcre | curl | нет | gd | mbstring | нет | iconv | ничья |
Двумерных символогий у tc-lib больше за счёт семейства QR: оно вынесено в отдельный пакет cloud-castle/qr-code, чтобы проектам, которым нужны только штрихкоды, не тянуть код QR, и наоборот. Вместе два пакета покрывают больше символогий, чем любой аналог.
Производительность — мс на символ, меньше — лучше
| Показатель | cloud-castle/barcode | tc-lib-barcode | TCPDF | picqer | milon/barcode | chillerlan/php-qrcode | endroid/qr-code | bacon-qr-code | 🏆 Победитель |
|---|---|---|---|---|---|---|---|---|---|
| EAN-13 | 0.0194 | 0.0544 | 0.0419 | 0.0594 | — | — | — | — | cloud-castle/barcode |
| Code 128 | 0.0487 | 0.07 | 0.0679 | 0.0957 | — | — | — | — | cloud-castle/barcode |
| Code 39 | 0.0591 | 0.0914 | 0.0993 | 0.1463 | — | — | — | — | cloud-castle/barcode |
| ITF-14 | 0.0355 | 2.1976 | 0.0544 | 0.076 | — | — | — | — | cloud-castle/barcode |
| Codabar | 0.0236 | 0.0396 | 0.0319 | 0.0495 | — | — | — | — | cloud-castle/barcode |
| POSTNET | 0.0351 | 0.1357 | 0.0545 | 0.0877 | — | — | — | — | cloud-castle/barcode |
| DataMatrix | 0.4216 | 1.1769 | 0.5608 | — | — | — | — | — | cloud-castle/barcode |
| PDF417 | 0.6605 | 2.3481 | 1.3571 | — | — | — | — | — | cloud-castle/barcode |
| Aztec | 0.2125 | 0.5103 | — | — | — | — | — | — | cloud-castle/barcode |
| Han Xin | 1.1972 | 2.5707 | — | — | — | — | — | — | cloud-castle/barcode |
| Честный ЗНАК | 0.3916 | — | — | — | — | — | — | — | cloud-castle/barcode |
| QR Code | — | 3.0681 | 1.2351 | — | — | 2.7484 | 5.2228 | 5.7484 | TCPDF |
Потребление памяти — КБ на символ, меньше — лучше
| Показатель | cloud-castle/barcode | tc-lib-barcode | TCPDF | picqer | milon/barcode | chillerlan/php-qrcode | endroid/qr-code | bacon-qr-code | 🏆 Победитель |
|---|---|---|---|---|---|---|---|---|---|
| EAN-13 | 12.01 | 21.25 | 25.33 | 10.05 | — | — | — | — | picqer |
| Code 128 | 25.66 | 43.42 | 48.02 | 18.32 | — | — | — | — | picqer |
| Code 39 | 41.23 | 58.63 | 72.89 | 34.99 | — | — | — | — | picqer |
| ITF-14 | 15.28 | 1918.31 | 34.35 | 13.92 | — | — | — | — | picqer |
| Codabar | 11.59 | 19.81 | 24.23 | 9.62 | — | — | — | — | picqer |
| POSTNET | 26.08 | 68.66 | 24.52 | 18.12 | — | — | — | — | picqer |
| DataMatrix | 31.74 | 161.56 | 51.16 | — | — | — | — | — | cloud-castle/barcode |
| PDF417 | 207.4 | 738.7 | 183.09 | — | — | — | — | — | TCPDF |
| Aztec | 52.84 | 102.5 | — | — | — | — | — | — | cloud-castle/barcode |
| Han Xin | 201.88 | 210.66 | — | — | — | — | — | — | cloud-castle/barcode |
| Честный ЗНАК | 31.74 | — | — | — | — | — | — | — | cloud-castle/barcode |
| QR Code | — | 171.94 | 60.74 | — | — | 169.97 | 33.06 | 205.65 | endroid/qr-code |
Памяти на линейный символ уходит чуть больше, чем у picqer: между кодировщиком и рендерером стоит полная матрица модулей, а не список штрихов. Это плата за то, что любая симвология выводится любым рендерером без переделки; на двумерных символах, где матрица нужна всем, пакет расходует памяти меньше всех.
Утечки памяти — КБ прироста, меньше — лучше
| Показатель | cloud-castle/barcode | tc-lib-barcode | TCPDF | picqer | milon/barcode | chillerlan/php-qrcode | endroid/qr-code | bacon-qr-code | 🏆 Победитель |
|---|---|---|---|---|---|---|---|---|---|
| EAN-13 | 0 | 0 | 0 | 0 | — | — | — | — | ничья |
| Code 128 | 0 | 0 | 0 | 0 | — | — | — | — | ничья |
| Code 39 | 0 | 0 | 0 | 0 | — | — | — | — | ничья |
| ITF-14 | 0 | 0 | 0 | 0 | — | — | — | — | ничья |
| Codabar | 0 | 0 | 0 | 0 | — | — | — | — | ничья |
| POSTNET | 0 | 0 | 0 | 0 | — | — | — | — | ничья |
| DataMatrix | 0 | 0 | 0 | — | — | — | — | — | ничья |
| PDF417 | 0 | 0 | 0 | — | — | — | — | — | ничья |
| Aztec | 0 | 0 | — | — | — | — | — | — | cloud-castle/barcode, tc-lib-barcode |
| Han Xin | 0 | 0 | — | — | — | — | — | — | cloud-castle/barcode, tc-lib-barcode |
| Честный ЗНАК | 0 | — | — | — | — | — | — | — | cloud-castle/barcode |
| QR Code | — | 0 | 0 | — | — | 0 | 0 | 0 | ничья |
Ни один участник не удерживает память между сборками: за две тысячи символов занятая память не выросла ни у кого. Утечек нет ни у одного пакета — это ничья.
Синтаксис (php -l) — меньше — лучше
| Показатель | cloud-castle/barcode | tc-lib-barcode | TCPDF | picqer | milon/barcode | chillerlan/php-qrcode | endroid/qr-code | bacon-qr-code | 🏆 Победитель |
|---|---|---|---|---|---|---|---|---|---|
| Файлов с ошибкой разбора | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ничья |
Строгая типизация (PHPStan 5) — меньше — лучше
| Показатель | cloud-castle/barcode | tc-lib-barcode | TCPDF | picqer | milon/barcode | chillerlan/php-qrcode | endroid/qr-code | bacon-qr-code | 🏆 Победитель |
|---|---|---|---|---|---|---|---|---|---|
| Замечаний PHPStan 5 на 1000 строк | 0 | 3.5 | 56.96 | 15.79 | 57.39 | 13.79 | 16.29 | 4.71 | cloud-castle/barcode |
Стиль (PSR-12) — меньше — лучше
| Показатель | cloud-castle/barcode | tc-lib-barcode | TCPDF | picqer | milon/barcode | chillerlan/php-qrcode | endroid/qr-code | bacon-qr-code | 🏆 Победитель |
|---|---|---|---|---|---|---|---|---|---|
| Замечаний PSR-12 на 1000 строк | 0 | 3.74 | 1186.42 | 23.58 | 397.14 | 940.44 | 69.6 | 67.4 | cloud-castle/barcode |
Запахи кода (PHPMD) — меньше — лучше
| Показатель | cloud-castle/barcode | tc-lib-barcode | TCPDF | picqer | milon/barcode | chillerlan/php-qrcode | endroid/qr-code | bacon-qr-code | 🏆 Победитель |
|---|---|---|---|---|---|---|---|---|---|
| Замечаний PHPMD на 1000 строк | 3.29 | 4.6 | 47.6 | 29.47 | 71.15 | 26.78 | 30.73 | 42.68 | cloud-castle/barcode |
| Из них не на именованные конструкторы и флаги | 0.35 | 3.66 | 47 | 27.58 | 68.91 | 23.06 | 25.55 | 31.47 | cloud-castle/barcode |
Вторая строка — без правил StaticAccess на именованных конструкторах и BooleanArgumentFlag на переключателях отрисовки: оба приёма выбраны намеренно и описаны в phpmd.xml.
Мутационное тестирование / Покрытие тестами
| Показатель | cloud-castle/barcode | tc-lib-barcode | TCPDF | picqer | milon/barcode | chillerlan/php-qrcode | endroid/qr-code | bacon-qr-code | 🏆 Победитель |
|---|---|---|---|---|---|---|---|---|---|
| Покрытие строк, % | 100 | — | — | — | — | — | — | — | cloud-castle/barcode |
| Убито мутантов, % | 99.98 | — | — | — | — | — | — | — | cloud-castle/barcode |
Мутационное тестирование и покрытие замерены только для этого пакета: наборы тестов аналогов в поставку composer не входят, а без них эти числа не получить. Прочерк в строке означает «не замерялось», а не «плохо».
Качество кода
| Показатель | cloud-castle/barcode | tc-lib-barcode | TCPDF | picqer | milon/barcode | chillerlan/php-qrcode | endroid/qr-code | bacon-qr-code | 🏆 Победитель |
|---|---|---|---|---|---|---|---|---|---|
| Замечаний PHPStan 5 на 1000 строк | 0 | 3.5 | 56.96 | 15.79 | 57.39 | 13.79 | 16.29 | 4.71 | cloud-castle/barcode |
| Файлов со строгой типизацией, % | 100 | 100 | 0 | 0 | 0 | 0 | 100 | 2 | ничья |
| Подавлений анализа | 0 | 17 | 0 | 0 | 0 | 65 | 0 | 0 | ничья |
Безопасность
| Показатель | cloud-castle/barcode | tc-lib-barcode | TCPDF | picqer | milon/barcode | chillerlan/php-qrcode | endroid/qr-code | bacon-qr-code | 🏆 Победитель |
|---|---|---|---|---|---|---|---|---|---|
| Зависимостей | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | ничья |
| Расширений PHP | 0 | 3 | 1 | 0 | 1 | 1 | 0 | 1 | ничья |
| Подавлений анализа | 0 | 17 | 0 | 0 | 0 | 65 | 0 | 0 | ничья |
Замерено: 2026-09-15, PHP 8.4.25.
Честно о пакете
Сильные стороны
- Самый широкий набор символогий среди PHP-пакетов без расширений. 76 типов: линейные, всё семейство товарных кодов GS1, почтовые стандарты пяти стран, составные символогии и четыре двумерные покрываются одной библиотекой; отдельно ставить пакет ради DataMatrix, Aztec, GS1 DataBar или Han Xin не нужно.
- Ноль зависимостей и ноль расширений. Единственное требование — PHP 8.1+.
PNG кодируется собственным упаковщиком, поэтому библиотека работает там, где
ext-gdнедоступно. - Вывод проверен, а не заявлен. Каждая симвология сверена байт-в-байт с эталонной реализацией и прочитана независимым декодером; для двумерных кодов проверка идёт и по предельным объёмам стандарта.
- Строгая типизация и полный статический анализ. PHPStan уровня max, Psalm первого уровня, PHPMD, PHPCS, Deptrac и Rector проходят без исключений и подавлений.
- Российские символогии из коробки. Средство идентификации «Честный ЗНАК» с разметкой GS1, марка ЕГАИС, почтовые идентификаторы Почты России и ВПС — ни один из сравниваемых пакетов их не умеет.
- Самый быстрый вывод среди сравниваемых пакетов. На каждой символогии,
которую умеют аналоги, готовая разметка собирается быстрее — от полутора до
четырёх раз; числа в таблицах выше сняты стендом
benchmarks/.
Слабые стороны
- Два мутанта в раскладке DataMatrix неустранимы. Сдвиг предела цикла обхода на единицу не виден по выводу ни на одном из сорока восьми допустимых размеров символа: лишний шаг диагонали уходит за область данных и знаков там не ставит. Убить их можно, только заменив ход алгоритма ИСО/МЭК 16022 на арифметику, которую труднее сверить со стандартом; мутационный счёт пакета — 99,98 %.
- Пакет моложе и менее распространён, чем аналоги. У picqer и tc-lib годы эксплуатации и тысячи установок; здесь этого пока нет, и в проекте, где важна многолетняя история, это стоит учитывать.
- Чтение штрихкодов не поддерживается. Библиотека только кодирует; для распознавания понадобится отдельное решение.
- QR-кодов здесь нет намеренно. Они вынесены в отдельный пакет
cloud-castle/qr-code, чтобы не тянуть лишний код в проекты, которым нужны только штрихкоды. - Памяти на линейный символ уходит больше, чем у picqer. Между кодировщиком и рендерером стоит полная матрица модулей, а не список штрихов: это плата за то, что любая симвология выводится любым рендерером без переделки. На двумерных символах, где матрица нужна всем, пакет расходует памяти меньше всех.
Где применять
| Сфера | Что брать | Почему |
|---|---|---|
| Розница и касса | EAN13, EAN8, UPCA, UPCE | Стандарт товарной нумерации; дополнения EAN2/EAN5 для периодики |
| Склад и логистика | CODE128, ITF14, GS1_128, SSCC18 | Высокая плотность, устойчивое чтение с поддонов |
| Розница на малой упаковке | GS1_DATABAR, GS1_DATABAR_LIMITED | GTIN-14 вдвое уже EAN-13 |
| Весовой и скоропортящийся товар | GS1_DATABAR_EXPANDED | Вес, дата и цена в одном символе с номером |
| Медицинские изделия | HIBC_CODE128, HIBC_DATAMATRIX | Маркировка по HIBC LIC |
| Фармацевтика | DATAMATRIX, CODE32, PHARMACODE | Маркировка требует двумерного кода на малой площади |
| Производство и детали | DATAMATRIX | Читается с гравировки, выдерживает повреждение до 30 % |
| Документы и удостоверения | PDF417 | Вмещает до 1108 байт, восстанавливается при порче полосы |
| Транспортные билеты | AZTEC | Не нуждается в тихой зоне, читается с экрана телефона |
| Маркировка на китайском | HANXIN | Иероглифы пишутся напрямую, вдвое короче UTF-8 |
| Маркировка товаров в России | CHESTNY_ZNAK | Средство идентификации ГИС МТ: DataMatrix с разметкой GS1 |
| Алкогольная продукция | EGAIS | Федеральная специальная и акцизная марка |
| Отправления Почты России | RUSSIAN_POST, UPU_S10 | Внутренний и международный идентификаторы |
| Почтовые отправления | IMB, RMS4CC, KIX, POSTNET | Национальные почтовые стандарты |
| Библиотеки и архивы | CODABAR, TELEPEN | Исторически принятые в отрасли символогии |
Когда пакет не нужен. Если требуется только QR-код — возьмите
cloud-castle/qr-code. Если нужно распознавание с фотографии — нужна библиотека
компьютерного зрения, эта задача сюда не входит.
Разработка
composer install
composer check # линтеры + статический анализ + тесты
composer fix # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci # полный CI-пайплайн локально
Полный список команд с описаниями: composer run-script --list.
Документация
- Репозиторий: https://gitverse.ru/cloud-castle/barcode
- История изменений: CHANGELOG.md
- Как внести вклад: CONTRIBUTING.md
- Кодекс поведения: CODE_OF_CONDUCT.md
- Политика безопасности: SECURITY.md
Лицензия
MIT © CloudCastle (alex-4-17@yandex.ru)
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano