Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/php/multilenguaje»

De WikiEducator
Saltar a: navegación, buscar
(Funciones a usar para traducir)
(Instalación)
Línea 21: Línea 21:
 
<source lang=bash>
 
<source lang=bash>
 
sudo service apache2 restart
 
sudo service apache2 restart
 +
</source>
 +
;Para instalar los idiomas
 +
<source lang=bash>
 +
sudo apt-get install locales
 
</source>
 
</source>
 +
 +
<source lang=bash>
 +
# dpkg-reconfigure locales
 +
</source>
 +
Nos aparece una lista de los locales disponibles y seleccionamos los que nos interesen.
  
 
===Estructura de dierectorios===
 
===Estructura de dierectorios===

Revisión de 20:31 30 nov 2018

gettext()

  • Función en php que nos va a permitir tener nuestra página en varios lenguajes, lo que se llama internacionalizar nuestra aplicación de una forma profesional
https://www.gnu.org/software/gettext/manual/gettext.html

Instalación

  • Para poder usar esta función debemos tener instalado el paquete de ubuntu identificado con el mismo nombre.
 apt-get install gettext
  • Fichero de configuración de php (En mi caso)
/etct/php/7.2/apache/php.ini

y quitamos el comentario ; de la extensión 'gettext

....
;extension=gd2
extension=gettext
;extension=gmp
....
  • Reiniciamos servicio
sudo service apache2 restart
Para instalar los idiomas
sudo apt-get install locales
# dpkg-reconfigure locales

Nos aparece una lista de los locales disponibles y seleccionamos los que nos interesen.

Estructura de dierectorios

  • Se trata de tener un directorio por cada idioma que queramos hacer traducir
  • Estos directorios se espera bajo locale
  • Los nombres de cada directorio de cada idioma a de ser un nombre estandarizado
  • Podemos obtener una lista de las localizaciones instaladas en nuestro sistema
 locale -a
  • Como ejemplo crearemos 3 idiomas (fr, en, es)
  • Se crean directorios con el nombre
ii_PP
  • ii son dos letras para especificar el idioma de acuerdo a la especificación IDO-639-1
  • PP son dos letras en mayúsculas correspondinetes al país según la especificación IDO-3166-1
  • Dentro de cada directorio crearemos el directorio LC_MESSAGES

Dir idiomas.png

Creando los ficheros de texto

  • Creamos los ficheros con el texto en el idioma específico. Son ficheros de texto con extensión po
  • Ponemos el ejemplo de inglés
#incluimos estas etiquetas vacías
msgid ""
msgstr ""
 
"PO-Revision-Date: 2018-10-18 11:48+0100\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"Project-Id-Version: 0.1 \n"
"POT-Creation-Date:2018-10-18 11:48+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
#mensaje de usuario
msgid "usuario"
msgstr "user"
 
#mensaje de pass
msgid "pass"
msgstr "password"
 
#mensaje de saludo
msgid "saludo"
msgstr "welcome to this website"
 
#mensaje de despedida
msgid "despedida"
msgstr "We hope to see you soon on this page"
  • El resto de ficheros cambiaría el msgstr correspondiente.
  • Una herramienta a usar puede ser poedit (Hay varias, esta parece que tiene mucha aceptación)
  • Ahora debemos generar el fichero mo (Machine Object) a partir del po (Portable Object)
  • Para ello podemos ejecutar
 msgfmt -o fichero.mo fichero.po
  • O bien instalar el editor poedit, hay mas.
 apt-get install poedit

La página oficial

https://poedit.net/

Funciones a usar para traducir

bind_textdomain_codeset
Especifica el juego de caracteres en que los mensajes del catálogo del dominio serán devueltos
bindtextdomain
Establece la ruta del dominio
dcgettext
Sobrescribe el dominio de la búsqueda única del mensaje
dcngettext
Versión plural de dcgettext
dgettext
Sobrescribe el dominio actual
dngettext
Versión plural de dgettext
gettext
Consultar un mensaje en el dominio actual
ngettext
Versión plural de gettext
textdomain
Establece el dominio actual

Instalar el idioma

https://es.stackoverflow.com/questions/98786/gettext-no-realiza-las-traducciones-en-web-php