Coding Guidelines
More information is found in the Coding Guidelines section of the "TYPO3 Explained" manual (formerly known as "Core API").
This is just a very brief overview.
PHP
Make sure you are using the correct PHP code style. It is based on the TYPO3 Coding Standards, (which follows PER-CS1.0 / PSR-12 and transition into PER-CS2.0 at the time of this writing), and covered in the TYPO3 Coding Guidelines.
See PhpStorm setup: CGL for information on how to configure the correct coding style.
The Appendix contains information on scripts to check / fix coding guideline issues: CGL check and fix
Most PHP coding guidelines can be automatically applied with the command:
Build/Scripts/runTests.sh -s cgl
JavaScript
The following rules should be applied for JavaScript: Airbnb JavaScript Style Guide
TypeScript
The following rules should be applied for TypeScript: Excel Micro TypeScript Style Guide.
Xliff files
Language files are usually stored in a Folder Resources/Private/Language in files with the ending .xlf. Xliff files are indented using 2 spaces. The following command normalizes your XLIFF files:
Build/Scripts/runTests.sh -s normalizeXliff
Please also check Xliff / language files for Xliff-specific things to pay attention to.
XLIFF file naming
XLIFF files have historically been named with file names starting with
locallang_. Newly introduced XLIFF files should drop the locallang_
prefix and only be named according to their purpose, for example
clipboard. or db/. Newly introduced file
names should use snake_case.
TCA-related XLIFF files should either be called db. or be stored in a
folder named db, for example db/.
Label reference naming
Newly introduced label references should use snake case. Different parts of a label reference can be separated by dots, for example:
<trans-unit id="my_field.title">
<source>My title</source>
</trans-unit>
<trans-unit id="my_field.description">
<source>My description</source>
</trans-unit>
Existing labels should not be mass-changed to snake case, as each changed label must be retranslated into all languages.
Utilizing "translation domain syntax"
With Feature: #93334 - Translation Domain Mapping and Feature: #107759 - TranslateViewHelper supports translation domain syntax the label localization within Fluid template files and PHP code can be shortened:
<f:translate key="form.legend" domain="core.messages" />
<f:translate key="module.title" domain="core.module" />
$languageService->sL('backend.toolbar:save');
This syntax is preferred and should be utilized for any new code committed to TYPO3 v14+ because of these reasons:
- It is shorter, easier to read, has no odd
LLL:magic notationEXT: - Applies conventions of Symfony translation usage in other frameworks
- Allows better automatic extraction and analysis (CLI commands)
- Allows for better deprecations and usage analysis
Detailed reasons are found in the mentioned changelogs.