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-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:

REPLACE INTO config (collection, name, data) VALUES ('language.en', 'views.view.insegnamenti', '[stringa da inserire]');
REPLACE INTO config_snapshot (collection, name, data) VALUES ('language.en', 'views.view.insegnamenti', '[stringa da inserire]')

Il contenuto da mettere al posto di [stringa da inserire] lo si ricava eseguendo i comandi:
drush10 @unipvd9-cdl01.prod sqlq "select * from config where name like 'views.view.insegnamenti' and collection='language.en'"
drush10 @unipvd9-cdl01.prod sqlq "select * from config_snapshot where name like 'views.view.insegnamenti' and collection='language.en'"

e prendendo solo la parte che inizia con "a:1:{s:7:"display";a:1:{s:7:"block ...".

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):

#!/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).

  • No labels