Edición de «KumbiaPHP y gettext»

De KumbiaPHP Framework Wiki

Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.

Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así efectuar la reversión.

Revisión actual Tu texto
Línea 7: Línea 7:
 
   aptitude install locale  
 
   aptitude install locale  
 
Además, también debe estar disponible el lenguaje, al cual se quiere hacer la traducción.
 
Además, también debe estar disponible el lenguaje, al cual se quiere hacer la traducción.
  locale -a
 
  
 
=== Tutorial ===  
 
=== Tutorial ===  
Línea 16: Línea 15:
 
<source lang="php">
 
<source lang="php">
 
<?php echo Form::open('formularios/prueba') ?>
 
<?php echo Form::open('formularios/prueba') ?>
   Nombre: <?php echo Form::text('nombre') ?>
+
   Nombre: <?php echo Form::text('nombre) ?>
 
</source>
 
</source>
  
Línea 23: Línea 22:
 
<source lang="php">
 
<source lang="php">
 
<?php echo Form::open('formularios/prueba') ?>
 
<?php echo Form::open('formularios/prueba') ?>
   <?php echo _("Nombre:") . Form::text('nombre') ?>
+
   _("Nombre:") <?php echo Form::text('nombre) ?>
 
</source>
 
</source>
  
 
Con esto, ya sabemos como tenemos que escribir los textos, que queremos internacionalizar. Otra cosa que hay que tener en cuenta, es que deberemos crear (ahora explicaré como) un archivo '''.po''', por cada idioma que queramos tener en nuestra aplicación.
 
Con esto, ya sabemos como tenemos que escribir los textos, que queremos internacionalizar. Otra cosa que hay que tener en cuenta, es que deberemos crear (ahora explicaré como) un archivo '''.po''', por cada idioma que queramos tener en nuestra aplicación.
  
Los '''códigos de idioma''' a utilizar para los nombres de las carpetas, son los que se definen en la norma [http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes '''ISO 639'''] seguido de un guión bajo y el código de país [http://www.iso.org/iso/english_country_names_and_code_elements '''ISO3166''']. Por ejemplo podríamos tener para tres países en los que se habla español pero tienen diferente cultura los siguientes códigos: es_ES(España), es_AR (Argentina) y es_UY(Uruguay).
+
Los '''códigos de idioma''' a utilizar, son los que se definen en la norma '''ISO 639'''. Por ejemplo, es (español), fr (francés).
  
Los '''códigos de idioma''' a utilizar para los nombres de los archivos, son los que se definen en la norma [http://www.iso.org/iso/english_country_names_and_code_elements '''ISO3166'''].
+
Has de tener ubicado, la correspondiente carpeta de su idioma, dentro de la aplicación en app/locale. Por ejemplo, si yo quiero que mi aplicación se pueda mostrar en español y en inglés, la estructura sería esta:
 
 
Has de tener ubicado, la correspondiente carpeta de su idioma, dentro de la aplicación en app/locale. Por ejemplo.
 
  
 
<pre>
 
<pre>
Línea 41: Línea 38:
 
             |-- LC_MESSAGES
 
             |-- LC_MESSAGES
 
                 |-- es.po
 
                 |-- es.po
         |-- es_AR
+
         |-- en_EN
 
             |-- LC_MESSAGES
 
             |-- LC_MESSAGES
                 |-- ar.po
+
                 |-- en.po
        |-- es_UY
 
            |-- LC_MESSAGES
 
                |-- uy.po
 
 
|-- core
 
|-- core
 
</pre>
 
</pre>
  
 
= Generación de los archivos .po =
 
= Generación de los archivos .po =
Para la generación de estos dos archivos, utilizo el programa '''''poedit'''''. Que podemos descargar desde su página oficial: [http://www.poedit.net/download.php www.poedit.net]. Para que veas como funciona, vamos a generar los archivos .po y el idioma inglés:
+
Para la generación de estos dos archivos, utilizo el programa '''''poedit''''', el cual podemos descargar desde su página oficial: [http://www.poedit.net/download.php www.poedit.net]. Para que veas como funciona, vamos a generar los archivos .po y el idioma inglés:
  
 
Abrimos el programa, en el menú superior seleccionamos '''''edición->preferencias''''', en la ventana que se abre, nos vamos a la '''pestaña procesadores''' y seleccionamos '''PHP'''.
 
Abrimos el programa, en el menú superior seleccionamos '''''edición->preferencias''''', en la ventana que se abre, nos vamos a la '''pestaña procesadores''' y seleccionamos '''PHP'''.
Línea 89: Línea 83:
 
= Como utilizar el archivo .po =
 
= Como utilizar el archivo .po =
  
Para que las etiquetas aparezcan traducidas, habría que añadir el siguiente código en el aplication_controller (si quieres que este disponible en toda la aplicación) o en el controlador que quieras usarlo.
+
Para que las etiquetas aparezcan traducidos, habría que añadir el siguiente código en el aplication_controller, si quieres que este disponible en toda la aplicación, o en el controlador que quieras usarlo.
  
 
<source lang="php">
 
<source lang="php">
 
<?php
 
<?php
$language="en_EN"; // $language es el nombre de las carpetas que contienen la carpeta LC_MESSAGES. Adicionalmente $language puede tener el sufijo .utf-8 pero la carpeta llamarse en_EN
+
  $language="en_EN";
putenv("LC_ALL=$language");
+
  putenv("LC_ALL=$language");
setlocale(LC_ALL, $language);
+
  setlocale(LC_ALL, $language);
bindtextdomain("messages", APP_PATH . 'locale'); // messages es el nombre de los archivos .po y .mo
+
  bindtextdomain("messages", "./locale");
textdomain("messages"); // messages es el nombre de los archivos .po y .mo
+
  textdomain("messages");
 
?>
 
?>
 
</source>
 
</source>
Línea 103: Línea 97:
 
'''''Nota:''''' El primer argumento de las funciones bindtextdomain y textdomain, tiene que ser el nombre del archivo .po que se haya creado.
 
'''''Nota:''''' El primer argumento de las funciones bindtextdomain y textdomain, tiene que ser el nombre del archivo .po que se haya creado.
  
El ejemplo anterior nos mostrará la aplicación en ingles, y especifico que el archivo de traducciones se llama messages, con lo que tendria que tenerlo en la siguiente ruta: '''''/app/locale/en_EN/LC_MESSAGES/messages.po'''''.
+
Ten en cuenta, que con ese código nos lo mostraría en inglés. Si quieres cambiarlo dinámicamente desde tu aplicación, tendrás que adecuar el código, para que la variable '''''$language''''', tome el idioma que te interese en cada momento.
 
 
Si quieres cambiar el idioma dinámicamente desde tu aplicación, tendrás que adecuar el código, para que la variable '''''$language''''', tome el idioma que te interese en cada momento.
 
 
 
Dependiendo del S.O. que usemos el locale nos puede venir de varias formas: en, en_EN, en_EN.utf8, en_EN@euro, etc...., com lo cual deberemos adaptar la variable '''''$language''''' del ejemplo anterior o especificarle varios locales y asi cogerá el primero que encuentre.
 
 
 
= Enlaces Externos=
 
[http://cachi.temiga.org/2010/07/18/kumbiaphp-i18n-internacionalizacion/ KumbiaPHP + i18N Internacionalización]
 
  
[http://matandotigres.org.ve/2010/07/17/internacionalizacion-i18n-basada-en-url-para-kumbiaphp/ Internacionalización (i18n) basada en URL para KumbiaPHP]
 
 
[[Categoría:Tutoriales KumbiaPHP]]
 
[[Categoría:Tutoriales KumbiaPHP]]

Ten en cuenta que todas las contribuciones a KumbiaPHP Framework Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Proyecto:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)