2012-10-20 16 views
5

Phalcon fornisce servizi per siti Web multilingue?Funzione di traduzione in Phalcon

Qual è la migliore procedura per lo sviluppo di un sito basato su falco MVC? Come devo implementare il livello di visualizzazione?

risposta

4

Questa applicazione di esempio (https://github.com/phalcon/php-site) implementa la conversione utilizzando Phalcon.

+0

Come posso utilizzare gettext nell'architettura Phalcon? – PHPst

+0

Lasciatemi creare un esempio per te – twistedxtra

+0

Tuttavia, ricorda che gettext non è thread-safe, se stai eseguendo l'applicazione con Apache potresti avere problemi – twistedxtra

2

Phalcon non offre funzionalità I18n. Esiste un'estensione PECL che offre questo tipo di funzionalità, denominata intl (vedere manual).

Tuttavia, se si è per lo più interessati a presentare il sito web in diverse lingue, è possibile utilizzare il componente

\Phalcon\Translate\Adapter\NativeArray 

. Questo componente utilizza un array di chiavi/valori che contengono le stringhe che conoscono la lingua. Per esempio si può utilizzare questo nella configurazione:

$trans_config = array(
        'en' => array(
         'bye'  => 'Good Bye', 
         'song-key' => 'This song is %song% (%artist%)', 
        ), 
        'es' => array(
         'bye'  => 'Adiós', 
         'song-key' => 'La canción es %song% (%artist%)', 
        ), 
       ); 

Un test per dimostrare l'utilizzo di cui sopra è:

public function testVariableSubstitutionTwoEnglish() 
{ 
    $language = $trans_config['en']; 
    $params  = array('content' => $language); 
    $translator = new \Phalcon\Translate\Adapter\NativeArray($params); 

    $vars  = array(
     'song' => 'Dust in the wind', 
     'artist' => 'Kansas', 
    ); 
    $expected = 'This song is Dust in the wind (Kansas)'; 
    $actual = $translator->_('song-key', $vars); 

    $this->assertEquals(
     $expected, 
     $actual, 
     'Translator does not translate English correctly - many parameters' 
    ); 
} 

È possibile che questo dimostra quanto è possibile ottenere i messaggi con variabili segnaposto tradotto. Per ottenere semplicemente una stringa in una lingua diversa, basta chiamare lo _() sul traduttore con la chiave pertinente e non passare nessuna variabile.

MODIFICA Nella vista puoi lavorare come preferisci. È possibile impostare variabili che vengono visualizzate nel livello di visualizzazione o passare l'oggetto di traduzione ed eseguire la traduzione lì. Sta a te.

HTH

+0

Grazie, quale altro adattatore pensate di implementare? Creare e usare tali array è un po 'prolisso, inoltre sarebbe stato meglio se '_ (' x ', array (' 1 ',' 2 '))' potesse essere usato in aggiunta a '_ (' x ', array (' un '=>' 1' , 'b' => '2')) '. È un buon lavoro creare un servizio a cui è possibile accedere tramite viste? – PHPst

+0

Quali sono i pro e i contro dell'uso di '\ Phalcon \ Translate \ Adapter \ NativeArray' anziché di Gettext? – PHPst

+0

Re Gettext molto piccolo, per lo più basato su prestazioni e preferenze. Le prestazioni in realtà non sono un problema enorme. –

2

Penso che la soluzione migliore sia usare Phalcon Gettext Adapter. Il vantaggio più importante di Gettext è la gestione dei plurali.