Traducción de la Fecha de WordPress 2.8 a Español

Anteriormente había publicado como traducir la fecha de WordPress para la versión 2.6 y sus subversiones. El archivo locale.php es el que contiene el nombre de los días y meses, por tanto para tener la fecha de nuestro theme en español solo hay que traducir los nombres a español, este archivo se encuentra en la carpeta wp-includes/ del directorio donde se encuentran los archivos de tu WordPress. Para hacer la traducción manualmente se hace casi exactamente igual que como lo mostré en este post “Traducción de la Fecha de WordPress a Español” la única diferencia es que ahora están en otra posición las líneas a cambiar, algunas se movieron como 2 renglones o 3, en realidad no hay mucha diferencia esto paso debido a que se agregaron algunos comentarios en el archivo locale.php y se cambio la programación un poquito pero nada que afecte a las lineas que se requieren modificar. En ese post también se explica algunos formatos para escribir la fecha de tu theme de modo ordenado o como más te guste.

Aquí les dejo la versión del locale.php para WordPress 2.8 ya con su traducción al español para que solo descompriman el locale.php del archivo .rar y lo peguen en su directorio wp-includes/, les preguntará si desean sobrescribir, denle que si ;)

Click Aquí Para Descargar Locale.php en español para WordPress 2.8

Confusión de Programación: Los inicios en C++

Hace 2 semanas y media un compañero de la universidad me presto una biblia de C++. Ese mismo fin de semana me puse a leer el librote y decidí probar el famosísimo “Hola Mundo”, aquí el programa:

#include<iostream.h>;
int main()
{
    cout << "Hola mundo, C++!" << endl;
    return 0;
}

Compilando y de pronto… zaz!!!

Línea 1.- #warning This file includes at least one deprecated or antiquated header.

Resulta ser que hay ciertos estándares que hay que seguir xD (aquí va otra paranoia mia tipo W3C), entonces busque algo de información al respecto y en efecto, ahora ya no lleva .h, ahora simplemente es #include<iostream> así que corregí y compilé nuevamente :D

Línea 4.- In function int main(): cout undeclared (first use this function)
Línea 4.- (Each undeclared identifier is reported only once for each function it appears in.): endl undeclared (first use this function)

Otra vez errores, ahora resulta ser de que cout, endl, cin, etc… necesitan declararse. Una de dos: dejar de programar en C++ por 2 años lo deja a uno bastante desactualizado ó nunca había usado un compilador que se basara en los estándares (en la prepa en la materia de programación estructurada usabamos borland y fueron cosas básicas las que aprendimos ;) ), aunque ya estoy pensando que pueden ser ambas razones pero bueno…

…investigando más sobre el tema encontré que para declararlos hay 3 formas distintas de hacer esto básicamente.

//primera forma[GLOBAL]:
#include<iostream>
using namespace std;
int main()
{
/*instrucciones*/
}

//segunda forma[DECLARANDO UNA POR UNA]:
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
//using std::/*etc..*/;
int main()
{
/*instrucciones*/
}

//tercera forma[DECLARANDO AL MOMENTO DE USO]:
#include<iostream>
int main()
{
	int x;
	std::cout << "Teclee un numero: ";
	std::cin >> x;
	return 0;
}

En la primera forma le estas diciendo al compilador que declare todo lo contenido en el “namespace std” y esto puede causar conflictos al declarar accidentalmente una variable, clase o una función que tenga el mismo nombre que alguna en el “namespace std”, además de estar declarando todo el contenido del “namespace std” el cual posiblemente no llegues a ocupar por completo de modo que solo gastas recursos.

La segunda forma es la que usualmente recomiendan, ya que no declaras todo el contenido del “namspace std” si no solamente lo que usarás de él, sin embargo hasta cierto punto puede resultar poco práctico.

La tercera forma es la que uso yo, ya que de este modo por lo menos para mi queda más claro el código y además no es declarado de manera global, sino solamente donde es utilizado.

Ahora que ya corregi estos errores a compilar se ha dicho!!!

Aquí el nuevo código:

#include<iostream>
int main()
{
	std::cout << "Hola mundo, C++" << std::endl;
	return 0;
}

Perfecto!!! ningún error, ¿a ver el ejecutable? :D

zazzzz!!!! ¿murió el ejecutable? ¿pero por qué se cerro? T_T . Nuevamente a Googlear…
otro tanto tiempo después…
solución!!! usar system(“pause”);, pues bien veamos si funciona correctamente, reescribimos el código…

#include<iostream>
int main()
{
	std::cout << "Hola mundo, C++" << std::endl;
	system("pause");
	return 0;
}

Al compilar esto el programa se detiene y muestra en pantalla un mensaje que dice: “Presione una tecla para continuar…” Vemos que el resultado es el esperado, el programa hace una pausa y al presionar cualquier tecla va al return 0; y se termina el programa, pero… ¿qué tal si quiero personalizar el mensaje?

Esa pregunta para alguien que ya sabe C++ es algo trivial e incluso pensé que encontraría una solución a la vuelta de la web y aunque no fue así de rápido, fue buena idea preguntarme eso ya que googleando la instrucción system(“pause”); me encontré con que no era algo correcto usarla debido a que efectuaba varias acciones:

1. Suspende el programa.
2. Llama al sistema operativo.
3. Abre la consola ó símbolo del sistema (ms-dos) [vuelve a ejecutar el sistema operativo en un subproceso].
4. El sistema operativo debe encontrar el comando PAUSE.
5. Destina la memoria para ejecutar el comando.
6. Ejecuta el comando y espera la pulsación de alguna tecla.
7. Libera la memoria.
8. Sale del sistema operativo.
9. Reanuda el programa.

Además de esto, NO ES COMPATIBLE EN OTROS SISTEMAS OPERATIVOS, es necesario usar winBugs para que la instrucción funcione correctamente, así que en cuanto a portabilidad para compilarlo en otro sistema ni pensarlo, no es multiplataforma.

Investigando al respecto encontré algunas alternativas. Para C: getchar(). Para C++: cin.get(). Como estoy programando en C++ la segunda opción es la necesaria para hacer lo que deseo pero antes de utilizar esta otra instrucción decidí googlear un poco más para ver si había alguna otra alternativa para hacer una pausa y esto fue lo que encontré: getch()

Al tener estas 2 alternativas me dispuse a escribir las sentencias correspondientes, al recompilar el código hubo una diferencia notable pero pequeña entre ambas. El código:

//usando cin.get()
#include<iostream>
int main()
{
	std::cout << "Hola mundo, C++" << std::endl;
	std::cin.get(); //usa std::
	return 0;
}

//usando getch()
#include<iostream>
#include<conio.h> //usa la librería conio.h
int main()
{
	std::cout << "Hola mundo, C++" << std::endl;
	getch(); //fácil de escribir
	return 0;
}

Al usar cin.get() lo que pasó fue que escribía cualquier caracter y aparecía en pantalla, de modo que es necesario presionar enter para cerrar el programa.

Al usar getch() me di cuenta que cerraba el programa al presionar cualquier caracter, de modo que estaba a punto de elegir usar getch() pero al recordar que usaba una líbrería más me puse a googlear nuevamente y me encontré que conio.h no pertenece a la biblioteca estandar de ANSI C y tampoco a la de C++, en efecto como lo podrán ver en los siguientes links: Biblioteca estandar C++, Biblioteca estandar C.

Entonces aquí por comodidad pueden usar getch() aunque es MUY recomendable seguir los estándares ;) además así se evitan incluir una librería extra que por cierto no está en el compilador de GNU/Linux. Ahora con respecto a cin.get() hay situaciones en las que usar esto no funciona como se espera debido a que cuando se pide un dato al usuario este se almacena en el buffer y por tanto para hacer que funcione correctamente cin.get() hay que limpiar ese buffer, para ello se utiliza cin.sync()

Ahora el código final:

#include<iostream>
int main()
{
	std::cout << "Hola mundo, C++" << std::endl;
	std::cin.sync(); /* En este ejemplo no es necesario agregar esta línea de código, solo es una referencia de su uso */
	std::cin.get();
	return 0;
}

Y bien así es como se pone un Hola mundo en C++ xD , trivial ¿no? y a pesar de todo este rollote se me hace más bonito C++ que Visual Basic, amén.

Nota: soy ateo igual que dios, pero pronto me volveré googleista ya que respondio muchas de mis plegarias que fueron expuestas en este post.
Nota2: Si a alguien le sirvió de algo todo este rollo aquí explicado agradezcan a google (y a León!!! xD ).
Nota3: Yo soy León :P .
Nota4: Cualquier error ya sea de sintaxis o de cualquier otro tipo, duda o sugerencia favor de dejar un comentario al respecto.

Referencias: Google, Wikipedia y GIDNetwork

Cheat Sheet ó Chuleta de Refererncia para PHP

En Emezeta nos comparten una Chuleta de Referencia para programadores PHP.

Emezeta PHP Card v0.2. Podrán descargarla en 2 formatos:

Descargar: Emezeta PHP Card – Reference cheat sheet (PDF – Comprimido en zip) 2,4MB
Descargar: Emezeta PHP Card – Reference cheat sheet (PNG) 1,2MB

Tutoriales Gratuitos de XHTML, CSS, JavaScript, AJAX y Symfony

Si te haces bolas con el código (X)HTML, quieres editar tu hoja de estilos en CSS o quieres aprender programación en Javascript e incluso si ya sabes lo básico y quieres aprender AJAX o Symfony, hay unos muy buenos tutoriales que encontré en internet:

Click Aquí para ir a “Libros Web”

También tienen una Referencia Completa de CSS 2.1.

Todos son totalmente gratis y los puedes leer en línea ó puedes descargarlos en formato PDF :D

Sigan los estándares ;)

Traducción de la Fecha de WordPress a Español

El día de hoy les traigo la traducción de la fecha de WordPress al Español sin usar ningún plugin, solo editando el archivo locale.php de tu WordPress. Pueden descargar la versión de WordPress en Español pero la fecha de su plantilla seguirá estando en inglés así que les traigo la solución. Esta versión del locale.php es para WordPress 2.6.2, WordPress 2.6.3, WordPress 2.6.5. El archivo locale.php se encuentra en la carpeta wp-includes/ del directorio donde se encuentran los archivos de tu WordPress ;) .

Bueno este post se divide en 3 partes el “Procedimiento de Edición” para que aprendan como hacerlo, la “Descarga del Archivo” por si se hacen pelotas en el camino jeje ;) y finalmente el “Formato de Fecha” para que lo implementen en su blog .

Nota: Recuerden hacer respaldo de su archivo locale.php por si algo les falla.

Procedimiento de Edición:

Primero que nada extraemos el archivo locale.php y lo abrimos en su editor de texto/html favorito (ya sea Front Page, Dreamweaver ó el Bloc de Notas).

-Ahora bien vamos a la línea 110  a  116 y tenemos lo siguiente:

$this->weekday[0] = __('Sunday');
$this->weekday[1] = __('Monday');
$this->weekday[2] = __('Tuesday');
$this->weekday[3] = __('Wednesday');
$this->weekday[4] = __('Thursday');
$this->weekday[5] = __('Friday');
$this->weekday[6] = __('Saturday');

*Lo cambiamos por esto:

$this->weekday[0] = __('Domingo');
$this->weekday[1] = __('Lunes');
$this->weekday[2] = __('Martes');
$this->weekday[3] = __('Mi&eacute;rcoles');
$this->weekday[4] = __('Jueves');
$this->weekday[5] = __('Viernes');
$this->weekday[6] = __('S&aacute;bado');

*Nota: &eacute y &aacute son la e acentuada (é) y la a acentuada (á) respectivamente y estan escritas de este modo para que sea codificado correctamente al ser llamado a la plantilla :) .

-Ahora editamos la línea 120 a 126 que tiene algo asi:

$this->weekday_initial[__('Sunday')]    = __('S_Sunday_initial');
$this->weekday_initial[__('Monday')]    = __('M_Monday_initial');
$this->weekday_initial[__('Tuesday')]   = __('T_Tuesday_initial');
$this->weekday_initial[__('Wednesday')] = __('W_Wednesday_initial');
$this->weekday_initial[__('Thursday')]  = __('T_Thursday_initial');
$this->weekday_initial[__('Friday')]    = __('F_Friday_initial');
$this->weekday_initial[__('Saturday')]  = __('S_Saturday_initial');

*Y lo cambiamos por esto:

$this->weekday_initial[__('Domingo')]    = __('D_Domingo_initial');
$this->weekday_initial[__('Lunes')]    = __('L_Lunes_initial');
$this->weekday_initial[__('Martes')]   = __('Ma_Martes_initial');
$this->weekday_initial[__('Mi&eacute;rcoles')] = __('Mi_Mi&eacute;rcoles_initial');
$this->weekday_initial[__('Jueves')]  = __('J_Jueves_initial');
$this->weekday_initial[__('Viernes')]    = __('V_Viernes_initial');
$this->weekday_initial[__('S&aacute;bado')]  = __('S_S&aacute;bado_initial');

-Vamos a la línea 133 a 139 que contiene esto:

$this->weekday_abbrev[__('Sunday')]    = __('Sun');
$this->weekday_abbrev[__('Monday')]    = __('Mon');
$this->weekday_abbrev[__('Tuesday')]   = __('Tue');
$this->weekday_abbrev[__('Wednesday')] = __('Wed');
$this->weekday_abbrev[__('Thursday')]  = __('Thu');
$this->weekday_abbrev[__('Friday')]    = __('Fri');
$this->weekday_abbrev[__('Saturday')]  = __('Sat');

*Lo sustituimos por esto:

$this->weekday_abbrev[__('Domingo')]    = __('Dom');
$this->weekday_abbrev[__('Lunes')]    = __('Lun');
$this->weekday_abbrev[__('Martes')]   = __('Mar');
$this->weekday_abbrev[__('Mi&eacute;rcoles')] = __('Mi&eacute;');
$this->weekday_abbrev[__('Jueves')]  = __('Jue');
$this->weekday_abbrev[__('Viernes')]    = __('Vie');
$this->weekday_abbrev[__('S&aacute;bado')]  = __('S&aacute;b');

-Ahora la línea 142 a 153:

$this->month['01'] = __('January');
$this->month['02'] = __('February');
$this->month['03'] = __('March');
$this->month['04'] = __('April');
$this->month['05'] = __('May');
$this->month['06'] = __('June');
$this->month['07'] = __('July');
$this->month['08'] = __('August');
$this->month['09'] = __('September');
$this->month['10'] = __('October');
$this->month['11'] = __('November');
$this->month['12'] = __('December');

*Lo cambiamos por esto:

$this->month['01'] = __('Enero');
$this->month['02'] = __('Febrero');
$this->month['03'] = __('Marzo');
$this->month['04'] = __('Abril');
$this->month['05'] = __('Mayo');
$this->month['06'] = __('Junio');
$this->month['07'] = __('Julio');
$this->month['08'] = __('Agosto');
$this->month['09'] = __('Septiembre');
$this->month['10'] = __('Octubre');
$this->month['11'] = __('Noviembre');
$this->month['12'] = __('Diciembre');

-Por último la línea 157 a 168:

$this->month_abbrev[__('January')] = __('Jan_January_abbreviation');
$this->month_abbrev[__('February')] = __('Feb_February_abbreviation');
$this->month_abbrev[__('March')] = __('Mar_March_abbreviation');
$this->month_abbrev[__('April')] = __('Apr_April_abbreviation');
$this->month_abbrev[__('May')] = __('May_May_abbreviation');
$this->month_abbrev[__('June')] = __('Jun_June_abbreviation');
$this->month_abbrev[__('July')] = __('Jul_July_abbreviation');
$this->month_abbrev[__('August')] = __('Aug_August_abbreviation');
$this->month_abbrev[__('September')] = __('Sep_September_abbreviation');
$this->month_abbrev[__('October')] = __('Oct_October_abbreviation');
$this->month_abbrev[__('November')] = __('Nov_November_abbreviation');
$this->month_abbrev[__('December')] = __('Dec_December_abbreviation');

*La modificamos poniendo lo siguiente:

$this->month_abbrev[__('Enero')] = __('Ene_Enero_abbreviation');
$this->month_abbrev[__('Febrero')] = __('Feb_Febrero_abbreviation');
$this->month_abbrev[__('Marzo')] = __('Mar_Marzo_abbreviation');
$this->month_abbrev[__('Abril')] = __('Abr_Abril_abbreviation');
$this->month_abbrev[__('Mayo')] = __('May_Mayo_abbreviation');
$this->month_abbrev[__('Junio')] = __('Jun_Junio_abbreviation');
$this->month_abbrev[__('Julio')] = __('Jul_Julio_abbreviation');
$this->month_abbrev[__('Agosto')] = __('Ago_Agosto_abbreviation');
$this->month_abbrev[__('Septiembre')] = __('Sep_Septiembre_abbreviation');
$this->month_abbrev[__('Octubre')] = __('Oct_Octubre_abbreviation');
$this->month_abbrev[__('Noviembre')] = __('Nov_Noviembre_abbreviation');
$this->month_abbrev[__('Diciembre')] = __('Dic_Diciembre_abbreviation');

Y listo! Guardamos los cambios y volvemos a subir nuestro archivo locale.php a nuestra carpeta wp-includes/ y eso es todo ;) . Espero que les sirva y más que nada no le tengan miedo a moverle a su archivo locale.php para que así tenga una idea de que hacer en futuras versiones y así poder editarlo ustedes solitos ;) .

Descarga del Archivo

Finalmente y por si no fui muy claro con esta explicación, les dejo el locale.php, lo comprimí en .zip y esta listo con la traducción nadamas para que lo suban a la carpeta wp-includes/ de su wordpress.

CLICK AQUÍ PARA DESCARGAR locale.php EN ESPAÑOL

Formatos de Fecha

Aquí les pondré como funciona cada letra para que le den formato a su gusto el como se expondrá la fecha de su WordPress:

Ahora vamos a ver el significado de las letras mas básicas:

d=Día del mes, 2 dígitos con ceros iniciales: 01 a 31
D=Representación textual de un día, tres letras: Lun a Dom
j=Día del mes sin ceros iniciales: 1 a 31
l=Representación textual completa del día de la semana: Lunes a Domingo
S=Sufijo orinal EN INGLÉS del día del mes, 2 caracteres: st, nd, rd o th. No sale en español y no le veo la utilidad xD

F=Representación textual completa de un mes: Enero a Diciembre
m=Representación numérica de un mes, con ceros iniciales: 01 a 12
n=Representación numérica de un mes, sin ceros iniciales: 1 a 12
M=Representación textual corta de un mes, tres letras: Ene a Dic
Y=Representación numérica completa de un año, 4 dígitos: ejemplo, 1999 ó 2008
y=Representación de dos dígitos de un año: ejemplo, 99 ó 08
\=Escapa caracteres especiales: ejemplo, \h\o\l\a imprimiría hola

Bueno eso es lo básico, si quieren ver más formatos para fecha en php den click aquí. les dejo unos ejemplos recomendados:

l j \d\e F \d\e\l Y\. == día número_de_día de Mes del año.
Ejemplo de lo que devuelve: martes 18 de Febrero del 2008.

l j \d\e F \d\e Y\. == día número_de_día de Mes de año.
Ejemplo de lo que devuelve: martes 18 de Febrero de 2008.

F j \d\e\l Y\. == Mes número_de_día del año.
Ejemplo de lo que devuelve: Febrero 18 del 2008.

F j \d\e Y\. == Mes número_de_día de año.
Ejemplo de lo que devuelve: Febrero 18 de 2008.

Espero les sea de utilidad ;)

Inicia Oficialmente La *Web de León*

Después de andar de hosting gratuito en hosting gratuito al fin tengo un dominio propio y con espacio suficiente para alojar algunos de mis otros blogs :D espero sea de su agrado.

Hay quienes ya me conocen pero para los que no me conozcan me llamo Christian León y pueden decirme León xD . Bueno pues espero este blog sea de su agrado, el contenido principal de este blog será sobre informática, me gustaría poder poner algo de programación, poco de diseño web, algo de software, humor geek, etc. Todo lo que les pueda compartir será publicado por este medio. Es probable que trate sobre algo de música en otra sección de la web, de momento estoy haciendo los últimos ajustes al blog para posteriormente instalar otro de mis blogs en este dominio, cuando termine serán notificados mediante el blog principal ;) dejen sus comentarios, críticas o sugerencias.

El diseño que uso en este blog se llama BlueMoon diseñado por Stephen Reinhardt. Este tema me parece muy agradable así que decidí tomarlo para el blog principal, de hecho el estilo original era un diseño con ancho fijo de modo que lo edite y ahora tiene un diseño líquido que espero sea de su agrado. También edite el sidebar (barra lateral) agregando algunas funciones y quitando otras (no use ningún widget), algunas funciones las puse en una barra que aparece en la parte inferior de la página, mas que nada son links y estadísticas, a esta barra le puse el nombre de footerbar xD . Bueno también extraje algunas funciones de otros temas como el K2 y el Twilight. Otras funciones como el de la Nube de Tags la extraje de otro blog donde ya la tenía y otras funciones del Codex de WordPress. Como se podrán dar cuenta prefiero extraer las funciones que usar plugins, ya lo que es definitivamente algo bastante laborioso como para más de 1 día pues si uso plugin. Los plugins que tengo activados de momento son Akismet, Google XML Sitemaps, Viper’s Video Quicktags y WP-PageNavi. Los considero necesarios, el Akismet me ayuda con el spam, Google XML Sitemaps con el sitemap del sitio, Viper’s Vídeo Quicktags me ayuda para mi XHTML válido y agregar vídeos de manera fácil y rápida y por último WP-PageNavi para la navegación sencilla de una página a otra. Este sitio cuenta con doble diseño CSS de modo que pueden cambiar de interface oscura a una interface clara de modo que espero que sea de su agrado el theme y

Bueno en cuanto a los estándares el diseño es XHTML válido y CSS válido ;) .

Bueno esto es todo de momento, solo quiero hacer mención de 4 personas que conocí cuando me metí en esto de ser blogger y agradecer por su apoyo: Andrés Borbón de Tecnoculto, Dante Robles de Crónicas de un Desarrollador, Emy (que esta pendiente por allí con un blog pero bueno xD ) y a Illi.Pro de Illi-Pro (wtf? xD ) y bueno, estoy algo nervioso por el comienzo de este nuevo proyecto jeje así que espero ansioso sus comentarios y espero este sitio les sirva como guía, referencia, apoyo o simplemente para encontrar algo divertido xD .

Que comience el sitio! Hoy 12 de septiembre del 2008 se inaugura oficialmente la “WEB DE LEÓN”!

Christian León (Administrador-Webmaster del Sitio)