Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Quando si importa una vista tramite file YAML, la sua traduzione non viene inclusa in automatico.
Per avere anche la traduzione, serve importare il dato prendendolo dal database.
( (warning) Si prende come esempio la vista "Insegnamenti" di UNIPVd9 )


Nel database, infatti, la traduzione è presente all'interno di due macro tabelle: config e config_snapshot. Per vedere il dato si può andare all'interno del database del sito con un client (ad esempio phpMyAdmin) e portarsi in "config" (e poi "config_snapshot"). Da qui si cerca la vista (ad esempio "views.view.insegnamenti") con il comando:

SELECT * FROM `config` WHERE name = 'views.view.insegnamenti'
(e poi SELECT * FROM `config_snapshot` WHERE name = 'views.view.insegnamenti')

Usciranno due risultati: uno in italiano ed uno in inglese. Il contenuto del BLOB è il dato che ci interessa; il file in italiano è più grande rispetto a quello inglese, perchè quest'ultimo contiene solo le parti che sono state tradotte, mentre il primo l'intera vista.


Andiamo sul server all'interno della cartella che vogliamo usare come sorgente per importare i dati, ad esempio la cartella myconf del modello cdl00. Eliminiamo tutti i file all'interno di questa cartella /myconf-insegnamenti nella root di UNIPVd9 (se non esiste, possiamo crearla), e creiamo due nuovi file:

  • il file YAML che contiene la vista ed il cui nome e contenuto lo si ricavano dall'esportazione della vista da backoffice
    admin/config/development/configuration/full/export
    nell'esempio sarà "views.view.insegnamenti.yml"
  • il file SQL contenente la traduzione, che chiamiamo in questo caso "replace.en.insegnamenti.sql", prendendo il nome dal file della traduzione contenuto nel database. Al suo interno scriviamo:

...

Il file compilato potrebbe ad esempio apparire come:

REPLACE INTO config (collection, name, data) VALUES ('language.en', 'views.view.insegnamenti', 'a:1:{s:7:"display";a:1:{s:7:"block_1";a:1:{s:15:"display_options";a:1:{s:6:"header";a:1:{s:4:"area";a:1:{s:7:"content";a:2:{s:5:"valu\n";s:6:"format";s:9:"full_html";}}}}}}}-center mb-3">Study plan - Enrolment year {{ field_full_academic_year }}</div>');
REPLACE INTO config_snapshot (collection, name, data) VALUES ('language.en', 'views.view.insegnamenti', 'a:1:{s:7:"display";a:1:{s:7:"block_1";a:1:{s:15:"display_options";a:1:{s:6:"header";a:1:{s:4:"area";a:1:{s:7:"content";a:2:{s:5:"valu\n";s:6:"format";s:9:"full_html";}}}}}}}center mb-3">Study plan</div>')

...

Una volta che sono pronti i due file, si esegue lo script chiamato "script-views-traduzioni.sh" dalla root dell'Ateneo, che contiene il seguente codice (se non esiste, lo si crea):

Code Block
#!/bin/bash

DRUSHSCRIPT=/drupal/dim_prod/dim/external/drush10/vendor/bin/drush
DRUSHALIAS=/drupal/dim_prod/dim/var/build/drush_aliases/8

SITE=unipvd9

array=( cdl00 )


ENV=prod
DENV=prod
MYCONF=myconf-insegnamenti
REPLACESQL=replace.en.insegnamenti.sql
DENV=prod


for i in "${array[@]}"

do

  # per il calcolo grossolano dei tempi
  start=`date +%s`

  rm /shared/dim_prod/${ENV}/${SITE}/${i}/files/myconf/*.yml
  cp /shared/dim_prod/${ENV}/${SITE}/${MYCONF}/*.yml /shared/dim_prod/${ENV}/${SITE}/${i}/files/myconf/
  cp /shared/dim_prod/${ENV}/${SITE}/${MYCONF}/*.sql /shared/dim_prod/${ENV}/${SITE}/${i}/files/myconf/
  cd /shared/dim_prod/${ENV}/${SITE}/${i}/files/myconf/

  echo "---------- ${i} ${DENV} ------------"

  echo "-- importazione viste --"
  $DRUSHSCRIPT --alias-path=$DRUSHALIAS @${SITE}-${i}.${DENV} config-import --partial --yes

  echo "-- importazione delle traduzioni delle viste --"
  $DRUSHSCRIPT --alias-path=$DRUSHALIAS @${SITE}-${i}.${DENV} sqlc < ${REPLACESQL}

  echo "-- pulizia cache --"
  $DRUSHSCRIPT --alias-path=$DRUSHALIAS @${SITE}-${i}.${DENV} cr

  end=`date +%s`
  runtime=$((end-start))
  echo "-- ${i} done in ${runtime} sec"
  echo "---------------------"
  cd  /shared/dim_prod/${ENV}/${SITE}/

done


Questo codice fa in modo di rimuovere tutti i file contenuti nella cartella files/myconf del singolo sito e di copiare della cartella sorgente (es: myconf-insegnamenti) nella cartella /myconf i file YAML ed SQL.
Si sposta quindi all'interno della cartella /myconf ed importa il file YAML usando "drush config-import" ed il file SQL usando "drush sqlc < file_sorgente".
Infine ricostruisce le cache e si riporta alla root del sito (es: /shared/dim_prod/prod/unipvd9).