2013-05-28 8 views
0

Недавно я столкнулся с очень интригующей проблемой. У меня есть следующий код на веб-сайте, чтобы сгенерировать число, состоящее из 10 цифр, за которым следует период (.), За которым следует от 2 до 4 цифр. Я также использую функцию gettext для перевода страницы на 2 других разных языка.PHP-цифровой разделитель, setlocale

<?php 
     $lang = "en_UK"; 
     putenv("LC_ALL=$lang"); 
     setlocale(LC_ALL, $lang); 
     bindtextdomain("messages", "locale"); 
     bind_textdomain_codeset('messages', 'UTF-8'); 
     textdomain("messages"); 

     list($usec, $sec) = explode(" ",microtime()); 
     $my_number = ((float)$usec + (float)$sec + (float)rand(1, 100000000)); 
?> 
     <form method ="POST" action=""> 
      <input type="hidden" value="<?php echo $my_number; ?>"/> 
      <input type="submit"/> 
     </form> 

Пока все хорошо. Когда $lang равно ru_UK, я получаю то, в чем я нуждаюсь (1234567891.1234).

Но если $lang равно it_IT или de_DE, то $my_number меняет формат до 10 цифр, а затем COMMA, с последующим 2-х до 4 цифр (1234567891,1234).

Кто-нибудь теперь, почему это происходит ??? Спасибо большое :)

ответ

0

В разных странах существуют разные соглашения о том, как писать цифры. setlocale изменяет соглашения, используемые вашей программой.

+0

Ну, это все объясняет. Большое спасибо!!!! Насколько вам известно ... есть ли способ избежать этого конкретного поведения, не сходя с ума? :) – iosononando

+0

@iosononando: Вам может потребоваться найти или задать другой вопрос. Я не работаю на PHP и не могу посоветовать использовать несколько локалей в PHP. –

+0

Достаточно справедливо Эрик. На этот раз я рассмотрю проблему. Еще раз спасибо! – iosononando

Смежные вопросы