Cómo Traducir Un Texto Automáticamente En Drupal
Cuando necesitas traducir un texto en diferentes entornos y quieres automatizarlo
Cuando necesitas traducir un texto en Drupal es muy fácil, normalmente vas a /admin/config/regional/translate y lo traduces.
Si bien esto lleva menos de un minuto para un texto, ¿qué sucede si necesitas hacer lo mismo para muchos textos o entornos? Lo ideal sería automatizarlo en ese caso, de modo que solo tengas que hacerlo una vez y, una vez que se implemente en cada entorno, se realizará automáticamente.
Para ello, solo necesitas un módulo personalizado. En mi caso, mi módulo personalizado se llama administration y solo necesito dos archivos:
- administration.install
- administration.module
Esta será la función que llamaremos desde el fichero install y debe colocarse en el archivo administration.module:
use Drupal\locale\SourceString;
/**
* Helper function for adding translations.
*
* @param array $strings
* The array with strings and their translations.
*/
function _administration_add_translations(array $strings) {
$storage = \Drupal::service('locale.storage');
foreach ($strings as $translation) {
try {
$string = $storage->findString(['source' => $translation['label']]);
if (is_null($string)) {
$string = new SourceString();
$string->setString($translation['label']);
$string->setStorage($storage);
$string->save();
}
foreach ($translation['translations'] as $langcode => $string_translation) {
$storage->createTranslation([
'lid' => $string->lid,
'language' => $langcode,
'translation' => $string_translation,
])->save();
}
}
catch (Exception $e) {
\Drupal::logger('administration')->warning('String @s: @e on line @l could not be found', [
'@s' => $translation['label'],
'@e' => $e->getMessage(),
'@l' => $e->getLine(),
]);
}
}
}
Luego, en administration.install, creamos nuestro hook_update y llamamos a la función pasando los valores:
/**
* Implements hook_update_N().
*/
function administration_update_9001() {
// Create translations programmatically.
$translations = [
[
'label' => 'Owner of the rights of use',
'translations' => [
'es' => 'Propietario de los derechos de uso',
],
],
];
// Add the translations.
_administration_add_translations($translations);
}
Y eso es todo, las traducciones se crearán automáticamente en cada entorno donde se implemente tu código..
👉 Descubre más sobre mi aquí: https://sergioguardiola.net 🔥