Una manera sencilla de tener un proyecto php en varios idiomas es usando las funciones gettext lo que se denomina i18n que significa internacionalización y localización, que es poder usar varios idiomas sin tener que cambiar el código por cada idioma ya que los literales están seprados del código. Voy a intentar explicarlo de una manera sencilla:
Primero habrá que hacer los ficheros con los textos en los idiomas que se vayan a usar en la web. En este caso se usan ficheros con extension "po",dichos ficheros se pueden editar con la aplicación PoEdit. Estos ficheros hay que crearlos en la carpeta locale/es_ES/messages.po. Los mensajes tienen que ser escritos de la siguiente manera:
msgid "Nombre"
msgstr "Name"
msgid "buenos_dias"
msgstr "Good morning"
En el código anterior esta la clave "msgid", que será común para todos los idiomas que se vayan a usar en el proyecto, y el mensaje "msgstr" que es lo que se va a traducir.
Fijaos que en la ruta del fichero con los literales del directorio "locale" cuelga el directorio "es_ES" que es el idioma que se ha definido para usar en la web. Si se quiere añadir el inglés americano la ruta sería locale/en_US/messages.po.
El siguiente paso es separar los literales del código para tener el mismo código para todos los idiomas y no tener que duplicar nada. Hay que usar la función gettext:
//Para inglés
echo gettext("Nombre"); // mostaría el texto Name
echo _("Nombre"); // Es un alias de la función gettext
//Para español
echo gettext("Nombre"); // mostaría el texto Nombre
echo _("Nombre");
Después de los pasos anteriores hay que decirle al código que idioma debe coger ya sea detectando el idioma el visitante o con la opción de elegir el idioma en la página web. Y esto se peude ver en el siguiente código
putenv("LC_ALL=es_ES");
setlocale(LC_ALL, $language);