forma e sostanza della comunicazione

menu

Grazie al plugin qTranslate per WordPress, lo stesso blog può essere tradotto in più lingue, sia per quanto riguarda gli elementi dell’interfaccia che per i contenuti, in maniera facilmente personalizzabile. In base alla lingua predefinita del browser oppure a discrezione dell’utente, viene scelta la traduzione adeguata per i testi, gli estratti e i titoli delle pagine.

Per tradurre anche i permalink, o meglio lo specifico slug della pagina, una caratteristica che l’autore del plugin ha annunciato per le prossime versioni, è al momento necessario installare anche l’ulteriore estensione qTranslateSlug rilasciata in via ancora non ufficiale.

Il codice originario prevede l’aggiunta manuale di una funzione in sidebar.php o negli altri file del template per generare gli appropriati pulsanti di scelta, ma per renderne più semplice l’utilizzo ho aggiunto un apposito widget, ricalcato da quello fornito con il normale qTranslate:

class qTranslateslugWidget extends WP_Widget {
	function qTranslateslugWidget() {
		$widget_ops = array('classname' => 'widget_qtranslateslug', 'description' => __('Allows your visitors to choose a Language.','qtranslate') );
		$this->WP_Widget('qtranslateslug', 'qTranslate slug widget', $widget_ops);
	}
 
	function widget($args, $instance) {
		extract($args);
 
		echo $before_widget;
		$title = empty($instance['title']) ? __('Language', 'qtranslate') : apply_filters('widget_title', $instance['title']);
		$hide_title = empty($instance['hide-title']) ? false : 'on';
		$type = $instance['type'];
		if($type!='text'&&$type!='image'&&$type!='both'&&$type!='dropdown') $type='text';
 
		if($hide_title!='on') { echo $before_title . $title . $after_title; };
		qTranslateSlug_generateLanguageSelectCode($type, $this->id);
		echo $after_widget;
	}
 
	function update($new_instance, $old_instance) {
		$instance = $old_instance;
		$instance['title'] = $new_instance['title'];
		$instance['hide-title'] = $new_instance['hide-title'];
		$instance['type'] = $new_instance['type'];
 
		return $instance;
	}
 
	function form($instance) {
		$instance = wp_parse_args( (array) $instance, array( 'title' => '', 'hide-title' => false, 'type' => 'text' ) );
		$title = $instance['title'];
		$hide_title = $instance['hide-title'];
		$type = $instance['type'];
?>
		<p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:', 'qtranslate'); ?> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo attribute_escape($title); ?>" /></label></p>
		<p><label for="<?php echo $this->get_field_id('hide-title'); ?>"><?php _e('Hide Title:', 'qtranslate'); ?> <input type="checkbox" id="<?php echo $this->get_field_id('hide-title'); ?>" name="<?php echo $this->get_field_name('hide-title'); ?>" <?php echo ($hide_title=='on')?'checked="checked"':''; ?>/></label></p>
		<p><?php _e('Display:', 'qtranslate'); ?></p>
		<p><label for="<?php echo $this->get_field_id('type'); ?>1"><input type="radio" name="<?php echo $this->get_field_name('type'); ?>" id="<?php echo $this->get_field_id('type'); ?>1" value="text"<?php echo ($type=='text')?' checked="checked"':'' ?>/> <?php _e('Text only', 'qtranslate'); ?></label></p>
		<p><label for="<?php echo $this->get_field_id('type'); ?>2"><input type="radio" name="<?php echo $this->get_field_name('type'); ?>" id="<?php echo $this->get_field_id('type'); ?>2" value="image"<?php echo ($type=='image')?' checked="checked"':'' ?>/> <?php _e('Image only', 'qtranslate'); ?></label></p>
		<p><label for="<?php echo $this->get_field_id('type'); ?>3"><input type="radio" name="<?php echo $this->get_field_name('type'); ?>" id="<?php echo $this->get_field_id('type'); ?>3" value="both"<?php echo ($type=='both')?' checked="checked"':'' ?>/> <?php _e('Text and Image', 'qtranslate'); ?></label></p>
		<p><label for="<?php echo $this->get_field_id('type'); ?>4"><input type="radio" name="<?php echo $this->get_field_name('type'); ?>" id="<?php echo $this->get_field_id('type'); ?>4" value="dropdown"<?php echo ($type=='dropdown')?' checked="checked"':'' ?>/> <?php _e('Dropdown Box', 'qtranslate'); ?></label></p>
<?php
	}
}
function qtranslug_widget_init() {
	register_widget('qTranslateslugWidget');
}
add_action('widgets_init', 'qtranslug_widget_init');
?>

Download:
qtranslate-slug-with-widget.0.1
qtranslate-slug-with-widget.0.2
qtranslate-slug-with-widget.0.3
qtranslate-slug-with-widget.0.4

plugin nella directory di WordPress


12 Comments

  1. Ho provato di attivare il plugin con qTranslate 2.5.9 senza successo: “Cannot redeclare qtrans_widget_init() (previously declared in…/wp-content/plugins/qtranslate/qtranslate_widget.php:127”

    • 3dolab 17 Set 2010

      Sorry for my late reply, I’ve just returned from a long trip.
      ^__^
      That error message is probably due to the normal qTranslate language selection widget: first, try to remove it and then, if the problem still persists, edit the file qtranslate-slug-with-widget.php and replace qtrans_widget_init with qtranslug_widget_init or whatever you like.

      Please report if this workaround won’t fix the error, I could further investigate…

  2. Funziona, ma ho dovuto aggiornare il table (come si dice in italiano??) qtranslate_slug secondo il prefix wp_ del database in wp_qtranslate_slug tramite phpMyAdmin.
    Perfetto!!!!!!!!!

  3. 🙁 Non funziona per le pagina. Quando sono in lingua #2 cliccando sul widget per chiamare la pagina nella lingua 1 (o default) risulta una pagina 404. Niente problema invecce con articoli del blog.

  4. Nel sorgente php, il plugin usando il valore $wpdb->prefix dovrebbe creare il nome della tabella (si dice così ^__^) in modo corretto, a seconda di quanto specificato nel file di configurazione generale wp-config.php:
    non mi è chiara la causa, sei sicuro che fosse impostato a “wp_”?

    Posso confermare che la traduzione, in entrambi i sensi, avviene senza problemi usando le modalità Query e Pre-Path di qTranslate.
    Nella modalità Pre-Domain occorrono ulteriori modifiche all’URL rewrite del server.

    Con l’aggiornamento a WordPress 3.0.1 e qTranslate 2.5.9 ho riscontrato errori 404 da lingua 1 a lingua 2, soltanto nelle pagine incluse tramite Ajax (anche se i contenuti della risposta sono corretti).
    Ma questo credo sia un altro problema…

    Che tipo di permalink stai usando?

  5. Perfect, got it all working. Mille grazie und vielen Dank!!

  6. Volevo chiederti se avevi usato questo plugin per la gestione delle due lingue (italiano – inglese) in questo sito.
    Anche le due bandierine per passare da una lingua all’altra sono gestite con il plugin ?
    Grazie in anticipo
    Ciao, Claudio

    • 3dolab 27 Feb 2011

      Sì, sto utilizzando la versione più recente del plugin, cioè la 0.4.
      Dato però che la barra laterale è in realtà in fondo alla pagina, per generare le bandierine, invece di attivare il widget, ho inserito manualmente nella testata (file header.php) del mio tema la funzione qTranslateSlug_generateLanguageSelectCode

  7. Ciao

    Sto usando qtranslate su artphotoasia.net (in inglese con secondaria in italiano su WP ultima release) e volevo ringraziare per il lavoro svolto e chiederti un paio di cose.
    Tutto mi funziona ottimamente ma ho problemi con url e slug.

    Se metto un permalink che non sia ESATTAMENTE
    %post_id%/%postname% non funziona lo slug
    anche solo invertire /%postname%/%post_id% genera errore 404

    Io tenevo molto a mantenere la mia struttuta di permalink ch eè solo /%postname% principalmente per ovvi motivi SEO, e non mi interessa molto avere un ID numerico dentro un url

    Che ne pensi? Soluzioni per poter mantenere il vecchio permalink?

    Meglio per il SEO un sito con una versione di pagina in italiano ed un url in inglese ma pulito oppure un url in italiano con ID ?

    Cambiando il permalink come settaggio a tutto il blog gli url saranno si rediretti automaticamente ma temo che il page rank si comprometta. Non credo sia una cosa che Google digerisca bene 🙂 Se si può meglio evitare.

    • 3dolab 5 Mag 2011

      Concordo: il pagerank ne risente, e parlo per diretta esperienza. A volte il meccanismo è digerito male anche dalla sitemap.

      Non ho avuto modo, e francamente nemmeno il tempo, di mettere mano alla questione spinosa del permalink con ID.
      Entrambe le ipotesi che hai prospettato mi sembrano davvero poco SEO-friendly, non credo esista una soluzione facilmente alla portata, ma del resto il plugin è stato un espediente temporaneo, un ripiego provvisorio in attesa di alternative più complete e articolate… che sembrano finalmente essere arrivate.

      Penso che a questo punto il meglio sia provare la nuova versione di qTranslate (che non sono ancora riuscito a collaudare) oppure passare a WPML.
      Anche se nel mio caso significa probabilmente dedicarmi a rifare daccapo parecchio lavoro e forse stravolgere i permalink… una tragedia! 🙁

  8. Ciao Ragazzi,

    Ho scaricato ieri il vostro meraviglioso plugin ma non riesco a farlo funzionare!

    L’ho installato e lo vedo correttamente in calce alla finestra per l’editing degli articoli, inserisco lo slug che vorrei comparisse in lingua, aggiorno l’articolo ma niente.

    Ho letto diversi post a riguardo, ho sistemato la struttura del permalink come: /%post_id%/%postname%
    ed impostato qtranslate su Pre-Path mode.

    La mia versione di qTranslate è la 2.5.8

    Help Please 😉

  9. Problema risolto! 😀 Avevo combinato una fesseria non mettendo la versione italiana nel widget! Complimenti per il vostro lavoro 😉

Lascia un commento


  • diario di sviluppo