Как я могу развернуть перевод интерфейса пользователя?

12

Строки, которые я перевожу в «Перевод пользовательского интерфейса» / admin / config / Regional / translate, не могут быть экспортированы в «Управление конфигурацией» / admin / config / development / configuration для меня. Я что-то упускаю?

Я хотел бы автоматизировать этот процесс с помощью hook_update_Nили drush cim -y.

Как правильно автоматически развернуть «Перевод интерфейса пользователя» в Drupal 8?

  1. Должен ли я сделать это в hook_update_N()?
  2. Должен ли я создать какой-нибудь пользовательский mytranslations.poфайл в языковой папке?

Я вижу, locale_translate_batch_import_files()что можно использовать.

Мильковский
источник
Что ты в итоге делал?
Мальчик Баукема
@ RelaXNow, я еще не реализовал решение. AFAICS импорт / экспорт перевода пользовательского интерфейса еще не автоматизирован. Я планировал пойти с собой hook_update_N. Посмотрите на предложение @ Berdir.
Милковский
Знаете ли вы о новой консоли Drupal и ее команде translation:sync? К сожалению, я не могу найти подробную информацию об этой команде, но, возможно, она делает то, что вы ищете.
Филипп Майкл
1
Я выкатил нам модуль для этого: drupal.org/project/customtranslations Удачи.
geek-merlin
В нашем случае мы провели тест с Potx ( github.com/kgaut/drupal-potx ), который выполняется только с Drush. Чтобы добиться этого «легко», мы создали файл .sh, который выполняет команду drush, чтобы поместить файл перевода в modules / custom / translations для каждого модуля и каждого языка. Затем эти файлы добавляются в репозиторий gitlab проекта и могут быть легко импортированы в производство во время развертывания ...
Promo

Ответы:

6

Вы должны сделать это самостоятельно. @rpayanm ответил, где вы можете сделать это вручную, вам нужно будет посмотреть на код там и, например, реализовать команды drush, которые позволяют вам экспортировать и импортировать его снова. Автоматизация, которая затем становится относительно простой, экспортируйте, синхронизируйте ее с другим сервером и снова импортируйте.

Похоже, что проект, который помогает с этим, существует: Drush Language Commands .

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

Berdir
источник
3
drupal.org/project/drush_language теперь имеет версию D8 (dev).
Уго
1
Вы можете проверить форму, импортировать переводы с /admin/config/regional/translate/importна core/modules/locale/src/Form/ImportForm.php.
rpayanm
drupal.org/project/drush_language решает проблему!
Милковский
4

Вспомогательная функция для добавления пользовательских переводов:

/**
 * Helper to manually add a single translation string.
 *
 * @param string $source_string
 *   Source string.
 * @param string $langcode
 *   The langcode.
 * @param string $translated_string
 *   Translated string.
 */
function MYMODULE_add_translation($source_string, $langcode, $translated_string) {
  // Find existing source string.
  $storage = \Drupal::service('locale.storage');
  $string = $storage->findString(['source' => $source_string]);
  if (is_null($string)) {
    $string = new SourceString();
    $string->setString($source_string);
    $string->setStorage($storage);
    $string->save();
  }
  // Create translation. If one already exists, it will be replaced.
  $translation = $storage->createTranslation([
    'lid' => $string->lid,
    'language' => $langcode,
    'translation' => $translated_string,
  ]);
  $translation->save();
}

Использование в хуке обновления:

/**
 * Add translations.
 */
function MYMODULE_update_8002() {
  MYMODULE_add_translation('Adjust', 'de', 'Anpassen');
}
Мильковский
источник
4

Вы можете экспортировать переведенные строки, используемые вашим сайтом A (admin / config / region / translate / export), а затем импортировать их на другой сайт (admin / config / Regional / translate / import).

rpayanm
источник
1
Спасибо. Я знаю это. Но это не автоматическое развертывание. Я хотел бы автоматизировать этот процесс с помощью hook_update_Nили drush cim -y. Я добавлю это в описание.
Мильковский
1

Похоже, что это также можно сделать, написав скрипт для запуска команд из синхронизации Drush locale , хотя я сам не пробовал этот модуль.

bdsl
источник
2
пожалуйста, используйте комментарии для этого, это не совсем ответ ...
mixerowsky
1
Я не был уверен, правильно это или нет, поэтому я решил опубликовать его как ответ и позволить другим людям голосовать за него вверх или вниз. Пожалуйста, проголосуйте, если считаете, что это неправильно.
BDSL
1

Как уже упоминалось в комментариях к вопросу, вы можете использовать модуль Custom Translations . При этом вам просто нужно включить drush locale-updateв ваш сценарий развертывания.

bdsl
источник