New question

Question:

Date: 18-06-2015 22:28:35 (In Spanish)

Php en página multi idioma, carpetas y htaccess[Resolved]

Hola amigos.

Tengo una web programada en php con dos idiomas.
Dicha web solo tiene una versión de la misma y se van añadiendo los textos desde un array según el idioma seleccionado.

/*
------------------
Language: Español
------------------
*/ 
$lang = array();
$lang['PAGE_TITLE'] = 'Mi página';
$lang['PAGE_SUB_TITLE'] = 'Página demo';
...


El idioma se define según el idioma del navegador del usuario pero también se puede cambiar desde un menú y éste se almacena en una cookie.

Hasta ahí todo bien. La página funciona bien.

Actualmente, independientemente del idioma, en la barra de direcciones se lee la dirección: http://www.mipagina.com pero me gustaría que al navegar por la versión española de la página, en la barra de direcciones se reflejara una dirección del tipo http://www.mipagina.com/es/ y si es en inglés http://www.mipagina.com/en y la verdad llevo varios días con esto y no doy con la solución.
Me da la sensación de que tal vez con htaccess se pueda conseguir pero soy incapaz :(

Gracias por vuestro tiempo.
Tags: Apache - htaccess - Internationalization - mod_rewrite - Question - URL Votes: 0 - Answers: 3 - Views: 15 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 20-06-2015 06:05:01 Hola Jaume, aquí un ejemplo de como lo podrías implementar lo que comentas:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    
    RewriteCond %{HTTP:Accept-Language} ^en [NC]
    RewriteRule ^$ http://www.mipagina.com/en/ [L,R=301]
    
    RewriteCond %{HTTP:Accept-Language} ^es [NC]
    RewriteRule ^$ http://www.mipagina.com/es/ [L,R=301]
    </IfModule>
    


    Al margen de esto, es mala práctica SEO agregar el lenguaje en la url, lo correcto sería que tengas url's distintas para cada lenguaje, ejemplo:

    http://www.mipagina.com/contacto <-- para español
    http://www.mipagina.com/contact <-- para ingles

    Espero que mi respuesta te sea de ayuda.

    Saludos,
      Votes: 1 - Link answer
     
  • Date: 20-06-2015 07:43:39 Gracias por tu respuesta Fernando.
    La verdad que voy un poco perdido con esto del SEO y las páginas multi idioma. Es un tema que está bastamente tratado por internet pero no consigo encontrar una explicación clara de cual es la mejor manera de hacerlo o mejor dicho cual es la que mas me conviene.

    ¿Crees que el planteamiento que hago de la estructura es correcto? Es decir; una sola pagina para cada sección y añadir el texto de cada idioma a través del array, o por el contrario es mejor que tenga copias de la misma pagina en varias carpetas?

    Y otra pregunta... Para implementar la solución que me planteas, es decir tener distintas urls, es correcta mi estructura y podríaconseguir hacer las redirecciones a través de htaccess?

    Muchas gracias por tu tiempo y perdona mi insistencia pero me ha costado mucho encontrar respuestas concretas como las tuyas :)
      Votes: 0 - Link answer
     
  • Date: 20-06-2015 11:31:30 Jaume, hay tantas formas de internacionalizar una página php como formas puedas imaginarte y posibilidades que brinda el lenguaje, o sea, muchas....

    Tener una página para cada idioma es una posibilidad (he visto muchos sitios de clientes duplicados y hasta triplicados), pero presenta un desafio de mantenimiento, porque siempre que hagas un cambio en español tendrás que ir a hacerlo a en las páginas de los demas idiomas, por lo que esta opción yo la descartaría.

    Lo que tu plantesas es lo mas correcto, una sola página que dinamicamente se ajusta a cada lenguaje.

    Podrías tener un array único de lenguaje multidimensional, algo como:

    $lang = array();
    $lang['es']['PAGE_TITLE'] = 'Mi página';
    $lang['en']['PAGE_TITLE'] = 'My page';
    $lang['es']['PAGE_SUB_TITLE'] = 'Página demo';
    $lang['en']['PAGE_SUB_TITLE'] = 'Demo page';


    o un array como el que planteas, separado por archivos e incluido segun el lenguaje que se navega. Podrías hacer algo como lo siguiente para su inclusión dinámica:

    $lenguaje = 'es'; //<-- obviamente que el lenguaje lo deberás obtener de alguna función que te indique con que lenguaje navega el usuario
    require_once 'lenguaje/'.basename(__FILE__, ".php").'_'.$lenguaje.'.php';
    


    De la forma anterior podrías tener para la pagina "contacto.php" un archivo "contacto_es.php y contacto_en.php" que resguarde el array de lenguaje, y segun el caso se incluye uno u otro.

    Con respecto a las url's, podrás usar mod_rewrite para convertir las url, por ejemplo:
    http://www.miweb.com/contacto en http://www.miweb.com/contacto.php
    http://www.miweb.com/contact en http://www.miweb.com/contacto.php

    Con respecto a los enlaces de la web, deberás tener alguna función que te construya las url para colocar en el href, algo como:
    <a href="<?php echo getURL('contacto');?>"><?php echo $lang['CONTACTO']</a>

    Lo cual terminará como:
    <a href="http://www.miweb.com/contacto">Contacto</a>


    Te recomiendo que busques en google con las palabras "Internacionalizar página PHP", o similar, pero la palabra clave es "internacionalización", seguramente encontrarás mucha información al respecto.

    Luego me cuentas como te fue.

    Saludos,
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In