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

Compare with Current View Page History

« Previous Version 5 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.


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 del modello cdl00 di UNIPV. Eliminiamo tutti i file all'interno di questa cartella 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", che contiene il seguente codice:

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

DENV=pp

time (

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

do

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

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

  cd /shared/dim_prod/prod/unipvd9/cdl00/files/myconf/

  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 < replace.en.insegnamenti.sql

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

  end=`date +%s`
  runtime=$((end-start))
  echo "-- ${i} done in ${runtime} sec"
  echo "---------------------"

done

)

  • No labels