CakePHP 3.6.10 В поведении преобразования не отображаются значения «defaultLocale» - PullRequest
0 голосов
/ 24 августа 2018

Я добавил поведение Translate и все работает нормально, я могу переключиться на любой язык и т. Д. Единственное, что не работает, это когда я переключаюсь на тот же язык, который установлен в app.php как defaultLocale:

'App' => [
    ...
    'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'),
    ...
],

Я не получаю переведенные поля.

Когда я удаляю настройку defaultLocale, она отлично работает для всех языков.

Может кто-нибудь сказать мнечто здесь не так?

@ ndm Спасибо, это было очень полезно.Однако сейчас я сталкиваюсь с другой проблемой.Вот как сделать многоязычную форму ввода?Итак, у меня есть 4 языка (локали): en_US, nl_BE, fr_BE, de_BE и ru_RU.DefaultLocale - это en_US.Чтобы добавить новую запись, я сделал:

// for the defaultLocale
echo $this->Form->control('title');
// for all other languages I iterate over every language except of the defaultLocale
foreach ($supported_locales as $key => $val):
    if ($key !== $default_locale):
        echo $this->Form->control('_translations.' . $key . '.title');
    endif;
endforeach;

Это прекрасно работает.Хотя я не уверен, является ли это правильным способом Cake, чтобы сделать это?

Но в ПРОСМОТРЕ (с использованием отключенной формы) и РЕДАКТИРОВАТЬ поле defaultLocale

echo $this->Form->control('title');

показываетпереведенное значение выбранной локали в этот момент вместо defaultLocale, которое сохраняется в исходной таблице.Например, когда вы переключите язык на русский в этот момент, вы увидите:

Английский: Русский титул Голландский: Nederlandse titel Французский: Titre français Deutsch: Deutscher Titel Русский: Русский титул

Таким образом, вам не хватает значения для локали по умолчанию.

Я что-то пропускаю, и есть ли более простой способ сделать эту работу "из коробки"?

1 Ответ

0 голосов
/ 24 августа 2018

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

Цитата из документации:

Философия TranslateBehavior заключается в том, что у вас есть объект, представляющий язык по умолчанию, и несколько переводов, которые могут переопределять определенные поля в этом объекте. [...]

Таким образом, поведение работает таким образом, чтобы иметь возможность сохранять непереопределенные поля, например, если в вашей исходной таблице есть поля title и content, а в поле content есть только перевод для поля *1015* 1016 * locale, тогда title будет содержать непереведенное (локаль по умолчанию) содержимое при запросе записи для fr_FR locale.

Смотри также

...