Язык русский php как установить

setlocale

Альтернативная сигнатура (не поддерживается с именованными аргументами):

Устанавливает настройки локали.

Информация о локали модифицируется во всем процессе, а не по каждому потоку отдельно. Если вы используете PHP на многопоточном сервере, вы можете обнаружить неожиданные изменения в настройках локали во время выполнения скриптов, никогда и не вызывавших setlocale() . Это происходит из-за того, что другие скрипты, запущенные в параллельных потоках данного процесса, в то же самое время поменяли настройки локали для всего процесса с помощью setlocale() . В Windows информация о локали поддерживается для каждого потока, начиная с PHP 7.0.5.

Список параметров

  • LC_ALL — все нижеперечисленное
  • LC_COLLATE — функции сравнения строк, смотрите strcoll()
  • LC_CTYPE — функции преобразования и классификации строк, например ctype_alpha()
  • LC_MONETARY — для функции localeconv()
  • LC_NUMERIC — задаёт символ десятичного разделения (смотрите также localeconv() )
  • LC_TIME — форматирование даты/времени функцией strftime()
  • LC_MESSAGES — для системных сообщений (доступна, если PHP был скомпилирован с поддержкой libintl )

Если в качестве locales передана пустая строка «» или null , имена локалей будут взяты из одноимённых переменных окружения или переменной с именем «LANG».

Если в качестве locales передан «0» , локаль изменена не будет, а будет возвращено текущее значение.

Если в качестве locales передан массив, или после этого аргумента следуют дополнительные аргументы, функция будет использовать элементы массива или аргументы по порядку в качестве имён локали до тех пор, пока установка локали не будет успешной. Это удобно, если одна и та же локаль имеет разное имя в различных системах, или для создания запасного варианта при отсутствии какой-либо локали в системе.

Необязательные аргументы в виде строк или массивов для установки настроек локали до первой успешной попытки.

Каждый элемент массива пытается установить новую локаль до первой успешной попытки. Это полезно, если локаль известна под разными именами в разных системах или для обеспечения запасного варианта для возможно недоступного языкового стандарта.

Замечание:

На Windows setlocale(LC_ALL, ») устанавливает имена локалей из системных региональных/языковых настроек (доступных через Панель Управления).

Возвращаемые значения

Возвращает имя вновь установленной локали или false , если система не поддерживает установку локали, указанная локаль не существует или передано недопустимое имя категории.

Недопустимое имя категории также вызывает предупреждение. Имена локалей и категорий описаны в » RFC 1766 и » ISO 639. Разные системы имеют различные схемы именования локалей.

Замечание:

Возвращаемое функцией setlocale() значение зависит от системы, на которой запущен PHP. Она возвращает точно то же значение, что и системная функция setlocale .

Примеры

Пример #1 Примеры использования setlocale()

Читайте также:  Difference between collections and collection in java

/* Установка голландской локали */
setlocale ( LC_ALL , ‘nl_NL’ );

/* выводит: vrijdag 22 december 1978 */
echo strftime ( «%A %e %B %Y» , mktime ( 0 , 0 , 0 , 12 , 22 , 1978 ));

/* попытка использовать различные локали для немецкого языка */
$loc_de = setlocale ( LC_ALL , ‘de_DE@euro’ , ‘de_DE’ , ‘de’ , ‘ge’ );
echo «На этой системе немецкая локаль имеет имя ‘ $loc_de ‘» ;
?>

Пример #2 Примеры использования setlocale() в Windows

/* Установка голландской локали */
setlocale ( LC_ALL , ‘nld_nld’ );

/* выводит: vrijdag 22 december 1978 */
echo strftime ( «%A %d %B %Y» , mktime ( 0 , 0 , 0 , 12 , 22 , 1978 ));

/* попытка использовать различные локали для немецкого языка */
$loc_de = setlocale ( LC_ALL , ‘de_DE@euro’ , ‘de_DE’ , ‘deu_deu’ );
echo «Предпочитаемая немецкая локаль на этой системе: ‘ $loc_de ‘» ;
?>

Примечания

Пользователи Windows найдут полезной информацию о значениях locales на сайте Microsoft MSDN . Поддерживаемые языки перечислены в » документации по языковым строкам, а значения стран/регионов в » документации по строкам стран/регионов.

User Contributed Notes 33 notes

be careful with the LC_ALL setting, as it may introduce some unwanted conversions. For example, I used

to get my weekdays in dutch on the page. From that moment on (as I found out many hours later) my floating point values from MYSQL where interpreted as integers because the Dutch locale wants a comma (,) instead of a point (.) before the decimals. I tried printf, number_format, floatval. all to no avail. 1.50 was always printed as 1.00 🙁

my weekdays are good now and my floating point values too.

I hope I can save some people the trouble of figuring this out by themselves.

If you are looking for a getlocale() function simply pass 0 (zero) as the second parameter to setlocale().

Beware though if you use the category LC_ALL and some of the locales differ as a string containing all the locales is returned:

echo setlocale ( LC_ALL , 0 );

echo setlocale ( LC_CTYPE , 0 );

setlocale ( LC_ALL , «en_US.UTF-8» );
echo setlocale ( LC_ALL , 0 );

?>

If you are looking to store and reset the locales you could do something like this:

$originalLocales = explode ( «;» , setlocale ( LC_ALL , 0 ));
setlocale ( LC_ALL , «nb_NO.utf8» );

foreach ( $originalLocales as $localeSetting ) if ( strpos ( $localeSetting , » keyword»>) !== false ) list ( $category , $locale ) = explode ( » keyword»>, $localeSetting );
>
else $category = LC_ALL ;
$locale = $localeSetting ;
>
setlocale ( $category , $locale );
>

?>

The above works here (Ubuntu Linux) but as the setlocale() function is just wrapping the equivalent system calls, your mileage may vary on the result.

Источник

Установка локали UTF-8 в PHP

В любом PHP приложении нужно настраивать локаль и кодировку вне зависимости от настроек сервера. Это предотвратит неверное отображение и работу сайта при переезде на другой хостинг и других ситуаций.

Читайте также:  String to wstring cpp

Setlocale

Основная функция, в случаи успеха возвращает устанавливаемое значение или FALSE . Влияет на строковые функции, даты и т.д.

setlocale(LC_ALL, 'ru_RU.utf8');

Возможен вариант:

Вместо LC_ALL можно указать отдельную категорию функций, на которые будет влиять локаль:

  • LC_COLLATE – функции сравнения строк,
  • LC_CTYPE – функции преобразования и классификации строк,
  • C_MONETARYL – для функции localeconv(),
  • LC_NUMERIC – задает символ десятичного разделения,
  • LC_TIME – форматирование даты/времени,
  • LC_MESSAGES – для системных сообщений.

MB_string

Настройка функций для работы с многобайтовыми строками.

mb_internal_encoding('UTF-8'); mb_regex_encoding('UTF-8'); mb_http_output('UTF-8'); mb_language('uni');

Часовой пояс

От него зависит результат работы функций с датами, подробнее о настройке временной зоны.

date_default_timezone_set('Europe/Moscow');

Кодировка контента

Ещё можно явно указать в какой кодировке передается контент, отправив заголовок:

header('Content-type: text/html; charset=utf-8');

Код целиком

// Локаль. setlocale(LC_ALL, 'ru_RU.utf8'); mb_internal_encoding('UTF-8'); mb_regex_encoding('UTF-8'); mb_http_output('UTF-8'); mb_language('uni'); header('Content-type: text/html; charset=utf-8'); date_default_timezone_set('Europe/Moscow');

Источник

setlocale

Если в качестве locale передана пустая строка «» или NULL , имена локалей будут взяты из одноименных переменных окружения или переменной с именем «LANG».

Если в качестве locale передан NULL или «0», локаль изменена не будет, а будет возвращено текущее значение.

Если в качестве locale передан массив, или после этого аргумента следуют дополнительные аргументы, функция будет использовать элементы массива или аргументы по порядку в качестве имен локали до тех пор, пока установка локали не будет успешной. Это удобно, если одна и та же локаль имеет разное имя в различных системах, или для создания запасного варианта при отсутствии какой-либо локали в системе.

(Необязательные аргументы в виде строк или массивов для установки настроек локали до первой успешной попытки.)

Замечание:

На Windows, setlocale(LC_ALL, ») устанавливает имена локалей из системных региональных/языковых настроек (доступных через Панель Управления).

Возвращаемые значения

Возвращает имя вновь установленной локали или FALSE если система не поддерживает установку локали, указанная локаль не существует или передано недопустимое имя категории.

Недопустимое имя категории также вызывает предупреждение. Имена локалей и категорий описаны в » RFC 1766 и » ISO 639. Разные системы имеют различных схемы именования локалей.

Замечание:

Возвращаемое функцией setlocale() значение зависит от системы, на которой запущен PHP. Она возвращает точно то же значение, что и системная функция setlocale.

Список изменений

Версия Описание
5.3.0 Эта функция в настоящее время бросает уведомления E_DEPRECATED , если строка передается в параметре category вместо одной из констант LC_*.

Примеры

Пример #1 Примеры использования setlocale()

/* Установка голландской локали */
setlocale ( LC_ALL , ‘nl_NL’ );

/* выводит: vrijdag 22 december 1978 */
echo strftime ( «%A %e %B %Y» , mktime ( 0 , 0 , 0 , 12 , 22 , 1978 ));

/* попытка использовать различные локали для немецкого языка (с PHP 4.3.0) */
$loc_de = setlocale ( LC_ALL , ‘de_DE@euro’ , ‘de_DE’ , ‘de’ , ‘ge’ );
echo «На этой системе немецкая локаль имеет имя ‘ $loc_de ‘» ;
?>

Пример #2 Примеры использования setlocale() в Windows

Читайте также:  HTML фон

/* Установка голландской локали */
setlocale ( LC_ALL , ‘nld_nld’ );

/* выводит: vrijdag 22 december 1978 */
echo strftime ( «%A %d %B %Y» , mktime ( 0 , 0 , 0 , 12 , 22 , 1978 ));

/* попытка использовать различные локали для немецкого языка (с PHP 4.3.0) */
$loc_de = setlocale ( LC_ALL , ‘de_DE@euro’ , ‘de_DE’ , ‘deu_deu’ );
echo «Предпочитаемая немецкая локаль на этой системе: ‘ $loc_de ‘» ;
?>

Примечания

Информация о локали модифицируется во всем процессе, а не по каждому потоку отдельно. Если вы используете PHP на многопоточном сервере, таком как IIS, HHVM или Apache под Windows, вы можете обнаружить неожиданные изменения в настройках локали во время выполнения скриптов, никогда и не вызывавших setlocale() . Это происходит из-за того, что другие скрипты, запущенные в параллельных потоках данного процесса, в то же самое время поменяли настройки локали для всего процесса с помощью setlocale() .

Пользователи Windows найдут полезной информацию о значениях locale на сайте Microsoft MSDN . Поддерживаемые языки перечислены в » документации по языковым строкам, а значения стран/регионов в » документации по строкам стран/регионов.

Источник

Локализация интерфейса сайта с использованием PHP, Smarty и Gettext

  1. Качаем плагин Smarty Gettext (обязательно версии 1.0b1, а не 0.9.1, которую предлагают!): скачать, почитать больше про плагин (рекомендуется)
  2. Забираем оттуда файл block.t.php и кладем его в директорию smarty/plugins
  3. Создаем в корне сайта папку locale (можно и в другом месте, но только следите за путями), а в ней папку ru
  4. В папке ru создаем папку LC_MESSAGES — здесь будут храниться языковые файлы для русского языка
  5. После чего необходимо пройтись по всем файлам *.tpl и окружить все строки, которые должны быть переведены тэгом , вот так:

Members
Here is your payment for %1

$lang = 'ru_RU.utf8'; if (!defined('LC_MESSAGES')) define('LC_MESSAGES', 5); // в Windows эта константа может быть не определена setlocale(LC_MESSAGES, $lang); // устанавливаем локаль if (!isset ($_COOKIE['lang'])) setcookie('lang', $lang, 1640995200); // сохраняем язык в Cookie bind_textdomain_codeset("messages", 'UTF8'); // устанавливаем кодировку файла messages.mo if ($lang == 'ru_RU.utf8') < // подключаем файлы русской локализации bindtextdomain("messages", "./locale"); textdomain("messages"); >else < // возвращаем английский язык bindtextdomain("messages", ""); >
  • Файл messages.mo в Windows кэшируется, и изменения в нем видны только после перезагрузки Apache.
  • Если передать функции setlocale значение отличное от LC_MESSAGES, то возможно возникновение проблем, связанных с тем, что в русском языке дробная часть отделяется запятой, а в английском — точкой. Так как локаль начинает влиять и на представления чисел в PHP, то при запросах к MySQL дробная часть теряется.
  • Локали ru_RU.utf8 и ru_RU могут отличаться на сервере. Если указывать просто ru_RU, то есть шанс получить вопросительные знаки вместо букв.

Надеюсь, что этот топик поможет вам сэкономить свое время и подтолкнет к созданию еще лучших, качественных сайтов =)

Источник

Оцените статью