abenmada / sylius-translation-plugin
The plugin enhances the Lexik translation bundle by incorporating a channel-based translation feature and adapting the visual appearance to the back-office theme.
Installs: 13
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 1
Open Issues: 0
Type:sylius-plugin
Requires
- php: ^8.0
- lexik/translation-bundle: ^6.0
- sylius/sylius: ^1.12
Requires (Dev)
- behat/behat: ^3.6.1
- behat/mink-selenium2-driver: ^1.4
- dmore/behat-chrome-extension: ^1.3
- dmore/chrome-mink-driver: ^2.7
- friends-of-behat/mink: ^1.8
- friends-of-behat/mink-browserkit-driver: ^1.4
- friends-of-behat/mink-debug-extension: ^2.0.0
- friends-of-behat/mink-extension: ^2.4
- friends-of-behat/page-object-extension: ^0.3
- friends-of-behat/suite-settings-extension: ^1.0
- friends-of-behat/symfony-extension: ^2.1
- friends-of-behat/variadic-extension: ^1.3
- friendsofphp/php-cs-fixer: ^3.9
- phpspec/phpspec: ^7.2
- phpstan/extension-installer: ^1.0
- phpstan/phpstan: ^1.8.1
- phpstan/phpstan-doctrine: 1.3.40
- phpstan/phpstan-strict-rules: ^1.3.0
- phpstan/phpstan-webmozart-assert: ^1.2.0
- phpunit/phpunit: ^9.5
- polishsymfonycommunity/symfony-mocker-container: ^1.0
- sylius-labs/coding-standard: ^4.2
- symfony/browser-kit: ^5.4 || ^6.0
- symfony/debug-bundle: ^5.4 || ^6.0
- symfony/dotenv: ^5.4 || ^6.0
- symfony/flex: ^2.2.2
- symfony/intl: ^5.4 || ^6.0
- symfony/web-profiler-bundle: ^5.4 || ^6.0
- vimeo/psalm: 4.30.0
README
The plugin enhances the Lexik translation bundle by incorporating a channel-based translation feature and adapting the visual appearance to the back-office theme.
Details
The displayed locales depend on your channel's configuration. In this example, we have selected French and English.
That's why only these two languages are displayed for this channel.
You also have a preview page to visualize the number of missing translations for each locale.
Important
- The priority of the content to display is as follows: first, the channel-specific translation, then, if not provided, the global translation stored in your database, and finally, if none are available, the translation in your translation file.
- You can manage all translations for your channels on a single page. When you switch between channels, the locales defined for this channel will be displayed.
Installation
⚠️ Make sure you don't have ONLY_FULL_GROUP_BY enabled in your MySQL mode, otherwise remove it! To check the mode, execute the following SQL query: SELECT @@sql_mode
Require plugin with composer :
composer require abenmada/sylius-translation-plugin
Change your config/bundles.php
file to add the line for the plugin :
<?php return [ //.. Lexik\Bundle\TranslationBundle\LexikTranslationBundle::class => ['all' => true], Abenmada\TranslationPlugin\TranslationPlugin::class => ['all' => true], ]
Then create the config file in config/packages/abenmada_translation_plugin.yaml
:
imports: - { resource: "@TranslationPlugin/Resources/config/services.yaml" }
Then import the routes in config/routes/abenmada_translation_plugin.yaml
:
abenmada_translation_plugin_routing: resource: "@TranslationPlugin/Resources/config/routes.yaml" prefix: /%sylius_admin.path_name%/translations
Update the entity src/Entity/Channel/Channel.php
:
<?php declare(strict_types=1); namespace App\Entity\Channel; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; use Abenmada\TranslationPlugin\Model\Channel\ChannelTrait as AbenmadaTranslationChannelTrait; use Sylius\Component\Core\Model\Channel as BaseChannel; /** * @ORM\Entity * @ORM\Table(name="sylius_channel") */ class Channel extends BaseChannel { use AbenmadaTranslationChannelTrait; public function __construct() { $this->channelTranslations = new ArrayCollection(); parent::__construct(); } }
Run the migration :
bin/console doctrine:migration:migrate
Install the assets :
bin/console assets:install --ansi
import translations files content into your database :
bin/console lexik:translations:import
Managing locales
- The default supported locales are: English (en), French (fr), Arabic (ar), German (de), Spanish (es), Polish (pl), Portuguese (pt), and Italian (it).
- You can adjust your language settings through the provided configuration options :
lexik_translation: fallback_locale: [ '%locale%' ] # default locale(s) to use managed_locales: [ en, fr, ar, de, es, pl, pt, it ] # locale(s) that the bundle has to manage