Pregunta

Estoy construyendo un inglés/francés sitio web y me preguntaba si hay una mejor práctica para este tipo de trabajo.

  1. Duplicar el sitio y realizar un inglés y francés carpeta con el sitio apropiado en el interior.

  2. El uso de PHP para intercambiar el contenido con etiquetas html.por ejemplo.if($lang=='es'):

  3. Uso de php para intercambiar sólo el contenido, dejando las etiquetas html de la misma para ambos.por ejemplo.si las declaraciones de todo el lugar.Sería malo para la eficiencia?

Cualquier sugerencia se agradece

¿Fue útil?

Solución

Tenemos un marco establecido para cuando (si) nuestro sitio se internacionaliza y funciona así ...

Estructura de carpetas;

/
  lang/
    english/
      images/
      text/
    dutch/
      images/
      text/

Cualquier texto o imagen que sea específico del idioma se elimina directamente de la página y se reemplaza por constantes. Por ejemplo, en la pantalla de inicio de sesión, ingresamos;

echo TEXT_LOGIN_WELCOME;

que se define en /lang/english/text/login.php como;

define('TEXT_LOGIN_WELCOME', 'Welcome, please login:');

pero en /lang/dutch/text/login.php se define como;

define('TEXT_LOGIN_WELCOME', 'Welcome, please login (in dutch):'); 

;-)

Cada archivo de definición de idioma se denomina exactamente igual a la página para la que se utiliza, por lo que cuando cargamos una página pública, solo necesitamos averiguar qué idioma habla el usuario y podemos incluir el archivo de definición de idioma relevante .

Lo bueno de este sistema es que toda la información del idioma está centralizada. Cuando necesite agregar un nuevo idioma, simplemente copie la carpeta principal (¿en inglés?), Cámbiele el nombre, cierre todo y envíelo a un servicio de traducción para que haga magia. Por supuesto, la desventaja de este sistema es el mantenimiento a medida que crecen los idiomas y el contenido ... ¡Si alguien tiene alguna idea brillante sobre esto, me encantaría escucharla!

Por cierto, si necesita adivinar la ubicación de un usuario por IP, puede consultar geoIP .

Otros consejos

Use un sistema de plantillas. Smarty Template Engine es probablemente uno de los PHP más conocidos. Un sistema de plantillas no solo sirve para el propósito exacto que está tratando de lograr, sino que también hace que el mantenimiento de las páginas sea mucho más fácil al separar el código de visualización del contenido (lo que también le permite usar la misma plantilla para muchas páginas de contenido diferentes de un naturaleza similar).

Como la forma más simple, le recomiendo que use método de internacionalización i18n & amp; catálogos gettext (archivos .po).
El famoso WordPress es usándolo también .

1 Duplicación de todo el sitio obligará a repetir cada código de retoque en las 2 carpetas :-[

2 - Si te refieres a somenting como

<?php if($lang=='en') { ?>  
  <p>English text</p>  
<? } else { ?>  
  <p>Text français</p>  
<? } ?>

Esta solución es perfecta para manejar dos idiomas en la misma página.
Pero usted todavía tiene etiquetas duplicadas.

3 - Cambiar sólo el contenido es realmente la satisfacción.
Tal vez proliferan de declaraciones y si puede pesan php compilación de...No sé.
De todos modos documento puede ser más conciso con este enfoque:

<?php            
  function interpreter($buffer) {
    $pieces = explode('#', $buffer);

    if (isset($_GET['lang'])) $begin=$_GET['lang'];
    else $begin = 1;  // 1 to display français, 2 to display english

    $tot = count($pieces);          

    for ($i=$begin; $i<$tot; $i+=3) {  // remove one language
    unset($pieces[$i]); }

    foreach ($pieces as $value) {  // recompose the text
    $output .= $value; }

    return $output;
  }

  ob_start("interpreter");      
?>

<a href="?lang=#1#2#">#Français#English#</a>
<p>#English text#Texte français#.</p>

<?php ob_end_flush() ?>

El texto entre ob_start y ob_end_flush se analiza DESPUÉS de compilar php.
Eso significa que se ven afectadas las cadenas que viene por ejemplo.de instrucción echo, no en el interior < ?php ?> las etiquetas.
También contenido procedente de php include SE ve afectada.
Pero NO externo css o javascript.

Mantener la atención delimitador # no es un caracter sin embargo, se utiliza en otros lugares.
Tal vez usted prefiere reemplazar con || o ^^

Por supuesto, en el futuro puede adaptar esta solución en 3 o más idiomas.Pero si tiene que insertar la "Tercera lengua de la traducción#" en muchas líneas de un sitio grande, tal vez la solución de MatW se adapte a usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top