Foros del Web » Creando para Internet » Sistemas de gestión de contenidos »

Problema con poedit y linea de codigo!

Estas en el tema de Problema con poedit y linea de codigo! en el foro de Sistemas de gestión de contenidos en Foros del Web. Hola os pido ayuda para poder terminar de traducir mi tema de wordpress, el problema es que use un codigo de otra template para crear ...
  #1 (permalink)  
Antiguo 12/01/2009, 13:32
Avatar de 23r9i0  
Fecha de Ingreso: noviembre-2008
Ubicación: Catalonia
Mensajes: 203
Antigüedad: 16 años
Puntos: 33
Problema con poedit y linea de codigo!

Hola os pido ayuda para poder terminar de traducir mi tema de wordpress, el problema es que use un codigo de otra template para crear los comentarios pero el codigo no esta preparado para traducirlo mediante el programa poedit y al intentar hacerlo no funciona.
Este es el codigo original:
Código:
<?php comments_popup_link('Add your comment', 'Read 1 comment', 'Read '.$comNo.' comment'); ?>
Y este seria el que uso para poder usar el archivo mo creado por el poedit:
Código:
<?php comments_popup_link(__('Add your comment', 'tema'), __('Read 1 comment', 'tema'), __( 'Read '.$comNo.' comment','tema')); ?>
Resulta que el ultimo no funciona creo que es por que tiene este codigo, .$comNo. pero no se como solucionarlo.
Gracias
  #2 (permalink)  
Antiguo 12/01/2009, 16:37
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con poedit y linea de codigo!

Creo que simplemente no funciona porque se han agregado juegos de paréntesis que no estaban en el código original. Parece que cada parámetro de la función fue encerrado entre paréntesis. Elimina los juegos de paréntesis extra.

Si eso no funciona, por favor detalla más el problema.


Saludos.
  #3 (permalink)  
Antiguo 12/01/2009, 16:58
Avatar de 23r9i0  
Fecha de Ingreso: noviembre-2008
Ubicación: Catalonia
Mensajes: 203
Antigüedad: 16 años
Puntos: 33
Respuesta: Problema con poedit y linea de codigo!

Hola alvlin!
Me explico mas detalladamente.
Uso wordpress y tengo un theme con un archivo mo que hace que se traduzcan las lineas.
por ejemplo en el tema predeterminado del wordpress lo tiene de la siguiente manera:
Código:
<?php comments_popup_link(__('No Comments »', 'kubrick'), __('1 Comment »', 'kubrick'), __('% Comments »', 'kubrick'), '', __('Comments Closed', 'kubrick') ); ?>
y funciona perfectamente, por eso pensé que era la variable $comNo que hacia de interferencia.
Concretamente los paréntesis son para poder traducir las tres secciones al castellano!
No se que mas datos o explicación darte para solucionarlo.
Gracias!!
  #4 (permalink)  
Antiguo 12/01/2009, 17:41
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con poedit y linea de codigo!

Bueno, parece que siempre se aprende algo He investigado el funcionamiento de Gettext y sí, es correcta la forma de llamarlo, excepto por el segundo parámetro.

Lo que quiero decir es que ese segundo parámetro no es necesario. Incluso no he encontrado algo como lo que mostrás en los archivos de WordPress (aunque puede que se utilice solamente en los archivos del tema).
Con respecto a la variable, creo que sí puede causar un problema, al menos en todos los ejemplos que veo se utiliza sprintf() en vez de incluirlo así.

Prueba esto, que debería funcionar correctamente
Código PHP:
<?php comments_popup_link(__('Add your comment'), __('Read 1 comment'), __'Read % comment')); ?>

Saludos.
  #5 (permalink)  
Antiguo 12/01/2009, 17:58
Avatar de 23r9i0  
Fecha de Ingreso: noviembre-2008
Ubicación: Catalonia
Mensajes: 203
Antigüedad: 16 años
Puntos: 33
Respuesta: Problema con poedit y linea de codigo!

Hola de nuevo!
Pero el % llamara a $comNo te pongo los códigos para que veas como trabaja.
Este es el código que hace que cuente solamente los comentarios no los pingbacks ni trackbacks.
Código:
....

/*
Ping/Track/Comment Count
Source URI: http://txfx.net/code/wordpress/ping-track-comment-count/
Description: Provides functions that return or display the number of trackbacks, pingbacks, comments or combined pings recieved by a given post.  Other Authors: Mark Jaquith, Chris J. Davis, Scott "Skippy" Merrill
*/
function get_comment_type_count($type='all', $post_id = 0) {
	global $cjd_comment_count_cache, $id, $post;
	if ( !$post_id )
		$post_id = $post->ID;
	if ( !$post_id )
		return;
	if ( !isset($cjd_comment_count_cache[$post_id]) ) {
		$p = get_post($post_id);
		$p = array($p);
		update_comment_type_cache($p);
	}
	if ( $type == 'pingback' || $type == 'trackback' || $type == 'comment' )
		return $cjd_comment_count_cache[$post_id][$type];
	elseif ( $type == 'ping' )
		return $cjd_comment_count_cache[$post_id]['pingback'] + $cjd_comment_count_cache[$post_id]['trackback'];
	else
		return array_sum((array) $cjd_comment_count_cache[$post_id]);
	}
function comment_type_count($type = 'all', $post_id = 0) {
		echo get_comment_type_count($type, $post_id);
}
function update_comment_type_cache(&$queried_posts) {
	global $cjd_comment_count_cache, $wpdb;
	if ( !$queried_posts )
		return $queried_posts;
	foreach ( (array) $queried_posts as $post )
		if ( !isset($cjd_comment_count_cache[$post->ID]) )
			$post_id_list[] = $post->ID;
	if ( $post_id_list ) {
		$post_id_list = implode(',', $post_id_list);
		foreach ( array('', 'pingback', 'trackback') as $type ) {
			$counts = $wpdb->get_results("SELECT ID, COUNT( comment_ID ) AS ccount
			FROM $wpdb->posts
			LEFT JOIN $wpdb->comments ON ( comment_post_ID = ID AND comment_approved = '1' AND comment_type='$type' )
			WHERE post_status = 'publish' AND ID IN ($post_id_list)
			GROUP BY ID");
			if ( $counts ) {
				if ( '' == $type )
					$type = 'comment';
				foreach ( $counts as $count )
					$cjd_comment_count_cache[$count->ID][$type] = $count->ccount;
			}
		}
	}
	return $queried_posts;
}
add_filter('the_posts', 'update_comment_type_cache');

...
y este es donde se muestra el resultado

Código:
<?php
$comNo = get_comment_type_count('comment'); // Checking if there are any actual comments (trackbacks and pingbacks excluded)

if ($comNo == 1 ) {
?>
<span class="postComments"><?php comments_popup_link('Add your comment', 'Read 1 comment', 'Read '.$comNo.' comment'); ?></span>
<?php }
elseif ($comNo > 1) {
?>
<span class="postComments"><?php comments_popup_link('Add your comment', 'Read 1 comment', 'Read '.$comNo.' comments'); ?></span>
<?php }
else {
?>
<span class="postComments"><?php comments_popup_link('Add your comment', 'Add your comment', 'Add your comment'); ?></span>
<?php } ?>
Gracias de nuevo!
  #6 (permalink)  
Antiguo 12/01/2009, 18:46
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con poedit y linea de codigo!

Ora sí entiendo el problema. Que se reduce básicamente a que, como el texto es procesado primero por gettext y luego por PHP, la introducción de la variable es complicada.

Hagamos entonces lo mismo que hace WordPress en sus plantillas: utilizar directamente sprintf():

Código php:
Ver original
  1. <?php
  2. $comNo = get_comment_type_count('comment');
  3. comments_popup_link(__('Add your comment'), __('Read 1 comment'), sprintf(__( 'Read % comment'), $comNo); ?>

Con esto, ya no se pierde nada cuando la cadena es analizada por gettext, y la función comments_popup_link recibe una cadena que ya contiene el número correcto.

A propósito, no creo que el if que estás usando sea necesario, ya que la función recibe tres parámetros justamente para evitarlo (el primer parámetro se usa en caso de que no haya comentarios, el segundo en caso de que haya 1, y el tercero si hay más.) Ya entendí para qué es el if: simplemente porque no podés confiar en el número de comentarios que devolverá la función "normal" de wordpress (podría incluir pingbacks o trackbacks)

A propósito: si usás WordPress 2.7 quizás quieras echarle un vistazo a esta nueva función:
wp_list_comments


Saludos.
  #7 (permalink)  
Antiguo 12/01/2009, 20:13
Avatar de 23r9i0  
Fecha de Ingreso: noviembre-2008
Ubicación: Catalonia
Mensajes: 203
Antigüedad: 16 años
Puntos: 33
Respuesta: Problema con poedit y linea de codigo!

Hola
Mira si uso esa funcion "wp_list_comments" para los comentarios personalizados el código del que hablamos va en el index.php, archive.php, search.php que es donde aparecen las entradas que escribo.
Por cierto lo he probado en local y comentarte que he cambiado % por %s ya que me mostraba el número en una especie de cuadrito y unos numeros dentro.

Por lo demas perfecto
Te lo agradezco mucho, nos vemos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:03.