baklysystems / laravel-translatable-bootforms
Empowers adamwathan/bootforms with dimsav/laravel-translatable.
Requires
- php: >=5.5.9
- adamwathan/bootforms: ^0.8 || ^0.9
- adamwathan/form: >=0.8.0 <0.8.13 || ^0.9
- dimsav/laravel-translatable: >=5.0,<9.0
- illuminate/support: >=5.0
Requires (Dev)
- orchestra/testbench: ^3.0
- phpunit/phpunit: ^4.0|^5.0
This package is auto-updated.
Last update: 2024-12-08 21:01:27 UTC
README
Make BootForms work flawlessly with Laravel Translatable!
By importing this package, generating translatable forms using BootForms is a breeze.
Installation
-
Run the Composer require command to install the package
composer require propaganistas/laravel-translatable-bootforms
-
In your app config, add the Service Provider in the
$providers
array afterBootFormsServiceProvider
andTranslatableServiceProvider
'providers' => [ AdamWathan\BootForms\BootFormsServiceProvider::class, Dimsav\Translatable\TranslatableServiceProvider::class, ... Propaganistas\LaravelTranslatableBootForms\TranslatableBootFormsServiceProvider::class, ],
-
In your app config, add the Facade to the
$aliases
array'aliases' => [ ... 'TranslatableBootForm' => Propaganistas\LaravelTranslatableBootForms\Facades\TranslatableBootForm::class, ],
-
Publish the configuration file
php artisan vendor:publish --provider="Propaganistas\LaravelTranslatableBootForms\TranslatableBootFormsServiceProvider" --tag="config"
Usage
Simply use the TranslatableBootForm
Facade as if it were BootForm
! That's it. Multiple form inputs will now be generated for the locales set in Translatable's configuration file. They will have the corresponding value for each language and will save all of the translations without any code manipulation.
Please review BootForms' documentation if you're unsure how to use it.
Example:
// View {!! BootForm::text('Name', 'name') ->placeholder('My placeholder') !!} // Output <div class="form-group"> <label for="name">Name</label> <input type="text" name="name" class="form-control" placeholder="My Placeholder" /> </div> // Controller public function postEdit($request) { $someModel->save($request->all()); }
// View {!! TranslatableBootForm::text('Name', 'name') ->placeholder('My placeholder') !!} // Output <div class="form-group form-group-translation"> <label for="en[name]">Name (en)</label> <input type="text" name="en[name]" class="form-control" placeholder="My Placeholder" data-language="en" /> </div> <div class="form-group form-group-translation"> <label for="nl[name]">Name (nl)</label> <input type="text" name="nl[name]" class="form-control" placeholder="My Placeholder" data-language="nl" /> </div> // Controller public function postEdit($request) { $someModel->save($request->all()); }
You can use the %name
and %locale
placeholders while specifying parameters. The placeholder will be replaced with the corresponding input name or locale.
This can be useful for two-way data binding libraries such as Angular.js or Vue.js. E.g.
{!! TranslatableBootForm::text('Title', 'title') ->attribute('some-attribute', 'Name: %name') ->attribute('another-attribute', 'Locale: %locale') !!} // Output <div class="form-group form-group-translation"> <label for="en[title]">Title (en)</label> <input type="text" name="en[title]" class="form-control" some-attribute="Name: en[title]" another-attribute="Locale: en" data-language="en" /> </div> <div class="form-group form-group-translation"> <label for="nl[title]">Title (nl)</label> <input type="text" name="nl[title]" class="form-control" some-attribute="Name: nl[title]" another-attribute="Locale: nl" data-language="nl" /> </div>
To render a form element only for some chosen locales, explicitly call renderLocale()
as the final method and pass the locale or an array of locales as the first parameter:
TranslatableBootForm::text('Name','name') ->renderLocale('en')
If you need to apply a method only for certain locales, suffix the method with ForLocale
and pass the locale or an array of locales as the first parameter:
TranslatableBootForm::text('Name','name') ->dataForLocale('en', 'attributeName', 'attributeValue') ->addClassForLocale(['en', 'nl'], 'addedClass')
In case you need to construct name attributes other than en[name]
, e.g. item.en.name
, manually insert the %locale
placeholder in your name attribute. Note that model binding will break for these inputs.
TranslatableBootForm::text('Name','item.%locale.name') // Output <div class="form-group form-group-translation"> <label for="item.en.name">Name (en)</label> <input type="text" name="item.en.name" class="form-control" data-language="en" /> </div>
For customizing the locale indicator in the label (and several other settings), please take a look at the configuration file.