Domanda

Lavorerò su un progetto in cui un'app Web abbastanza grande deve essere ottimizzata per gestire diverse lingue. La cosa funziona con un codice PHP creato a mano ma è abbastanza pulito.

Mi chiedevo quale sarebbe stato il modo migliore per farlo?

  1. Realizzando qualcosa da solo, cercando di adattarmi all'architettura reale.

  2. Riscrivere buona parte di esso usando un framework (ad es. Symfony) che gestirà i18n per me?

Per l'opzione 1, dove devo archiviare i dati i18n? * .po, xliff, DB puro?

Ho pensato a un'alternativa: usare Symfony solo per la traduzione, ma impostare il controller per caricare il sito Web come è già. Veloce ma sporco. D'altra parte, ci consente di effettuare la prossima modifica, passando lentamente a Symfony completo: questo sito Web è davvero un buon candidato per questo.

Ma forse ci sono alcuni motori di traduzione autonomi che farebbero il lavoro meglio di un intero framework web. È un po 'come usare un bazooka per uccidere una mosca ...

È stato utile?

Soluzione

Esistono diversi modi per affrontarlo. Nessuno di loro "il modo migliore" e tutti con problemi a breve o lungo termine. La prima cosa da dire è che i siti multilingue non sono facili, i traduttori e le persone adorabili, ma sono difficili da lavorare e la maggior parte dei programmatori vede il problema solo come tecnico. C'è anche un'altra dimensione, al di fuori dell'ambito di questa risposta, se si sta traducendo o localizzando. Ciò implica guardare i costumi culturali del pubblico target e quindi personalizzare la lingua, lo stile, la disposizione, il colore, il carattere tipografico ecc., Per quella cultura. Infine, non utilizzare MT, Traduzione automatica, per nulla di grave o se deve essere accurato e, quando si acquisiscono traduttori, assicurarsi che stiano traducendo da una lingua straniera nella loro lingua madre, il che significa che comprendono tutte le sfumature della lingua di destinazione.

destro. Soluzioni. Sulla base del fatto che non si desidera riscrivere il sito, è sufficiente clonare il sito che si possiede e tradurre le copie nella lingua di destinazione. Supponendo che la base di codice sia stabile, è possibile utilizzare un VCS per gestire eventuali modifiche al codice. Puoi modificare singole parti del sito per adattarle alla lingua di destinazione, ad esempio il testo in francese è in media del 30% più grande rispetto al testo inglese equivalente, quindi l'utilizzo di un sito per fornire ciò significa che potresti (avrai) avere problemi di formattazione e dover scambiare un diversi file CSS dentro e fuori a seconda della lingua. Potrebbe sembrare un modo ingombrante per farlo, ma poi per quanto tempo esisteranno i siti? Il sovraccarico del management di farlo in questo modo potrebbe essere inferiore rispetto ad altre opzioni.

Secondo modo senza ricostruzione. Sostituisci tutto il contenuto del sito corrente con tag e poi inserisci la lingua diversa nelle tabelle di file o db, annusa la lingua desiderata dagli utenti (hai utenti registrati che possono fare una preferenza o vuoi ottenere il tag della lingua del browser, oppure è sarà URL dot-com punto-fr, punto-de che farà la scelta) e quindi sostituirà i tag con la lingua di destinazione. Quindi è necessario affrontare separatamente i problemi di dimensionamento e i problemi di immagine. Questa soluzione è efficace quando framework come Symfony e Zend implementano l10n.

Quindi potresti ricostruire con un framework o con gettext e possibilmente avere una soluzione più pulita ma ricorda che i framework sono stati progettati per risolvere altri problemi, non la traduzione e il componente di traduzione è entrato nel framework come soluzione parziale non completa.

Il grande problema con tutte le soluzioni è la manutenzione in corso. Perché non solo hai una base di codice ma anche basi di più lingue da mantenere. A meno che tutti in un'unica soluzione non siano davvero intelligenti ed efficaci, allora sarà difficile svolgere le attività in corso.

Altri suggerimenti

Lavora con i file delle lingue.

  1. Sostituisci ogni stringa di testo con una variabile
  2. Crea un file di lingua per lingua e in esso definisci ogni variabile con il testo corrispondente. (french.inc, dutch.inc ...)
  3. Includi il file giusto in ogni pagina.

Questo è per piccoli siti.

Se ingrandisci, sostituisci i file con un DB. :)

È importante notare che ci sono due passaggi prima di tradurre:

  1. Internazionalizzazione: ovvero consentire al tuo sito di gestire più lingue
  2. Localizzazione: include la traduzione dei tuoi testi (ottenuti nel passaggio 1) in ogni lingua che prevedi di supportare

Scopri di più su questo in Wikipedia .

Il passaggio 1 richiede di tenere conto del fatto che alcune lingue sono scritte da destra a sinistra (RTL) e caratteri non europei come giapponese o cinese. Se non hai intenzione di gestire queste lingue e questi caratteri, potrebbe essere più semplice.

Per questo tipo di situazione preferirei avere un file di lingua (in realtà tutti i file di lingua quante lingue che intendo supportare, nominandoli come langcode.php come in en.php o fr.php ) con una matrice associativa contenente tutti i testi utilizzati nel sito. La procedura sarebbe la seguente:

  1. Scansiona il tuo sito per ogni singolo testo che dovrebbe essere localizzato
  2. Per ogni pagina / sezione creerei un array $ lang ['sectionname'] []
  3. Per ogni testo creerei una $ lang ['sectionname'] ['textname']
  4. Vorrei creare una classe Lang.php che riceverebbe un parametro lang al momento dell'istanza ma avrebbe un valore predefinito nel caso in cui nessun lang sia ricevuto (questo metodo carica langcode.php a seconda del parametro o un valore predefinito a seconda della lingua preferita)
  5. La classe avrebbe un metodo setPage () che riceverà la pagina / sezione che verrà visualizzata
  6. La classe avrebbe un metodo show () che riceverebbe il testo da visualizzare ( show () sarebbe chiamato tutte le volte che i testi sono mostrati in un data pagina ... show () è una specie di wrapper per echo $ lang ['mypage'] ['mytext'] )

In questo modo potresti avere tutte le lingue che vuoi in un modo molto semplice. Potresti anche avere un amministratore di lingua in cui apri la pagina della lingua di base (in realtà leggi gli array in modo ricorsivo e li visualizzi in textareas) e puoi quindi " Salva con nome ... " un'altra lingua.

Uso un approccio simile in il mio sito . È solo una pagina, ma ho creato siti multipagina con questa idea.

Se hai contenuti inviati dagli utenti o qualche CMS piuttosto complicato, sarebbe una storia diversa. Potresti cercare framework compatibili con i18n (mi viene in mente Drupal).

Puoi guardare Zend_Translate , è piuttosto completo, ben documentato e la qualità complessiva del codice è ottima. Ti permette anche di usare un'API unificata per gettext, csv, db, file ini, array o qualunque cosa finisca per salvare le stringhe tradotte.

Inoltre, guarda / guarda questa discussione: Quali sono i buoni strumenti / framework per i18n di una base di codice php? . Sembra simile alla tua domanda.

Se è supportato il carattere multi-byte, potrebbe valere la pena di verificare le funzioni della stringa multibyte in PHP:

http://uk.php.net/manual/en/book .mbstring.php

Gestiranno meglio i caratteri multi-byte.

Uso il parametro hl e gettext combinando le traduzioni del motore già lì con il proprio .po che fa apparire nuove traduzioni e lingue quando engine o my django / gae esempio aggiunge:

{% get_current_language as LANGUAGE_CODE %}{{ LANGUAGE_CODE }}{% get_available_languages as LANGUAGES %}{% for LANGUAGE in LANGUAGES %}{% ifnotequal LANGUAGE_CODE LANGUAGE.0 %}{{ LANGUAGE.0 }}{% endifnotequal %}{% endfor %}

Quindi, trattenendo i duplicati e utilizzando completamente le traduzioni già esistenti, vengono visualizzati qui i nomi dei mesi arabi mancanti, ad esempio, per apparire direttamente quando il team del motore aggiunge o app

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