Domanda

Sto costruendo un sito web inglese / francese e mi chiedevo se ci fosse una buona pratica per un simile lavoro.

  1. Duplicazione del sito e creazione di una cartella francese e inglese con il sito appropriato all'interno.

  2. Uso di PHP per scambiare il contenuto con tag html. per esempio. if ($ lang == 'it'):

  3. Usa php per scambiare solo il contenuto lasciando i tag html uguali per entrambi. per esempio. se dichiarazioni dappertutto. Questo sarebbe negativo per l'efficienza?

Eventuali altri suggerimenti sarebbero apprezzati

È stato utile?

Soluzione

Abbiamo creato un framework per quando (se) il nostro sito diventa internazionale che funziona in questo modo ...

Struttura delle cartelle;

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

Qualsiasi testo o immagini specifici della lingua vengono rimossi dalla pagina direttamente e sostituiti da costanti. ad es. nella schermata di accesso, inseriamo;

echo TEXT_LOGIN_WELCOME;

che è definito in /lang/english/text/login.php come;

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

ma in /lang/dutch/text/login.php è definito come;

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

; -)

Ogni file di definizione della lingua è chiamato esattamente come la pagina per cui viene utilizzato, quindi quando cariciamo una pagina di fronte al pubblico, dobbiamo solo capire quale lingua parla l'utente e possiamo includere il file di definizione della lingua pertinente .

Il bello di questo sistema è che tutte le informazioni sulla lingua sono centralizzate. Quando è necessario aggiungere una nuova lingua, è sufficiente copiare la cartella principale (in inglese?), Rinominarla, comprimere l'intera cosa e inviarla a un servizio di traduzione per far funzionare la loro magia. Certo, il rovescio della medaglia di questo sistema è la manutenzione man mano che crescono sia le lingue che i contenuti ... Se qualcuno ha delle idee brillanti in merito, mi piacerebbe ascoltarle!

A proposito, se alla fine hai bisogno di indovinare la posizione di un utente tramite IP, potresti voler controllare geoip .

Altri suggerimenti

Usa un sistema di template. Smarty Template Engine è probabilmente uno dei più noti PHP. Non solo un sistema di template ha lo scopo esatto che stai cercando di raggiungere, ma rende anche molto più semplice la manutenzione delle pagine separando il codice di visualizzazione dal contenuto (che ti consente anche di utilizzare lo stesso modello per molte pagine di contenuto diverse di un natura simile).

Come modo più semplice ti consiglio di usare metodo di internazionalizzazione i18n & amp; gettext cataloghi (file .po).
Il famoso progetto WordPress è usandolo pure .

1 - La duplicazione dell'intero sito ti costringerà a ripetere ogni ritocco di codice nelle 2 cartelle: - [

2 - Se vuoi dire qualcosa di simile

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

Questa soluzione è perfetta per gestire due lingue nella stessa pagina.
Ma hai ancora tag duplicati.

3 - Modificare solo i contenuti è davvero soddisfazione.
Forse proliferare se le dichiarazioni possono appesantire la compilazione di php ... Non lo so.
Comunque il documento può essere più conciso con questo approccio:

<?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() ?>

Il testo tra ob_start e ob_end_flush viene analizzato DOPO la compilazione di php.
Ciò significa che le stringhe interessate verranno ad es. dall'istruzione echo, non all'interno di < ? php? > tag.
Anche i contenuti provenienti da PHP includono IS Ma NON CSS esterno o JavaScript.

Mantieni il delimitatore di attenzione # non è un carattere ancora utilizzato altrove.
Forse preferirai sostituire con || o ^^

Ovviamente in futuro puoi adattare questa soluzione in 3 o più lingue. Ma se devi inserire & Quot; Traduzione in terza lingua # & Quot; in molte righe di un grande sito, forse la soluzione di MatW fa al caso tuo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top