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.
( 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).