Замена результата перевода в Laravel 5.7 как раз? - PullRequest
0 голосов
/ 16 ноября 2018

Попытка увидеть, как можно программно заменить строку перевода в контролируемой ситуации.

например. i18n по умолчанию имеет

[
    "button": "xxx"
]

Итак, когда мы запускаем trans('button'), мы возвращаемся xxx

Однако мы находимся в ситуации со сторонним пакетом, где нам нужно изменить этот результат в особых обстоятельствах, например, представить ...

if (request()->mode === 'create') {
    app('translator')->overwrite('button', 'yyyy');
}

Итак, когда мы делаем trans('button'), мы получаем наш новый yyyy

Мы не ожидаем, что это будет сохраняться на разных страницах или что-то в этом роде, просто разовое изменение на лету, прежде чем мы доберемся до вида, который вы можете сделать config(['key' => 'new value']);

В настоящее время у нас есть решение, которое кажется немного деликатным и хакерским, и мы не думаем, что оно будет работать с кэшированием конфигурации, например, поэтому в идеале хотелось бы найти правильное решение.

return [
    'button' => request()->is('custom-page') ? 'custom text' : 'default text',
];

1 Ответ

0 голосов
/ 16 ноября 2018

Вы можете перезаписать строку перевода, используя следующий код:

app('translator')->addLines(['form.button' => 'yyyyy'] , 'en');

В вашем случае:

if (request()->mode === 'create') 
{
   app('translator')->addLines(['form.button' => 'yyyyy'] , 'en');
}

Обратите внимание, что form в form.button - это имя языкового файла, поэтому вам может потребоваться изменить его в зависимости от имени вашего файла.

1012 * Отредактированный *

Если у вас есть пространство имен, тогда передайте имя в качестве третьего параметра, как показано ниже:

app('translator')->addLines(['form.button' => 'yyyyy'] , 'en', 'your_name_space');
...