Proporcioneu traduccions d'interfície per a mòduls personalitzats al Drupal 8

Tinc la sensació que quan busques a Internet sobre aquest problema les respostes no són molt clares, així que he recopilat aquí els passos que segueixo per a aconseguir-ho.

 

Quan escric "traduccions de la interfície" em refereixo a aquelles cadenes que s'escriuen sempre en anglès (fins i tot quan el lloc que desenvolupem no té l'anglès activat). Són generalment paràmetres de la funció t(), utilitzen el filtre “trans” de twig o són part d'una definició YAML com pot ser module_name.links.menu.yml. Per a traduir configuració el procés és bastant diferent.

 

La pàgina d'informació principal sobre aquest tema és la documentació de l'API del Drupal i els seus comentaris, però a mesura que apareixen noves versions del Drupal, aquests es van perdent entre les diferents versions.

 

Farem un exemple amb dues cadenes que tenim en el nostre codi que estan encapsulades en una funció t().

 

t(‘My custom string’)

 

t(‘Every last Thursday of the month at 20:00 in @location’)

 

El primer pas és afegir dues línies al nostre fitxer example_event.info.yml d'aquesta manera:

 

name: Example event

type: module

description: Functionality related with the date the event happens

package: Custom

core: 8.x

 

'Interfície translation project': example_event

 

'Interfície translation server pattern': 'modules/custom/example_event/translations/% language.po'

 

Així li diem al Drupal que busqui al directori de traduccions d'aquest mòdul un fitxer que es digui "es.po" o qualsevol altra llengua a la qual vulguem traduir.

 

Els fitxers .po estan en el format gettext que té aquesta pinta:

 

msgid ""

msgstr ""

"Project-Id-Version: Example event \ n"

"MIME-Version: 1.0 \ n"

"Content-Type: text / plain; charset = utf-8 \ n"

"Content-Transfer-Encoding: 8bit \ n"

"Plural-Forms: nplurals = 2; plural = (n> 1); \ n"

 

msgid "My custom string"

msgstr "La meva cadena personalitzada"

 

msgid "Every last Thursday of the month at 20:00 in @location"

msgstr "Tots els últims dijous de mes a @location a les 20:00"

 

Ara ja podem incloure aquest fitxer en el nostre control de versions per portar un seguiment dels canvis.

 

Les traduccions del Drupal són a la base de dades i no en fitxers. Això fa que necessitem les dues comandes següents per actualitzar-la.

 

drush locale-check

 

Per comprovar si hi ha noves traduccions (es comprovaran també altres mòduls contribuïts).

 

drush locale-update

 

Per desar a la base de dades les traduccions basant-se en els fitxers .po.

 

Podeu afegir aquestes dues comandes al vostre desplegament i/o integració contínua per tenir la interfície traduïda.

 

Això està provat al Drupal 8.5.x encara que crec que mai desapareixerà la compatibilitat.

 

Per poder llegir el vostre codi cercant cadenes traduïbles en comptes de crear els vostres fitxers .po a mà podeu fer servir el mòdul Potx (o fins i tot una versió pel Drupal 8 amb molts patches per poder executar-la a la vostra mateixa instal·lació).

 

Això és pràcticament tot el que necessiteu saber per traduir des dels fitxers .po. En general, crec que el procés es pot canviar per requerir menys codi, per exemple: qualsevol carpeta de "translations" s'hauria de descobrir automàticament per afegir traduccions. Hi ha issues sobre aquest tema si voleu afegir les vostres idees.