¿Cómo puedo implementar la traducción de la interfaz de usuario?

12

Las cadenas que traduzco en "Traducción de interfaz de usuario" / admin / config / regional / translate no son exportables por "Administración de configuración" / admin / config / development / configuration para mí. ¿Me estoy perdiendo de algo?

Me gustaría automatizar este proceso con hook_update_No drush cim -y.

¿Cuál es la forma correcta de implementar automáticamente "Traducción de interfaz de usuario" en Drupal 8?

  1. ¿Debo hacerlo en hook_update_N()?
  2. ¿Debo crear algún mytranslations.poarchivo personalizado en la carpeta de idioma?

Veo que hay uno locale_translate_batch_import_files()que podría usarse.

milkovsky
fuente
lo acabaste haciendo?
Boy Baukema
@RelaXNow, todavía no he implementado una solución. La importación / exportación de AFAICS de la traducción de la interfaz de usuario aún no está automatizada. Planeaba ir con un hook_update_N. Echa un vistazo a la sugerencia de @ Berdir.
milkovsky
¿Conoces la nueva Consola Drupal y su comando translation:sync? Lamentablemente, no puedo encontrar ninguna información detallada sobre este comando, pero tal vez hace lo que está buscando.
Philipp Michael
1
Rodamos un módulo para eso: drupal.org/project/customtranslations Diviértete.
geek-merlin
En nuestro caso, hicimos una prueba con Potx ( github.com/kgaut/drupal-potx ) que se ejecuta solo con Drush. Para lograr esto "fácilmente" creamos un archivo .sh que está ejecutando el comando drush para poner el archivo de traducción en módulos / personalizados / traducciones para cada módulo y cada idioma. Luego, esos archivos se agregan al repositorio de gitlab del proyecto y se pueden importar fácilmente en producción durante una implementación ...
Promo

Respuestas:

6

Tienes que hacer esto tú mismo. @rpayanm respondió dónde puede hacerlo manualmente, deberá mirar el código allí y, por ejemplo, implementar comandos drush que le permitan exportarlo e importarlo nuevamente. Automatizar eso es relativamente fácil, exportar, sincronizar con el otro servidor e importar de nuevo.

Parece que existe un proyecto que ayuda con eso: Drush Language Commands .

Puede poner traducciones predeterminadas en un módulo, pero solo se importan cuando instala ese módulo. hook_update_N()está diseñado para ejecutarse solo una vez, por lo que deberá escribir una nueva función cada vez que desee hacerlo (y aún debe exportarla primero).

Berdir
fuente
3
drupal.org/project/drush_language ahora tiene una versión D8 (dev).
Hugo
1
Puede comprobar la forma que importan traducciones de /admin/config/regional/translate/importsobre core/modules/locale/src/Form/ImportForm.php.
rpayanm
¡drupal.org/project/drush_language resuelve el problema!
milkovsky
4

Función auxiliar para agregar traducciones personalizadas:

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

Uso en un enlace de actualización:

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

Puede exportar las cadenas traducidas utilizadas por su sitio A (admin / config / regional / translate / export) y luego importarlas en el otro sitio (admin / config / regional / translate / import).

rpayanm
fuente
1
Gracias. Yo se esto. Pero no es un despliegue automático. Me gustaría automatizar este proceso con hook_update_No drush cim -y. Agregaré esto a la descripción.
milkovsky
1

Parece que también debería ser posible hacer esto escribiendo un script para ejecutar comandos desde Drush locale sync , aunque no he probado ese módulo yo mismo.

bdsl
fuente
2
utilice los comentarios para esto, no es realmente la respuesta ...
mixerowsky 02 de
1
No estaba seguro de si era correcto o no, así que pensé que debería publicarlo como respuesta y dejar que otras personas lo voten hacia arriba o hacia abajo. Por favor vote si piensa que está mal.
bdsl
1

Como aexl mencionado en los comentarios sobre la cuestión, se puede utilizar el encargo Traducciones módulo. Con eso, solo debe incluir drush locale-updateen su script de implementación.

bdsl
fuente