it-swarm.com.de

Wie kann ich die Übersetzung der Benutzeroberfläche bereitstellen?

Zeichenfolgen, die ich unter "Übersetzung der Benutzeroberfläche"/admin/config/regional/translate übersetze, können von "Configuration Management"/admin/config/development/configuration für mich nicht exportiert werden. Vermisse ich etwas

Ich möchte diesen Prozess mit hook_update_N Oder drush cim -y Automatisieren.

Was ist ein geeigneter Weg, um "User Interface Translation" in Drupal 8) automatisch bereitzustellen?

  1. Soll ich es in hook_update_N() machen?
  2. Sollte ich eine benutzerdefinierte mytranslations.po - Datei im Sprachordner erstellen?

Ich sehe, dass es locale_translate_batch_import_files() gibt, das verwendet werden könnte.

12
milkovsky

Das musst du selbst machen. @rpayanm hat geantwortet, wo Sie es manuell tun können. Sie müssen sich den Code dort ansehen und beispielsweise Drush-Befehle implementieren, mit denen Sie ihn exportieren und erneut importieren können. Das zu automatisieren ist dann relativ einfach, exportieren, mit dem anderen Server synchronisieren und erneut importieren.

Es sieht so aus, als ob ein Projekt existiert, das dabei hilft: Drush Language Commands .

Sie können Standardübersetzungen in ein Modul einfügen, diese werden jedoch nur importiert, wenn Sie dieses Modul installieren. hook_update_N() kann nur einmal ausgeführt werden, sodass Sie jedes Mal, wenn Sie dies tun möchten, eine neue Funktion schreiben müssen (und diese zuerst exportieren müssen).

6
Berdir

Sie können die von Ihrer Site A verwendeten übersetzten Zeichenfolgen exportieren (admin/config/regional/translate/export) und sie dann auf der anderen Site importieren (admin/config/regional/translate/import).

4
rpayanm

Hilfsfunktion zum Hinzufügen benutzerdefinierter Übersetzungen:

/**
 * 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();
}

Verwendung in einem Update-Hook:

/**
 * Add translations.
 */
function MYMODULE_update_8002() {
  MYMODULE_add_translation('Adjust', 'de', 'Anpassen');
}
4
milkovsky

Es sieht so aus, als ob es auch möglich sein sollte, ein Skript zu schreiben, um Befehle von Drush locale sync auszuführen, obwohl ich dieses Modul selbst nicht ausprobiert habe.

1
bdsl

Wie aexl in den Kommentaren zu der Frage erwähnt, können Sie das Modul Benutzerdefinierte Übersetzungen verwenden. Dazu sollten Sie nur drush locale-update in Ihrem Bereitstellungsskript.

1
bdsl