braunstetter / translated-forms
翻译您的表单。简单易用。
Requires
- php: ^8.0
- knplabs/doctrine-behaviors: ^2
- symfony/form: ^6
- symfony/framework-bundle: ^5.3|^6.0
- symfony/property-access: ^6
- symfony/security-bundle: ^6.0
Requires (Dev)
- matthiasnoback/symfony-dependency-injection-test: ^4.2
- nyholm/symfony-bundle-test: 1.8.1
- symfony/browser-kit: ^6.0
- symfony/serializer-pack: ^1.1
- symfony/test-pack: ^1.0
- symfony/twig-bundle: ^5.3|^6.0
README
此包为您提供了Symfony表单的translated
选项。因此,当您切换语言时,表单会自动翻译并正常工作。
假设您正在使用KNP Doctrine Behaviours进行翻译。
安装
composer require braunstetter/translated-forms
用法
安装完成后,此包允许您在表单参数数组中设置一个选项
public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'translated' => true ]); }
当设置为true时,表单将响应对象中当前的区域设置。
重要的是要使用代理翻译以允许此包通过魔法方法读取数据。
为什么您应该使用此包?
有流行的a2lix/translation-form-bundle。它正在积极维护,如果您喜欢它,您可以继续使用它。
但是,要使用a2lix/translation-form-bundle
,需要一些CSS和JavaScript。此外,它还附带了一个专门的FormType。因此,您必须将每个字段包裹在这个FormType中。它为每个翻译字段提供可点击的标签,当您只想翻译整个表单时,这并不太方便。
braunstetter/translated-forms
将直接与您的所有Symfony表单一起工作。无需额外的CSS、JavaScript或额外的FormType来实现。您的表单保持不变。只需切换语言,甚至嵌套表单也会被翻译。
自定义特性
Knp Doctrine Behaviours为您可翻译的实体和翻译带来了特性。
默认情况下,它假定您将翻译实体放在与可翻译实体相同的文件夹中。当翻译大量内容时,这会变得相当混乱。
因此,braunstetter/translated-forms
包提供了两个特性。 TranslatableTrait和TranslationTrait。
它们与默认的Knp特性工作方式相同(实际上,它们在底层使用它),但它们将翻译放入一个Translation
文件夹中,并实现了必需的魔法__call
方法,以使此包能够翻译您的表单。
这个魔法是如何发生的?
读取数据(mapDataToForms)
如果启用,此包将设置一个新的数据映射器到您的表单。
默认的Symfony表单组件的数据映射器不与魔法属性一起工作 - 此包的数据映射器则可以。
写入数据(mapFormsToData)
当表单的数据将要保存时,此数据映射器将尝试以正常方式保存它。
如果基本实体的字段不能直接写入,它将选择当前翻译并将其写入其中。