Grupo de personas hablando en varios idiomas

Hoy vamos a desarrollar una sencilla clase traductora de textos que funciona con arrays PHP. Los componentes como el que vamos a programar nosotros desde cero suelen dar soporte a varios formatos de traducciones: .csv, .txt, .mo o .xml.

Pero de momento, por simplicidad y por motivos didácticos nosotros vamos a centrarnos en uno solo: los arrays PHP. Puedes utilizar esta clase sencilla en tus apps siempre que tengas claro que puedes usar arrays PHP para traducir tus textos.

De no ser así, deberías contar con otra clase traductora que de cobertura a tu formato, o con un componente que proporcione una verdadera capa de abstracción dando soporte a todos los formatos, por ejemplo, Zend_Translate de Zend Framework.

Dicho esto, adjunto a continuación el código del componente SimpleTranslation que también está disponible en este repositorio Git.

namespace SimpleTranslation;
/**
 * Translate class
 *
 * A simple translation class using PHP arrays.
 *
 * @author      Jordi Bassagañas <info@programarivm.com>
 * @copyright   2014 Jordi Bassagañas
 * @link        https://programarivm.com
 */
class Translate
{
    /**
     * @var stdClass Config object
     */
    protected static $conf;
    /**
     * Init method
     * @param string $locale Target language
     * @param string $path Dictionary path
     */
    static function init($locale=null, $path=null)
    {
        self::$conf = new \stdClass;
        self::setLocale($locale);
        self::setDictionary($path);
    }
    /**
    * Sets the current locale
    * @param string $locale
    */
    private static function setLocale($locale=null)
    {
        isset($locale)
            ? self::$conf->locale = $locale
            : self::$conf->locale = null;
    }
    /**
     * Sets the dictionary path
     * @param string $path
     */
    private static function setDictionary($path=null)
    {
        isset($path)
            ? self::$conf->dictionary = include $path
            : self::$conf->dictionary = null;
    }
    /**
    * Returns the translated phrase
    * @param string $phrase The original phrase
    * @return string The translated phrase
    */
    static function __($phrase)
    {
        if(isset(self::$conf->locale) && isset(self::$conf->dictionary))
        {
            return self::$conf->dictionary[$phrase];
        }
        else return $phrase;
    }
}

El archivo README.md explica cómo utilizar SimpleTranslation. En primer lugar hay que poner los diccionarios PHP en alguna carpeta de la aplicación.

lang/es.php:

return array(
    'home' => 'inicio',
    'about' => 'sobre nosotros',
    'contact' => 'contacto'
);

lang/fr.php:

return array(
    'home' => 'accueil',
    'about' => 'à propos',
    'contact' => 'contact'
);

Luego tienes que incluir la clase \SimpleTranslation\Translate.php e inicializarla con los parámetros locale y dictionary:

include_once 'SimpleTranslation/Translate.php';

use \SimpleTranslation\Translate;

Translate::init('es', __DIR__ . "/lang/es.php");

Con lo anterior ya podemos traducir los textos:

echo Translate::__('home');
echo Translate::__('about');

La clase Translate.php trabaja estos aspectos de PHP:

  • Programación orientada a objectos (OOP)
  • Namespaces
  • Propiedades estáticas
  • El operador ternario
  • La clase stdClass de PHP

Esto es todo por hoy, espero sirva de ayuda en tus aplicaciones PHP.

También te puede interesar leer esto...

Previous Post Next Post