multilingua php

  • Creatore Discussione Creatore Discussione marcomg
  • Data di inizio Data di inizio

marcomg

Utente Attivo
19 Nov 2011
204
0
16
Ciao a tutti, avrei la necessità di stampare stringhe multilingua in php e magari anche di tradurle. Quale è la migliore soluzione per il multilungua?
Io sinceramente pensavo di mettere tanti file, uno per ogni lungua e includerlo alla bisonga. Esempio

file:'main.php'
PHP:
<?php
$language = 'it'; // Scelgo la lingua

// Includo il file per le traduzioni
require('languages/'.$language.'.php');

// Stampo la stringha che mi interessa
echo($string['greets_to_world']);
?>

file:'lenguages/it.php'
PHP:
<?php
string=array(
'greets_to_world' => 'Ciao mondo!',

'other' => 'altro'
);
?>

Cosa ne pensate? Credete ci sia una soluzione migliore?
 
ciao
nel mio sito faccio così
PHP:
<?php
//.....
require_once "cartella/lingue.php";
$language = 'it'; // Scelgo la lingua , nel mio caso proviene da una sessione che l'utente sceglie entrando
//stampo la stringa
echo $ciao[$language];
//.......
?>
nel file lingue.php ho l'elenco delle stringhe (es)
PHP:
<?php
$ciao['it']="ciao mondo";
$ciao['en']="greets to world";
$chiudi['it']="chiudi";
$chiudi['en']="close";
//ecc......
?>

quale sia il metodo migliore poi dipende
 
Dipende da cosa?
Io pensavo di mettere tutto in un array così da evitare problemi con le variabili. Poi se si mette tutto in un file non carico in ram troppe stringhe inutili? Tanto non uso più lingue contemporaneamente.
Ad esempio drupal utlizza i file .po per le lingue. Sai come funzionino?
 
I file .po sono, appunto, dei file gettext; è un formato utilizzato da diversi CMS, tra cui Drupal e WordPress. Puoi decidere di usare quello, oppure puoi usare il tuo metodo, in cui non trovo nulla di sbagliato. L'unico vantaggio forse è che per i file gettext ci sono degli editor appositi.
 
ciao
non conosco i .po (salvo il fiume), ma
Poi se si mette tutto in un file non carico in ram troppe stringhe inutili?
dipende da quello che devi fare. io faccio un file da includere, se servre, dedicato quindi per la pag XY includo quello che gli serve. poi se le stringhe sono poche non faccio nemmeno l'inclusione, ma le definisco nella pag stessa.
 
Se decidi di usare dei file PHP, comunque, la soluzione migliore è questa:
PHP:
<?php
define('LANGUAGE_PATH',     __DIR__ . '/languages');
define('LANGUAGE_DEFAULT', 'it');

$language = isset($_GET['language']) ? trim($_GET['language']) : LANGUAGE_DEFAULT;

if (!preg_match('/^([a-zA-Z0-9]{2})$/', $language) || !is_file(LANGUAGE_PATH . "/{$language}.php")) {
    $language = LANGUAGE_DEFAULT;
}

$lang = require_once LANGUAGE_PATH . "/{$language}.php";
E nei file di lingua:
PHP:
<?php
return array(
    'pagina_1' => array(
        'stringa_1' => 'valore_1',
    ),

    // ...
);
 
Sono molto indeciso tra i due metodi.
Il primo, quello dell'inclusione è quello che ho utilizzato fino adesso, ma visto che erano applicazioni web utilizzavo molto i template e pochissimo la stampa e quindi non ne ho sentita una grande necessità se non per la gestione degli errori.

Ora sto ideando un programma per la shell e lo sto facendo in php. Tutto quello che stampo lo farò tramite echo e quindi ho la necessità di un sistema facile da gestire e che sia il meno esoso possibile.

Voi sapete quali sono i pro e i contro di ciascun metodo? Sicuramente se drupal e wordpress hanno scelto i .po ci sarà un motivo. Chi programma quegli script sarà sicuramente molto più bravo di me ;)
 
Ho provato a fare uno script, ma continua a non funzionare. Non stampa le traduzioni! Vi posto in allegato il tutto. Dove sbaglio?
Il file è archiviato con 7zip, ma ho aggiunto l'estensione .txt poiché me ne era impedito il caricamento.
Vedi l'allegato gettext.7z.txt
 
I file .po li ho ottenturi tramite il comando
Codice:
marco@ACER:~$ cd ~/Scrivania/xgettext/
marco@ACER:~$ xgettext -n main.php
marco@ACER:~$ msgfmt messages.po

Li ho generati tramite l'apposito comando!
 

Discussioni simili