簡體   English   中英

在Laravel Translatable BootForms中配置lang

[英]Configure langs in Laravel Translatable BootForms

我是Laravel Translatable BootForms的新手 ,我在想什么。

當我使用此代碼時:

{!!
    TranslatableBootForm::text('Nom', 'name')
        ->required()
!!}

渲染如下:

我不記得已配置的語言列表

我不知道該語言列表的來源。

我只想列出數據庫中指定的某些語言,就像使用此解決方法一樣:

@foreach($availableLangs as $availableLang)
    {!!
        TranslatableBootForm::text('Nom', 'name')
        ->renderLocale($availableLang['locale'])
    !!}
@endforeach

這給了我這個:

預期的渲染

我的兩個問題是:

  • 該語言列表從何而來?
  • 如何用自己的語言列表替換它?

回答第一個問題可能會自動回答第二個問題)

在Laravel中,您應該始終嘗試閱讀服務提供商,它們提供了有關項目結構的重要線索。 讓我們嘗試遵循函數調用的軌跡:

TranslatableBootForm是一個外觀,它根據以下translatable-bootform從服務容器解析為translatable-bootform實例:

protected static function getFacadeAccessor() { return 'translatable-bootform'; }

現在,在文件TranslatableBootFormsServiceProvider.php我們可以看到translatable-bootformTranslatableBootForm一個實例。 因此,當您調用TranslatableBootForm::text ,將使用Facade解析為TranslatableBootForm的實例。

打開TranslatableBootForm類,我們找不到text方法,因此應該有一個__call方法。 __call方法始終返回從render方法返回的內容。 這就是行動發生的地方。

在這里閱讀代碼,您會發現它是從名為locales的方法獲取語言locales ,並將其與func_get_args()函數相交以獲取傳遞給它的任何語言。 因此renderLocale或簡單地render會做同樣的事情。

方法locales僅返回一個數組,該數組在類中默認為空。 如果我們回到TranslatableBootFormsServiceProvider我們將看到一條重要的線:

$formBuilder->setLocales($this->getLocales());

它從Translatable\\TranslatableWrapper獲取語​​言環境,而該語言只是另一個文件中該文件的包裝器: https : //github.com/dimsav/laravel-translatable/blob/master/src/Translatable/Translatable.php

查看laravel-translatable軟件包中的配置文件,我們可以看到以下語言: https : //github.com/dimsav/laravel-translatable/blob/master/src/config/translatable.php

解決方案

現在,您只需在config文件夾中復制文件translatable.php並設置區域設置即可。

或者,您創建一個新的服務提供程序MyTranslatableBootFormsServiceProvider

class MyTranslatableBootFormsServiceProvider extends TranslatableBootFormsServiceProvider 
{

    /**
     * Get Translatable's locales.
     * 
     * @return array
     */
    protected function getLocales()
    {
        // You can return a config key
        // return config('yourconfig.locales');
        // Or directly the array containing the languages
        return ['en', 'fr', 'nl'];

    }
}

然后,您將在config/app.php使用此提供程序,而不是原始的TranslatableBootFormsServiceProvider

免責聲明:我沒有嘗試使用代碼,您可能會遇到一個錯誤,但是現在您有了想法,可以找到如何使用Laravel軟件包的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM