fienta/laravel-translatable-bootforms

为adamwathan/bootforms提供dimsav/laravel-translatable的功能。

1.6.1 2021-12-13 09:51 UTC

README

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

BootFormsLaravel Translatable完美协同工作!

通过导入此包,使用BootForms生成可翻译表单变得轻而易举。

安装

  1. 运行Composer require命令安装包

    composer require fienta/laravel-translatable-bootforms
  2. 在应用配置中,在$providers数组中添加Service Provider,在BootFormsServiceProviderTranslatableServiceProvider之后

    'providers' => [
        Galahad\BootForms\BootFormsServiceProvider::class,
        Astrotomic\Translatable\TranslatableServiceProvider::class,
        ...
        TypiCMS\LaravelTranslatableBootForms\TranslatableBootFormsServiceProvider::class,
    ],
  3. 在应用配置中,在$aliases数组中添加Facade

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

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

使用方法

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

如果您不确定如何使用BootForms,请查看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>

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