Глобализация проявляется во многих аспектах, в том числе в единой системе мер: время, размеры и расстояния, температуры, даты и многое другое.
Конечно, есть страны, которые выпадают из общего потока. Например, США — это чуть ли не единственная страна, в которой сохраняется и превалирует английская система мер. США использует мили вместо километров и фунты вместо килограммов. Во многих восточных странах по-другому устроены календари, и где-то сейчас идет четырехтысячный год. Но в целом все унифицировано.
Несмотря на эту унификацию, в каждой стране есть свои особенности по способу записи, сравнению и другим аспектам. Например, в США принято в датах первым ставить месяц, а вторым — день. В некоторых странах для вывода вещественных чисел используют точку, а в некоторых — запятую: 1,234
.
Эти особенности необязательно привязаны к целой стране. Внутри одной страны может быть множество дополнительных разделений. Каждый такой набор особенностей называют локалью, а процесс адаптации к особенностям конкретной локали — локализацией.
Локализация важна в программном обеспечении. Пользователь всегда ожидает, что любой софт или сайт будет работать предсказуемо. В это понятие включается и локализация. Понятно, что самостоятельное решение этой задачи слишком затратно. К счастью, этого делать не нужно. Локализация обычно встроена в сам язык или в специальные библиотеки.
В PHP для управления локалью используется функция setlocale(). Эта функция настраивает локаль глобально. Ее вызов влияет на все последующие функции, опирающиеся на локализацию:
<?php
setlocale(int $category, string $locales, string ...$rest): string|false
Первым параметром эта функция принимает название категории (как константу), к которой нужно применить локаль, передающуюся в параметрах дальше:
strcoll()
strtoupper()
localeconv()
localeconv()
strftime()
Изучим на примере, как установленная локаль влияет на отображение данных:
<?php
print_r(1.234); // => 1.234
setlocale(LC_NUMERIC, 'ru_RU');
print_r(1.234); // => 1,234
Попробуем вторым аргументом передать 0
вместо локали: setlocale(LC_ALL, 0)
. В таком случае функция будет возвращать текущую установленную локаль для категории.
Выведите на экран текущую локаль для категории LC_CTYPE
.
Команда проекта находится в телеграм-сообществе по ссылке https://ttttt.me/HexletLearningBot. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "Обсуждение". Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Привет! Я Тота и моя задача помочь в обучении. Чтобы активировать меня, нужно зарегистрироваться или залогиниться, если у вас уже есть аккаунт
Ваше упражнение проверяется по этим тестам
1<?php
2
3namespace HexletBasics\DeepIntoStrings\Locales;
4
5use PHPUnit\Framework\TestCase;
6
7class SolutionTest extends TestCase
8{
9 public function test()
10 {
11 $expected = setlocale(LC_CTYPE, 0);
12 $this->expectOutputString($expected);
13 require 'index.php';
14 }
15}
16
Решение учителя откроется через: