baklysystems/laravel-translatable-bootforms

为adamwathan/bootforms集成dimsav/laravel-translatable的功能。

1.5 2021-03-08 13:11 UTC

README

Build Status Scrutinizer Code Quality Code Coverage Latest Stable Version Total Downloads License

使BootForms与Laravel Translatable无缝工作!

通过导入此包,使用BootForms生成可翻译表单变得非常简单。

安装

  1. 运行Composer require命令安装此包

    composer require propaganistas/laravel-translatable-bootforms
  2. 在您的应用程序配置中,将服务提供者在$providers数组中添加到BootFormsServiceProviderTranslatableServiceProvider之后

    'providers' => [
        AdamWathan\BootForms\BootFormsServiceProvider::class,
        Dimsav\Translatable\TranslatableServiceProvider::class,
        ...
        Propaganistas\LaravelTranslatableBootForms\TranslatableBootFormsServiceProvider::class,
    ],
  3. 在您的应用程序配置中,将外观添加到$aliases数组中

    'aliases' => [
        ...
        'TranslatableBootForm' => Propaganistas\LaravelTranslatableBootForms\Facades\TranslatableBootForm::class,
    ],
  4. 发布配置文件

    php artisan vendor:publish --provider="Propaganistas\LaravelTranslatableBootForms\TranslatableBootFormsServiceProvider" --tag="config"

用法

只需像使用BootForm一样使用TranslatableBootForm外观!就这样。现在将根据Translatable配置文件中设置的本地化生成多个表单输入。它们将为每种语言提供相应的值,并保存所有翻译,而无需任何代码操作。

如果您不确定如何使用它,请查看BootForms文档

示例

// 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());
}

您可以在指定参数时使用%name%locale占位符。占位符将被替换为相应的输入名称或本地化。这对于像Angular.js或Vue.js这样的双向数据绑定库很有用。例如。

{!! 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>

要仅对某些选择的本地化渲染表单元素,显式调用renderLocale()作为最后一个方法,并将本地化或本地化数组作为第一个参数传递

TranslatableBootForm::text('Name','name')
                    ->renderLocale('en')

如果您需要仅对某些本地化应用方法,则在方法后缀为ForLocale并传递本地化或本地化数组作为第一个参数

TranslatableBootForm::text('Name','name')
                    ->dataForLocale('en', 'attributeName', 'attributeValue')
                    ->addClassForLocale(['en', 'nl'], 'addedClass')

如果您需要构造除en[name]之外的其他名称属性,例如item.en.name,请手动在名称属性中插入%locale占位符。请注意,这些输入的模型绑定将中断

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>

有关自定义标签中的本地化指示符(以及其他几个设置),请参阅配置文件。