2015-03-23 2 views
0

Допустим, в моем lang/en/general.php есть несколько строк перевода, например:Проверить наличие в линии транс Laravel (в)

"token" => "This password reset token is invalid.", 

"sent" => "Password reminder sent!", 

"reset" => "Password has been reset!", 

Но в моих lang/de/general.php этих строк не хватает.

Так позже, когда я использую Lang::get('general.token') или просто trans('general.token')

Английская версия будет возвращать

Этот сброс пароля маркер недействителен.

И немецкий (де) версия будет возвращать

general.token

Есть ли способ, что я могу справиться с «перевод не найден» функции, как фильтр, но не создавая для него особый класс? Например, когда строка не имеет перевода, я хочу бросить исключение.

Заранее благодарен!

ответ

2

вы можете использовать Lang::has(), как показано ниже, здесь the doc

if (\Lang::has('general.token')) { 

    // line exists. 

} else { 

    // line not exist. 

} 
+0

Но как вы передаете массив, содержащий все переводы из общего файла? –

+0

может усовершенствовать комментарий? –

0

Вы можете создать свой собственный TranslationServiceProvider и переводчик и переопределить метод Get() в переводчике бросить исключение, когда родитель :: получить() возвращает строку перевода, которая равна передаваемому ключу, который был передан. Обе функции @lang() и trans() вызывают метод get() переводчика.

Кажется, что много неприятностей только для того, чтобы получить еще одну причину: «Снова что-то пошло не так!» на Вашем сайте. Вы получите только исключение, когда встретится перевод.

Другое решение: вы можете использовать пакет barryvdh/laravel-translation-manager, у него есть поставщик услуг перевода, который регистрирует отсутствующие ключи перевода и веб-интерфейс для управления переводами. Он будет записывать недостающие ключи перевода по языку и позволяет редактировать их через веб-интерфейс.

Он прост в установке и легко модифицируется. Таким образом, вы можете заменить журнал с помощью исключения исключений.

0

Вы можете написать помощник, подобный приведенному ниже, чтобы помочь с откатами:

/** 
* Makes translation fall back to specified value if definition does not exist 
* 
* @param string $key 
* @param null|string $fallback 
* @param null|string $locale 
* @param array|null $replace 
* 
* @return array|\Illuminate\Contracts\Translation\Translator|null|string 
*/ 
function trans_fb(string $key, ?string $fallback = null, ?string $locale = null, ?array $replace = []) 
{ 
    if (\Illuminate\Support\Facades\Lang::has($key, $locale)) { 
     return trans($key, $replace, $locale); 
    } 

    return $fallback; 
} 

Примечания: Помощник работает только на PHP 7.1 (которая имеет поддержку обнуляемых типов). Откорректируйте его до версии PHP, если он ниже 7.1.