Проблема с локалью.

Sanja

Новичок
Проблема с локалью.

Как правильно установить локаль utf8 ?
Вариант setlocale(LC_TIME,"ru_RU.utf8"); никчему не приводит.
OC Win2000
 

Vetal

Новичок
насколько я знаю под виндой эта комнда ваще не работает
 

Sanja

Новичок
setlocale не работает? хорошо еще раз проверь. setlocale(LC_TIME,"ru"); намано работает,а вот в таком варианте как я спросил не хотит работать.
 

Vetal

Новичок
как я сказал, я могу и ошибаться
обычно работаю под линухом
 

SiMM

Новичок
> Как правильно установить локаль utf8 ?
А зачем?
[m]mbstring[/m]
 

tony2001

TeaM PHPClub
элементарно.
по шагам:
1) [m]setlocale[/m]
2) поиск на странице подстроки "win"
3) нашли:
Tip: Windows users will find useful information about locale strings at Microsoft's MSDNwebsite. Supported language strings can be found at http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_language_strings.asp and supported country/region strings at http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_country_strings.asp. Windows systems support the three letter codes for country/region specified by ISO 3166-Alpha-3, which can be found at this Unicode website .
4) идём по УРЛам и узнаём, что под виндой нет "ru_RU", есть "rus" и "russian".

точно так же можно решать любой другой вопрос.
 

Max_kmv

Новичок
Автор оригинала: tony2001
элементарно.
по шагам:
...
Спасибо Тони конечно за совет, но то, так как ты предлагаешь проблему пытались решить в течении дня. Твое решение не работает - по какой то из причин ни директива
setlocale(LC_TIME,"rus.UTF-8");
ни
setlocale(LC_TIME,"russian.UTF-8");
не заставляют strftime() отображать результат на русском.

Возможно, с UTF-8 нужны какие-то специфические настройки для PHP и/или винды?
 

baev

‹°°¬•
Команда форума
Max_kmv
Под winXP -- «Панель управления -> Дата, время, язык и региональные стандарты -> Язык и региональные стандарты -> Дополнительно»

Там ищите свою кодовую страницу -- то, что нужно вместо "UTF-8" вставить.

Типа:
PHP:
 setlocale(LC_TIME,"russian.65001");
 

Sanja

Новичок
Типа:
PHP:
 setlocale(LC_TIME,"russian.65001");
Можно и так, но результат все тот же.

-~{}~ 04.10.05 15:34:

Все получилось! Всем спасибо, кто пытался помочь. Решили проблему с помощью функции iconv.
PHP:
iconv("cp1251", "UTF-8", strftime("%d %b. %Y %H:%M", $timestamp))
Хотя всеравно странно почему при явном указании локали utf8- не работает ?
 

440hz

php.ru
Sanja
тебе же дали решение именно так, как ты просил. 8) все работает

PHP:
<?
print "[".setlocale(LC_ALL, "Russian_Russia.65001")."]<br>";
echo strftime("%A %d %b. %Y %H:%M");
?>
[LC_COLLATE=Russian_Russia.65001; LC_CTYPE=Russian_Russia.1251; LC_MONETARY=Russian_Russia.65001; LC_NUMERIC=Russian_Russia.65001; LC_TIME=Russian_Russia.65001]
вторник 04 окт. 2005 15:53
 

Max_kmv

Новичок
странно, тогда в чем может быть причина того, что у меня все одно выдается на
PHP:
<?
print "[".setlocale(LC_ALL, "Russian_Russia.65001")."]<br>";
echo strftime("%A %d %b. %Y %H:%M");
?>
следующее

[LC_COLLATE=Russian_Russia.65001;LC_CTYPE=English_United States.1252;LC_MONETARY=Russian_Russia.65001;LC_NUMERIC=Russian_Russia.65001;LC_TIME=Russian_Russia.65001]
?&#55862;&#2096;7 &#60082;. 2005 10:35

и начинает показывать нормально только если сделать

PHP:
<?
print "[".setlocale(LC_ALL, "Russian_Russia.65001")."]<br>";
echo iconv("cp1251", "UTF-8", strftime("%A %d %b. %Y %H:%M"));
?>
-~{}~ 07.10.05 11:47:

Походу, просто смены локали недостаточно. Надо как-то еще сделать, что бы strftime() генерировала результат в UTF-8.
440hz можно у тебя узнать, какой установлен default_charset

-~{}~ 07.10.05 12:18:

Что-то вообще ничего не понимаю...
... и почему после установки локали LC_ALL на Russian_Russia.65001, LC_CTYPE все равно показывает LC_CTYPE=English_United States.1252
 

440hz

php.ru
Автор оригинала: Max_kmv
Что-то вообще ничего не понимаю...
... и почему после установки локали LC_ALL на Russian_Russia.65001, LC_CTYPE все равно показывает LC_CTYPE=English_United States.1252
бывает когда рееестр правится для фотошопа. единственное что могу предложить.
 

Max_kmv

Новичок
Да, действительно изменения для фотошопа в реестре были. Но после установки в дефолтное значение, ситуация не изменилась :(

и по-прежнему после установки локали показывает
LC_CTYPE=English_United States.1252
:(
Для 440hz : возможно тут еще вот в чем дело... у тебя русская винда или английская? И еще, скажи пожалуйста, какое значение параметра default_charset установлено в твоем php.ini ?
 

Profic

just Profic (PHP5 BetaTeam)
E:\>php -r "echo str_replace(';', \"\n\", setlocale(LC_ALL, 'rus_RUS.65001'));"
LC_COLLATE=Russian_Russia.65001
LC_CTYPE=Russian_Russia.1251
LC_MONETARY=Russian_Russia.65001
LC_NUMERIC=Russian_Russia.65001
LC_TIME=Russian_Russia.65001
E:\>more test6.cpp
PHP:
#include <iostream>
#include <clocale>

int main() {
        const char* loc = NULL;

        loc = setlocale(LC_ALL, "rus_RUS.65001");
        std::cout << (loc ? loc : "NULL") << "\n";

        loc = setlocale(LC_CTYPE, "rus_RUS.65001");
        std::cout << (loc ? loc : "NULL") << "\n";

        loc = setlocale(LC_CTYPE, "rus_RUS.1251");
        std::cout << (loc ? loc : "NULL") << "\n";
}
E:\>g++ test6.cpp

E:\>a
LC_COLLATE=Russian_Russia.65001;
LC_CTYPE=C;
LC_MONETARY=Russian_Russia.65001;
LC_NUMERIC=Russian_Russia.65001;
LC_TIME=Russian_Russia.65001
NULL
Russian_Russia.1251
E:\>
Сдается мне, что msvcrt просто не умеет делать CTYPE для UTF-8.
 

Max_kmv

Новичок
Автор оригинала: Profic
Сдается мне, что msvcrt просто не умеет делать CTYPE для UTF-8.
Мда... Но, все же главный вопрос таки остается - почему не выводится после смены локали на russian_Russian.UTF-8 дата на русском. так как показал 440hz.
Может ли на это как то влиять то что английская винда?
 

440hz

php.ru
Автор оригинала: Max_kmv
Мда... Но, все же главный вопрос таки остается - почему не выводится после смены локали на russian_Russian.UTF-8 дата на русском. так как показал 440hz.
зы. ощущение, что выводит правильно, но не в UTF-8, а в 1251. вечером поковыряю.
 

Develar

Новичок
Можете счесть меня диггером, но столкнулся с этим же. Не понимает Windows rus_RUS.65001. То есть локаль меняет, но кодировку оставляет cp1251.

Это ошибка в ДНК системы или все же есть способ работы программы в юникоде с регулярными выражениями на windows без извращений типа iconv?
 
Сверху