-
Funzione putenv()
Salve, ho necessità di utilizzare la funzione putenv() per il multilingua, non sembra funzionare (il codice
Codice:
if (! putenv("LC_ALL=it_IT")) echo "putenv() ERROR";
restituisce errore. La funzione è disabilitata nel php.ini? Si può abilitare per utilizzare le funzioni PHP di traduzione tipo _() e dgettext()?
Grazie
-
Il modo corretto per WordPress è il doc online. https://developer.wordpress.org/reference/functions/__/
È vero che la funzione putenv è disabilitata ma non ti occorre, altresì se utilizzi codice da (guide, tema, plugin, widget) ove esiste il codice nativo di WordPress non ti occorre.
https://developer.wordpress.org/them...tionalization/
https://developer.wordpress.org/plug...e-your-plugin/
Dal tuo motore di ricerca con il termine "setting text domain for wordpress"
-
Salve grazie ma non utilizzo WordPress, se la funzione è disabilitata occorre implementare qualcosa di diverso per il multi lingua. Sarebbe invece possibile abilitarla limitando il solo setting della variabile d’ambiente per la lingua locale?
-
Poi forzare con https://www.php.net/manual/en/function.setlocale.php ma è un discorso complesso (varia tra versione e versione, sistema operativo o se Windows o Unix, se versione uft-8 o altro). gettext() o il suo alias carattere di sottolineatura _() funziona.
È un server condiviso non è possibile impostare quel tipo di finzione.
-
@darbula risolto, già usavo setlocale() per hosting Linux (putenv() è per hosting Windows e viene usato per compatibilità) in uno script di test era tutto ok:
Codice:
setlocale() ok: it_IT
putenv() error
bindtextdomain() system ok
bind_textdomain_codeset() system ok
bind_textdomain() custom ok
bind_textdomain_codeset() custom ok
textdomain() system ok
gettext() system it_IT - Related links -> Link correlati
dgettext() custom it_IT - doc file -> download
il problema era nell'impostazione della variabile LC_ALL in setlocale(): prima era con doppio apice, ora deve essere senza (e non è l'unica eccezione di malfuzionamento di setlocale())
Codice:
setlocale(LC_ALL,$locale_dir);
Grazie per il supporto
-
Non è malfunzionamento ma la funzione setlocale può essere anche unica (varia) tra versioni php, o sistemi o altro cose installate.
Per esempio potrebbe accettare it_IT.uft8 ma non it_IT per questo ti dicevo è complicato. (Giustamente nei server altervista e per la versione specifica hanno sempre lo stesso valore e comportamento). Però il difficile è creare codice portatile ricreando da zero poiché non utilizzi framework (o CMS o script già preparati).
Altresi si ricorda che con la funzione setlocale non sempre è garantito lo stesso comportamento per l'esecuzione del codice php. Per maggiori dettagli leggi il doc online.
Prima era chiamato LANG, poi LANGUAGE etc.
Per motivi di sicurezza non è possibile impostare arbitrariamente i valori del php.ini fanno eccezione solo la lista bianca concessa in forma diretta da altervista. http://it.help.altervista.org/w/Conf...ta_(.htaccess)