Usuario:ManuelRomero/ProgramacionWeb/php/multilenguaje
De WikiEducator
< Usuario:ManuelRomero | ProgramacionWeb/php
Revisión a fecha de 21:42 3 dic 2018; ManuelRomero (Discusión | contribuciones)
Contenido
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
Para ver los idiomas que tengo actualemnte instalados miramos con el comando
locale -a
Si queremos agregar nuevos idiomas ejecutamos la reconfiguración de los idiomas instalados
# dpkg-reconfigure locales
- Nos aparece una lista de los locales disponibles y seleccionamos los que nos interesen.
- Vamos a agregar el español utf-8, el francés y el inglés para nuestra práctica.
son los códigos (los podemos ver en la lista) 158 182 233 respectivamente establecemos por defecto el es-ES-UTF8
Estructura de dierectorios
- Se trata de tener un directorio por cada idioma que queramos hacer traducir
- En concreto estableceremos los directorios de configuraciones regionales.
- Estos directorios se espera bajo locale
- Los nombres de cada directorio de cada idioma a de ser un nombre estandarizado
- Debemos usar las abreviaturas de las dos letras minúsculas del idioma según la especificación ISO-639-1, seguido de un guión bajo, seguido de las dos letras en mayúscula que corresponderán al código del país según la especificación ISO-3166-1.
- 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 ISO-639-1
- PP son dos letras en mayúsculas correspondinetes al país según la especificación ISO-3166-1
- Dentro de cada directorio crearemos el directorio LC_MESSAGES
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