Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Problema con parse_ini_file()

    Ciao a tutti,
    al fine di creare un sito multilingua ho creato una funzione che riceve in input la stringa da tradurre ed il codice della lingua, a cui corrisponde uno specifico file INI. La traduzione è effettuata attraverso la funzione parse_ini_file(), la quale cerca la stringa corrispondente nel file INI indicato come argomento e la traduce con il rispettivo valore assegnato.
    Funziona quasi tutto alla perfezione, se non per il fatto che l'argomento della funzione parse_ini_file() non cambia mai a meno che non venga ricaricata la pagina.

    Codice PHP:
    function localize($phrase,$code
    {
        static 
    $translations NULL;
        if (
    is_null($translations))
        {
            
    $lang_file 'country/'.$code.'.ini';
            
    $translations parse_ini_file($lang_file);
        }
        return 
    $translations[$phrase];

    Il problema è che la variabile $lang_file viene settata inizialmente la prima volta che chiamo la funzione ma poi non cambia mai, com'è possibile? Se la pagina contiene stringhe in un'unica lingua non ci sono problemi ma se volessi, come in questo caso, una parola in un'altra lingua, non riesco ad ottenerla.

  2. #2

    Re: Problema con parse_ini_file()

    Originariamente inviato da breathless84
    ...Funziona quasi tutto alla perfezione, se non per il fatto che l'argomento della funzione parse_ini_file() non cambia mai a meno che non venga ricaricata la pagina...
    Il comportamento è del tutto logico in quanto PHP è un linguaggio lato server per cui quando viene visualizzata la pagina nel browser il codice PHP è stato già eseguito. Se vuoi un comportamento dinamico senza dover ricaricare la pagina devi utilizzare Ajax.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Scusami, forse non mi sono spiegato bene.

    Io intendo dire che se, dopo aver definito la funzione localize, nella pagina scrivo:

    Codice PHP:
    echo localize("word-tag","it");
    echo 
    localize("word-tag","en"); 
    "it" sta per italiano ed "en" per inglese. In questo caso ottengo la prima stringa in italiano e la seconda anche, anziché ottenerla in inglese. Questo perché parse_ini_file() utilizza sempre lo stesso argomento senza cambiarlo. Non sembra un bug?

  4. #4
    E' così perchè utilizzi una variabile statica:

    Codice PHP:
    static $translations NULL
    quindi la seconda volta che invochi la funzione localize() essa sarà già valorizzata ( != NULL ) per cui non entra nell'if. Togli l'attributo static.

    static
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Grande! Grazie mille, avrei dovuto arrivarci da solo. =)

  6. #6
    L'attributo static è di grande utilità se utilizzato nel giusto contesto, ma bisogna prestarci attenzione.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.