Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/php/multilenguaje»
De WikiEducator
(→Creando los ficheros de texto) |
(→Funciones a usar para traducir) |
||
Línea 105: | Línea 105: | ||
;textdomain | ;textdomain | ||
: Establece el dominio actual | : Establece el dominio actual | ||
+ | ===Instalar el idioma=== | ||
+ | https://es.stackoverflow.com/questions/98786/gettext-no-realiza-las-traducciones-en-web-php |
Revisión de 05:00 12 sep 2018
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
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
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