Автор Тема: Вопрос про locale  (Прочитано 4645 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Павел

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 19
  • +0/-0
  • 0
    • Просмотр профиля
Вопрос про locale
« : 28 Августа 2001, 13:27:49 »
Я делаю
use POSIX qw( locale_h );

setlocale( LC_ALL, \\\'ru_RU.win1251\\\' );

И никакого эффекта, например, не работает ucfirst, lc и т.д.

Почему так происходит, сервер не поддерживает локэйлы???

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Вопрос про locale
« Ответ #1 : 29 Августа 2001, 10:13:33 »
Цитировать
Я делаю
use POSIX qw( locale_h );

setlocale( LC_ALL, \\\'ru_RU.win1251\\\' );

И никакого эффекта, например, не работает ucfirst, lc и т.д.

Почему так происходит, сервер не поддерживает локэйлы???

system(\\"locale\\",\\"-a\\");
2B OR NOT 2B = FF

Оффлайн Павел

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 19
  • +0/-0
  • 0
    • Просмотр профиля
Вопрос про locale
« Ответ #2 : 29 Августа 2001, 12:57:47 »
Ну хорошо, пусть system(\\\'locale\\\', \\\'-a\\\') работает. Но почему не работает мой вариант, ведь он должен же работать...:(

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Вопрос про locale
« Ответ #3 : 29 Августа 2001, 14:01:52 »
Цитировать
Ну хорошо, пусть system(\\\'locale\\\', \\\'-a\\\') работает. Но почему не работает мой вариант, ведь он должен же работать...:(

:))
system(\\\'locale\\\', \\\'-a\\\') покажет установленные на сервере локали.
Вы уверены, что ru_RU.win1251 есть среди них?
2B OR NOT 2B = FF

Оффлайн Павел

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 19
  • +0/-0
  • 0
    • Просмотр профиля
Вопрос про locale
« Ответ #4 : 30 Августа 2001, 13:11:07 »
И каким образом system должна показать мне присутствующие локэйлы???

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Вопрос про locale
« Ответ #5 : 30 Августа 2001, 13:36:59 »
Цитировать
И каким образом system должна показать мне присутствующие локэйлы???

print system(\\\'locale\\\', \\\'-a\\\');
Зависит он настроек сервера, но есть вероятность, что покажет в виде списка.:)
Если нет, то из shell: locale -a, если шела нет, то пытай админа каленым железом.:)
2B OR NOT 2B = FF

Оффлайн Павел

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 19
  • +0/-0
  • 0
    • Просмотр профиля
Вопрос про locale
« Ответ #6 : 30 Августа 2001, 13:44:24 »
print system( \\\'locale\\\', \\\'-a\\\' ) я естественно сделал сразу, мне вывелось 256. Мне это ни о чем не говорит. Через shell, например, у провайдер такой команды просто нет. Админа под рукой как назло тоже нет.:(

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Вопрос про locale
« Ответ #7 : 30 Августа 2001, 14:25:36 »
Попробуй так:

#!/usr/bin/perl
print \\"Content-type: text/plain\\\\n\\\\n\\";
open(SYS,\\"locale -a |\\");
while()
{
print ;
}
close(SYS);
2B OR NOT 2B = FF

Оффлайн Fluke

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 62
  • +0/-0
  • 0
    • Просмотр профиля
Вопрос про locale
« Ответ #8 : 30 Августа 2001, 22:12:08 »
Есть другой путь. Если не хочешь куртыкаться с локалями, а это дело нудное, попробуй переписать необходимые тебе функции. Вот пример функции uc():

#!/usr/bin/perl -w

$key = \\"моя собственная функция UPPER CASE\\";

@upper = (\\\'А\\\',\\\'Б\\\',\\\'В\\\',\\\'Г\\\',\\\'Д\\\',\\\'Е\\\',\\\'Ё\\\',\\\'Ж\\\',\\\'З\\\',\\\'И\\\',\\\'Й\\\',\\\'К\\\',\\\'Л\\\',\\\'М\\\',\\\'Н\\\',\\\'О\\\',\\\'П\\\',\\\'Р\\\',\\\'С\\\',\\\'Т\\\',\\\'У\\\',\\\'Ф\\\',\\\'Х\\\',\\\'Ц\\\',\\\'Ч\\\',\\\'Ш\\\',\\\'Щ\\\',\\\'Ь\\\',\\\'Ы\\\',\\\'Ъ\\\',\\\'Э\\\',\\\'Ю\\\',\\\'Я\\\');
@lower = (\\\'а\\\',\\\'б\\\',\\\'в\\\',\\\'г\\\',\\\'д\\\',\\\'е\\\',\\\'ё\\\',\\\'ж\\\',\\\'з\\\',\\\'и\\\',\\\'й\\\',\\\'к\\\',\\\'л\\\',\\\'м\\\',\\\'н\\\',\\\'о\\\',\\\'п\\\',\\\'р\\\',\\\'с\\\',\\\'т\\\',\\\'у\\\',\\\'ф\\\',\\\'х\\\',\\\'ц\\\',\\\'ч\\\',\\\'ш\\\',\\\'щ\\\',\\\'ь\\\',\\\'ы\\\',\\\'ъ\\\',\\\'э\\\',\\\'ю\\\',\\\'я\\\');

foreach $i (0..32)
   {$key =~ s#$lower[$i]#$upper[$i]#g;}


print $key;

exit(0);

Аналогично пишется lc(). Ну а с lcfirst и т. д. попробуй разобраться сам.

С уважением Fluke.

Оффлайн Павел

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 19
  • +0/-0
  • 0
    • Просмотр профиля
Вопрос про locale
« Ответ #9 : 31 Августа 2001, 13:23:13 »
Уважаемый, Fluke. Именно так я сразу и сделал:D Просто было интересно разобраться с локэйлами

Оффлайн Fluke

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 62
  • +0/-0
  • 0
    • Просмотр профиля
Вопрос про locale
« Ответ #10 : 01 Сентября 2001, 18:32:01 »
Уважаемый Павел,
Спасибо за ответ.
Не хочется выглядеть снобом, но locale произносится и пишется как локаль, а не локейл (словарь Webster\\\'а).

Кстати модификатор i к командам типа m/../../ и s/../../ тоже не работает без локалей, а как его переписать я не знаю.

С уважением Fluke.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28