Localizzazione in php, best practice o approccio?

10

Sto localizzando la mia applicazione php. Ho un dilemma sulla scelta del metodo migliore per realizzare lo stesso.

Metodo 1: Attualmente sto memorizzando le parole da localizzare in una matrice in un file php

<?php

$values = array (
                        'welcome' => 'bienvenida'
                ); 

?>

Sto usando una funzione per estrarre e restituire ogni parola in base al requisito

Metodo 2: dovrei usare un file txt che memorizza una stringa dello stesso?

<?php
$welcome = 'bienvenida'; 
?>

La mia domanda è quale sia un metodo migliore, in termini di velocità e impegno per sviluppare lo stesso e perché?

Modifica: mi piacerebbe sapere quale metodo su due è più veloce nel rispondere e perché dovrebbe essere? inoltre, qualsiasi miglioramento sul codice sopra sarebbe apprezzato !!

    
posta sree 09.04.2012 - 09:11
fonte

2 risposte

10

PHP offre grandi possibilità integrate per la localizzazione. Il modo più comune sembra essere gettext - questo tutorial mostra come è usato.

Dal PHP 5.3 c'è anche intl che offre molte più funzionalità (per formattare i numeri, date e valute in base alle impostazioni internazionali, ad esempio).

    
risposta data 09.04.2012 - 12:32
fonte
10

Prima di tutto, gettext è un buon modo per andare, quindi non ignorare se all'inizio non sembra facile; Tuttavia ci sono anche altre opzioni utili da sapere. Prima di spiegare, diamo un'occhiata prima ai tuoi suggerimenti:

Nel tuo array -way di questo, hai una soluzione praticamente semplice. La cosa buona è che puoi memorizzare le tue traduzioni in una memoria dati, quindi caricarle nel tuo script PHP come una matrice, e il gioco è fatto. Tuttavia, se si desidera archiviare staticamente il proprio array in un file PHP, la modifica richiede un programmatore PHP o un utente exprienced che abbia familiarità con la sintassi PHP, solo per modificare il file b) sincronizzando anche quattro o cinque file di lingua diversi potrebbe essere abbastanza fastidioso e soggetto a errori.

Quello che devi considerare qui è: come aggiungere in seguito nuovi elementi al file della lingua? Posso lasciarlo a un traduttore o ci dovrebbe essere un programmatore PHP?

Il tuo variable -way di farlo non è pratico. Perché? Presumo che avrai almeno un paio di funzioni nella tua applicazione, giusto? Quindi devi passare tutte queste variabili quando chiami la funzione o devi global di esse. Se pensi di avere più di dieci variabili come questa, ti sconsiglio vivamente di farlo. Potrebbero esserci anche conflitti tra nomi: è possibile sovrascrivere il valore di un'altra variabile con lo stesso nome, tuttavia ciò potrebbe essere risolto aggiungendo un prefisso anche semplice come un trattino basso, quindi ad esempio $_welcome per esempio . Ad ogni modo, se fossi in te non ci penserei nemmeno; Non farlo.

Un buon modo per farlo è definire Costanti con un prefisso. Ad esempio, nel tuo en.lang.php avrai qualcosa come define( 'LABEL_WELCOME', 'Welcome' ); e nel tuo no.lang.php avrai define ( 'LABEL_WELCOME', 'Velkommen' ); . L'aspetto positivo dell'utilizzo costante anziché di variabili è che sono sempre disponibili nel tuo script. Quindi non è necessario iniettarli o globalizzarli. Rispetto agli array e alle variabili, sono più veloci grazie al modo in cui vengono gestiti da PHP: occupano meno spazio nella memoria. Lo svantaggio è che non è possibile passarli al traduttore, quindi ancora una volta hai bisogno di uno sviluppatore PHP. Anche la sincronizzazione tra i file potrebbe essere un po 'di dolore.

L'altra opzione è avere una Funzione o Classe / Metodo per recuperare la traduzione. Sarà meno efficiente, ma non credo che tu abbia bisogno di quel tipo di micro-ottimizzazione, ma il vantaggio ulteriore è che puoi applicare una logica personalizzata mentre recuperi la traduzione. Ad esempio, immagina che un giorno il tuo amato project manager venga a chiederti se potresti nascondere tutti quei testi in maiuscolo. Non puoi rifiutarti di farlo, quindi avere una funzione nel mezzo potrebbe aiutarti molto quando devi applicare / modificare un pattern a tutte le tue traduzioni.

Per riassociare:

  1. Pensa a come i traduttori possono usarlo e trovare una soluzione KISS funzionante per loro.

  2. Pensa a come puoi rimanere sincronizzato tra lingue diverse.

  3. Pensa se potrebbe essere necessaria la stessa traduzione, diciamo per l'app per dispositivi mobili. Una soluzione multipiattaforma potrebbe farti risparmiare tempo. Non ignorare JSON e database ordinari.

  4. Pensa a come puoi applicare / modificare la logica quando recuperi le traduzioni.

  5. Hai dimenticato la performance. Il 99,9% delle volte non si arriva così lontano a fare micro-ottimizzazione come Costante contro Variabili contro Funzione Chiamate . Presumo che il tuo tempo come sviluppatore / staff sia più costoso piuttosto che un tempo di processore.

Aggiornamento # 1

Mio Dio, posto una risposta per una domanda di un anno. Perché nessuno sta dicendo qualcosa qui? Abbiamo bisogno di avvisi per questi casi.

Aggiornamento n. 2

Sul lato destro dice che è una domanda vecchia di un anno; Comunque è stato chiesto due anni fa! Tutto è fuorviante qui!

    
risposta data 08.04.2014 - 18:17
fonte

Leggi altre domande sui tag