CakePHP 3.6 многоязычная форма - PullRequest
       15

CakePHP 3.6 многоязычная форма

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

Как упомянуто в CakePHP 3.6.10 В поведении перевода не отображаются значения 'defaultLocale' значения языка по умолчанию должны быть сохранены в исходной таблице, чтобы их можно было использовать в качестве запасного для пустых полей в других языках. Однако у меня есть проблема с созданием форм для этого. У меня есть 5 языков (локали): 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, которое сохраняется в исходной таблице. F.E. когда вы переключите язык на русский в этот момент, вы увидите:

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

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

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

1 Ответ

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

Необходимо убедиться, что вы выбираете записи в локали по умолчанию, независимо от текущей локали среды. Вы можете сделать это, используя метод перевода 100 * * (locale() до CakePHP 3.6), чтобы явно установить локаль для использования в конкретном репозитории, например:

$locale = \Cake\Core\Configure::read('App.defaultLocale');
$this->Articles->setLocale($locale);
$query = $this->Articles->find('translations');

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

$this->Articles->setLocale($locale);
$this->Articles->Comments->setLocale($locale);
$query = $this->Articles->find('translations')->contain('Comments');

Смотри также

...