A PHP library for working with NACE (Nomenclature of Economic Activities) codes used by the European Union for classifying business activities.
- Complete NACE Rev. 2 code database
- Hierarchical structure support (Sections, Divisions, Groups, Codes)
- Multi-language translations (25 languages included)
- Framework-agnostic translation system with adapters for:
- Standalone PHP (zero dependencies)
- Symfony
- Laravel
- PHP 7.1 - 8.4 support
composer require xterr/php-nacecodesuse Xterr\NaceCodes\NaceCodesFactory;
$factory = new NaceCodesFactory();
// Get all NACE codes
$codes = $factory->getCodes();
// Find a specific code
$code = $codes->getByCodeAndVersion('6201', 2);
echo $code->getName(); // "Computer programming activities"
echo $code->getCode(); // "6201"
// Get sections, divisions, groups
$sections = $factory->getSections();
$section = $sections->getByCodeAndVersion('J', 2);
echo $section->getName(); // "INFORMATION AND COMMUNICATION"
$divisions = $factory->getDivisions();
$groups = $factory->getGroups();The library includes a zero-dependency translator for standalone usage:
use Xterr\NaceCodes\NaceCodesFactory;
use Xterr\NaceCodes\Translation\Adapter\ArrayTranslator;
// Create translator with German locale
$translator = new ArrayTranslator(null, 'de');
$factory = new NaceCodesFactory(null, $translator);
$sections = $factory->getSections();
$section = $sections->getByCodeAndVersion('A', 2);
echo $section->getName(); // "AGRICULTURE, FORESTRY AND FISHING" (original)
echo $section->getLocalName(); // "LAND- UND FORSTWIRTSCHAFT, FISCHEREI" (translated)
// Change locale at runtime
$translator->setLocale('fr');
// Get available locales
$locales = $translator->getAvailableLocales();
// ['bg', 'cs', 'da', 'de', 'el', 'es', 'et', 'fi', 'fr', 'hr', 'hu', 'it', 'lt', 'lv', 'mt', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sk', 'sl', 'sv', 'tr']use Xterr\NaceCodes\NaceCodesFactory;
use Xterr\NaceCodes\Translation\Adapter\SymfonyTranslatorAdapter;
use Symfony\Component\Translation\Translator;
// Your existing Symfony translator
$symfonyTranslator = new Translator('de');
// ... configure loaders and resources
$adapter = new SymfonyTranslatorAdapter($symfonyTranslator);
$factory = new NaceCodesFactory(null, $adapter);
$code = $factory->getCodes()->getByCodeAndVersion('0111', 2);
echo $code->getLocalName(); // German translationuse Xterr\NaceCodes\NaceCodesFactory;
use Xterr\NaceCodes\Translation\Adapter\LaravelTranslatorAdapter;
// In a Laravel application
$adapter = new LaravelTranslatorAdapter(app('translator'));
$factory = new NaceCodesFactory(null, $adapter);
$code = $factory->getCodes()->getByCodeAndVersion('0111', 2);
echo $code->getLocalName(); // Translated based on Laravel's localeThe library includes translations for 25 languages:
| Code | Language | Code | Language | Code | Language |
|---|---|---|---|---|---|
| bg | Bulgarian | hr | Croatian | pl | Polish |
| cs | Czech | hu | Hungarian | pt | Portuguese |
| da | Danish | it | Italian | ro | Romanian |
| de | German | lt | Lithuanian | ru | Russian |
| el | Greek | lv | Latvian | sk | Slovak |
| es | Spanish | mt | Maltese | sl | Slovenian |
| et | Estonian | nl | Dutch | sv | Swedish |
| fi | Finnish | no | Norwegian | tr | Turkish |
| fr | French |
$factory = new NaceCodesFactory(?string $baseDirectory = null, ?TranslatorInterface $translator = null);
$factory->getCodes(); // Returns NaceCodes
$factory->getSections(); // Returns NaceSections
$factory->getDivisions(); // Returns NaceDivisions
$factory->getGroups(); // Returns NaceGroups
$factory->getMappings(); // Returns NaceCodesMappingsAll entities (NaceCode, NaceSection, NaceDivision, NaceGroup) share these methods:
$entity->getCode(); // NACE code (e.g., "6201", "J", "62", "620")
$entity->getName(); // Original English name
$entity->getLocalName(); // Translated name (falls back to getName() if no translation)
$entity->getVersion(); // NACE version (e.g., 2 for Rev. 2)// Get by code and version
$codes->getByCodeAndVersion('6201', 2);
$sections->getByCodeAndVersion('J', 2);
$divisions->getByCodeAndVersion('62', 2);
$groups->getByCodeAndVersion('620', 2);
// Get all by version
$codes->getAllByVersion(2);
// Iteration
foreach ($codes as $code) {
echo $code->getName();
}
// Count
echo count($codes);use Xterr\NaceCodes\Translation\Adapter\ArrayTranslator;
$translator = new ArrayTranslator(
?TranslationLoaderInterface $loader = null, // Custom loader (optional)
?string $defaultLocale = 'en', // Default locale
?string $fallbackLocale = 'en', // Fallback when translation not found
?string $basePath = null // Custom translations path
);
$translator->setLocale('de');
$translator->getLocale(); // 'de'
$translator->setFallbackLocale('en');
$translator->getFallbackLocale(); // 'en'
$translator->getAvailableLocales(); // ['bg', 'cs', ...]composer install
./vendor/bin/phpunit- PHP 7.1 or higher
- ext-json
MIT License. See LICENSE for details.
Razvan Ceana - razvan@ceana.ro
Contributions are welcome! Please feel free to submit a Pull Request.