Necesito ayuda con acentos! / I need help with Spanish accents!

Events happening in the community are now at Drupal community events on www.drupal.org.
arilikeairy's picture

Estoy creando una tema con user-profile.tpl.php y no puedo entender como hacer acentos correctamente en este pagina. Puede ayduarme? (O indicarme a donde puedo encontrar mas informacion?) Muchas gracias!

I'm creating my own theme via user-profile.tpl.php and I can't figure out how to get accents to show up correctly on that page. Can you help me? (Or point me to somewhere with more information?) Thanks!

Comments

There can be more than one

5t4rdu5t's picture

There can be more than one reason to the problem you mention depending on where you are testing, the platform you're using, etc. However I believe you can find some useful bit of information here:

http://www.codingforums.com/showthread.php?t=143379

At least it's a starting point.

Good luck!

Still don't know

arilikeairy's picture

Thanks for your prompt response!

UTF-8 seems to work fine as a character set that supports accents. I'm using that, being the default with Drupal 6.

If I input (for example) an é into Drupal (like in a menu) it displays correctly. However, using it in HTML/PHP in creating the user-profile.tpl.php file, it shows up incorrectly.

I'm just writing straight HTML (not filtered through PHP), so I don't know how to integrate the htmlentities() function. I tried to put it into a DIV with an accented letter in it, and nothing showed up when I loaded the page through Drupal.

Do you have any other suggestions?

Thanks!!

Ejemplo

arilikeairy's picture

Este es un ejemplo de mi user-profile.tpl.php archivo: // This is an example from my user-profile.tpl.php file:

Ningun de estos funciona: // None of these display the accented o:

<?php if($account->profile_medio): ?>
  <tr><td class="fieldlabel">Medio Preferido de Comunicación:</td><td class="field"><?php print check_plain($account->profile_medio); ?></td></tr>
<?php endif; ?>

<?php if($account->profile_medio): ?>
  <tr><td class="fieldlabel">Medio Preferido de Comunicaci<?php htmlentities("ó");?>n:</td><td class="field"><?php print check_plain($account->profile_medio); ?></td></tr>
<?php endif; ?>

<?php if($account->profile_medio): ?>
  <tr><td class="fieldlabel">Medio Preferido de Comunicaci<?php html_entity_decode("ó");?>n:</td><td class="field"><?php print check_plain($account->profile_medio); ?></td></tr>
<?php endif; ?>

And next to the profile, in the menu, there are accents. So I know that the page could display them.

I believe it is your text editor

markus_petrux's picture

I believe the problem is that your text editor does not support UTF-8, hence it is writing non-ascii character in latin-1 or something similar, but not UTF-8.

I would suggest to write your literal strings using t() and then provide a translation file for your project. You can then use poEdit to generate the translation files, and that supports UTF-8.

Another approach: Here's a function that can be used to convert a string from iso-8859-1 to utf-8:

<?php
function iso2utf($string) {
 
// @see drupal_convert_to_utf8($string, 'iso-8859-1');
 
return @mb_convert_encoding($string, 'utf-8', 'iso-8859-1');
}
?>

PS: I think this is not particularly related to the Social Networking Sites group, per se. ;-)

Thanks for your input.

arilikeairy's picture

I made an HTML file with my editor with a bunch of accented characters in it, opened it in the browser, and they displayed fine. Would that suggest that the problem isn't with my editor?

I have no idea how to do the following!

I would suggest to write your literal strings using t() and then provide a translation file for your project. You can then use poEdit to generate the translation files, and that supports UTF-8.

How would I do that within the context of a .tpl.php file?

(You're right, it's not directly related to social networking, but in my desperate state of mind searching for an answer I was thinking that social networking sites were more likely to be bilingual...)

Es dificil decir qué es lo más práctico

markus_petrux's picture

...por eso te aconsejaba lo que a mi modo de ver podría ser el enfoque correcto, que es esto de usar la función t(), etc.

Tienes la documentación de esta función aquí: http://api.drupal.org/api/function/t/6

Esto significa que escribirías estos textos en inglés, y luego tienes que generar las traducciones de algún modo. Exactamente igual que se hace on los textos que tiene el Drupal core, los módulos o los temas que te puedes descargar desde drupal.org.

Las traducciones las puedes generar desde admin/build/translate, o bien, si necesitas portarlas de un sistema a otro, puedes generar un fichero .po, como los que tiene Drupal o los módulos en la carpeta "translations". Luego los importas a través del panel de administración y listo.

Para generar estos ficheros necesitas una plantilla de traducción, extensión .pot, y esto lo puedes generar con un módulo que se llama potx. Luego copias el fichero.pot a es.pot y lo editas con un programa que se llama poEdit, por ejemplo, que éste sí soporta UTF-8.

Tienes más información sobre todo esto aquí: http://drupal.org/contribute/translations

Creo que éste sería el enfoque más práctico a la larga.

Si por lo que sea no te va bien montar todo este lio para algo puntual, entonces cualquier solución vale. Lo más práctico sería buscar un editor de textos que soporte UTF-8. Así puedes escribir tus plantillas o lo que sea directamente en UTF-8. Tienes varios por ahí. Como por ejemplo el notepad++, que es open source.

Si por lo que sea necesitas convertir texto en formato latin-1 a UTF-8, ahí arriba te puse una función en PHP de ejemplo que te puede servir.

Yo no me complicaría la vida intentando escribir con HTML entities. Las páginas que sirve Drupal van codificadas en formato UTF-8, por lo que a la larga será mucho más sencillo encontrar un método que te permita generar tus textos en UTF-8 directamente. ;-)

Suerte! ;-)

Gracias y ahora estoy

arilikeairy's picture

Gracias y ahora estoy aprendiendo sobre t() y poEdit... Les diré si sirve para los perfiles o no.

Acabé de instalar y usar notepad++ y eso no sirve. Todavia accentos producen errores en los perfiles de Drupal.

Prueba con codigos HTML

isegura's picture

Hola,

Yo me he encontrado tambien con ese problema en los .tpl
Al final, la solucion más sencilla que he encontrado es utilizar codigos html, por ejemplo para "á" utilizar ";á"
Dado que la estas páginas suelen ser cortas y se modifican muy poco, no supone un gran trabajo extra.

En tu caso:

<?php if($account->profile_medio): ?>
  <tr><td class="fieldlabel">Medio Preferido de Comunicaci;&oacute;n:</td><td class="field"><?php print check_plain($account->profile_medio); ?></td></tr>
<?php endif; ?>

Espero que te sirva.

Gracias, pero todavia no

arilikeairy's picture

Gracias, pero todavia no funciona.

Si usando las entidades HTML

josepvalls's picture

Si usando las entidades HTML dices que aún no funciona, estás haciendo alguna cosa mal.
Drupal codifica los carácteres que entras en campos de texto pero no codifica nada en los campos de html sin filtrar, tanto en estos como en modulos y temas las entidades són la solución más farragosa pero que funcionará.

Encuentras una lista

lelizondo's picture

Encuentras una lista completa buscando "html entities" en google.

Luis

Luis

Escribí un post con mi experiencia

capynet's picture

Tuve el mismo problema durante un buen tiempo y la solución fue ni mas ni menos que cambiar la codificación de los archivos a UTF-8 a los archivos y procurar que mis editores los lean en esa codificación (para que no los vuelvan a romper). podes ver mas en detalle lo que te cuento acá:

http://www.e-capy.com/solucion-modulos-y-templates-con-acentos-y-caracte...

change the encoding of Drupal

Observer123's picture

change the encoding of Drupal database

<?php



$result
= db_query_range("SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'TUDB_NAME'"
, $uid, 0, 10000);
while (
$node = db_fetch_object($result)) {
 

$result2 = db_query("ALTER TABLE ".$node->TABLE_NAME."  CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;");
echo
$result2."<br>";
  }



?>

Social Networking Sites

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: