Usar arrays es apenas un poco mejor que usar variables. Al menos no se ocupa mucho de la tabla de símbolos del intérprete y difícilmente se pueda crear un conflicto de nombres. Se puede incluir una instrucción global con el nombre del único array de traducciones en cada función que vaya a emitir una cadena localizada, en lugar de tener que mencionar cada posible variable de traducción individualmente. Es más lento que usar las variables directamente y su expansión dentro de cadenas encerradas en comillas dobles o cadenas `heredoc´ va a requerir encerrar la expresión entre llaves para evitar la ambig�edad de que el intérprete no pueda determinar dónde termina la expresión:

  
echo "debe usarse así: ${textos['aceptar']}, y no: $textos['aceptar']";
  

Una ventaja que tiene el usar arrays es organizar los strings en distintos niveles de anidamiento, como se puede ver en el ejemplo, donde se ha armado una lista desplegable a partir de un array de traducciones que es a su vez un único elemento dentro del array $textos. Es esta posibilidad de organización lo que lo hace más atractivo. Nótese incluso el uso de la función asort() para asegurarse que la lista desplegable esté siempre ordenada alfabéticamente, según el texto traducido y no según el orden original de la lista. Esto es imprescindible en listas largas, pues es muy molesto, por ejemplo, en una lista de paises, encontrar, por ejemplo: Somalía, Africa del Sur, España, Sudán que se corresponde al orden alfabético en inglés: Somalia, South Africa, Spain, Sudan, etc..

Un array, sin embargo, es la mejor manera de almacenar los textos y, como se puede ver en los archivos de traducción, el formato es fácil de interpretar por parte de un traductor, incluso los arrays anidados le proveen un poco de contexto al traductor para saber que todos los textos en ese grupo están relacionados.

Usar una función para acceder a las traducciones puede salvar dos de los defectos de usar arrays. Una función tiene visibilidad global por lo que puede llamarse desde cualquier lugar, dentro o fuera de una función, sin tener que usar la instrucción global. Por otra parte, una función puede salvar el problema de que no se muestre nada si falta una traducción.

Un ejemplo de tal función se muestra a continuación:


function traducir($texto) {
  global $textos;

  if (array_key_exists($texto,$textos)) return $textos[$texto];
  else  return $texto;
}

Si el texto cuya clave se indica no existe, al menos se muestra la clave en sí.

Viene de: Internacionalización y Localización: usando variables

Continúa en: Internacionalización y localización: usando gettext()

Indice: Internacionalización y Localización: índice