Рейтинг:0

Перевод пункта меню программно?

флаг pk

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

 если ($entity->hasTranslation($language->getId())) {
      //Для обновления
      $entity->removeTranslation($language->getId());
    }
    пытаться {
      $entity->addTranslation($language->getId(), ['title' => 'abcd'])->save();
    } поймать (EntityStorageException $e) {
      \Drupal::logger('Меню-Перевод')->error($e->getMessage());
      \Drupal::messenger()->addError(t('Не удалось добавить перевод для ' . $language->getName()));
    }

Я отлаживаю и думаю, что проблема заключается в строке:

$entity->addTranslation($language->getId(), ['title' => 'abcd'])->save();

Любая помощь будет оценена по достоинству. Спасибо.

флаг cn
Просто проверка работоспособности — поле «Название ссылки в меню» настроено на перевод в /admin/config/region/content-language?
blur avatar
флаг bn
Как вы реализуете локализацию? Элементы меню должны иметь ссылку «перевести» (или что-то подобное) в пользовательском интерфейсе меню (структура -> меню).
Рейтинг:1
флаг de

Вы не учли язык по умолчанию. Ваш код сломается, если вы запустите этот код для обратного вызова на языке по умолчанию, потому что вы удаляете перевод по умолчанию, а вам не разрешено это делать:

$defaultLanguage = \Drupal::languageManager->getDefaultLanguage()->getId();
if ($entity->hasTranslation($language->getId()) && $language->getId() !== $defaultLanguage) {
  // Для обновления
  $entity->removeTranslation($language->getId());
}
пытаться {
  если ($language->getId() === $defaultLanguage) {
    // Просто задайте значение поля, а не перевод:
    $entity->set('название', 'abcd');
  }
  еще {
    $entity->addTranslation($language->getId(), ['title' => 'abcd'])->save();
  }
} поймать (EntityStorageException $e) {
  \Drupal::logger('Меню-Перевод')->error($e->getMessage());
  \Drupal::messenger()->addError(t('Не удалось добавить перевод для ' . $language->getName()));
}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.