You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Next »

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 all'interno della cartella che vogliamo usare come sorgente per importare i dati, ad esempio la cartella /myconf-insegnamenti nella root di UNIPVd9, 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