2015-04-08 4 views
1

J'essaie de définir les paramètres régionaux pt_BR dans mon application. Mais, pour une raison ou une autre, la configuration de mon format numérique est toujours dans le mauvais format.PHP setlocale existe mais est incorrect

J'ai essayé de définir les paramètres régionaux correct de tant de façons:

setlocale(LC_ALL, 'pt_BR'); 
setlocale(LC_ALL, 'pt_BR.utf-8', 'pt_BR', 'portuguese', 'pt-br'); 
setlocale(LC_ALL, 'pt_BR.utf-8'); 
setlocale(LC_ALL, 'portuguese'); 

Mais, pour chacun d'eux, je le decimal_point avec un point. La valeur correcte pour cela, en portugais, est une virgule. C'est le même résultat:

array (size=18) 
    'decimal_point' => string '.' (length=1) 
    'thousands_sep' => string '' (length=0) 
    'int_curr_symbol' => string '' (length=0) 
    'currency_symbol' => string '' (length=0) 
    'mon_decimal_point' => string '' (length=0) 
    'mon_thousands_sep' => string '' (length=0) 
    'positive_sign' => string '' (length=0) 
    'negative_sign' => string '' (length=0) 
    'int_frac_digits' => int 127 
    'frac_digits' => int 127 
    'p_cs_precedes' => int 127 
    'p_sep_by_space' => int 127 
    'n_cs_precedes' => int 127 
    'n_sep_by_space' => int 127 
    'p_sign_posn' => int 127 
    'n_sign_posn' => int 127 
    'grouping' => 
    array (size=0) 
     empty 
    'mon_grouping' => 
    array (size=0) 
     empty 

Cela se produit dans mon environnement local et d'autres ordinateurs Windows que j'ai testés. Mais dans d'autres Windows cela fonctionne. Tous les ordinateurs fonctionnant sous Windows 7. J'ai également testé dans un environnement UNIX et fonctionne bien. Le problème est juste pour certaines installations de Windows.

Les paramètres régionaux existent mais sont incorrects pour une raison quelconque.

Quelqu'un a une idée pour m'aider? J'aimerais comprendre pourquoi cela se passe.

Remerciements

Répondre

0

Windows et les unités unix utilisent des codes de paramètres régionaux différents. Certains paramètres régionaux peuvent également ne pas être installés sur un système. Cela rend la fonction setlocale difficilement portable.

Manuel pour setlocale met en garde contre des raisons d'échec possibles:

retourne la nouvelle configuration locale, ou FALSE si la fonctionnalité locale n'est pas implémentée sur votre plate-forme, les paramètres régionaux spécifié ne existe pas ou le nom de la catégorie est invalide.

Vous devez vérifier la valeur de retour et essayer une solution de contournement au cas où les paramètres régionaux ne sont pas disponibles.

Mise à jour

En ce qui concerne votre question, quand setlocale appel réussit, mais n'a aucun effet sur les paramètres régionaux, je trouve ce bug report avec won't-fix statut. Dans les commentaires de bug, la fonction est généralement décrite comme imprévisible. Une des raisons possibles de l'échec est qu'il n'est pas sûr de fil. Il existe également un autre bug report similaire marqué comme doublon. Intéressant que les deux journalistes listent Windows 7 comme leur plate-forme.

+0

Merci pour la réponse. Mais en fait, mon setlocale est OK. Le résultat est valide, pas FALSE. Dans tous les cas, le retour est "Portuguese_Brazil.1252" avec est correct. Mais mon point décimal continue faux. –

+0

Je vois. Pouvez-vous montrer ce que 'echo setlocale (LC_ALL, 0);' imprime après le réglage de votre locale? Je me demande si toutes les catégories sont correctement définies. – baf

+0

Le code imprime 'Portuguese_Brazil.1252'. –