Globalization manifests itself in many aspects, such as a unified system of measurements for time, dimensions, distances, temperatures, dates, and many other things. Of course, there are countries that fall out of the general flow, for example, the United States, is one of the few countries in which imperial units are preserved. They use miles instead of kilometers, and pounds instead of kilograms. In many Eastern countries, the calendars are arranged differently, for example, the Buddhist calendar puts the year at 2563. But on the whole, everything is unified.
Despite this unification, each country has its own peculiarities in its way of recording, comparing, and other aspects. For example, in the U.S. it's customary to put the month first and then the day. Some countries use a period to output whole numbers, and some use a comma, e.g., 1,234
. These features aren't necessarily tied to an entire country. There can be many additional divisions within a single country. Each such set of features is called a locale, and the process of adapting to the features of a particular locale is called localization.
Localization is important in software. The user will always expect software (including websites) to work predictably. This includes localization. It's clear that solving this problem by yourself is no mean feat. Fortunately, you don't have to do that. Localization is usually embedded either in the language itself or in special libraries.
PHP uses the setlocale() function to control the locale. This function configures the locale globally. I.e., calling it affects all subsequent functions that rely on localization.
string setlocale ( int $category , string $locale [, string $... ] )
The first parameter of this function takes the name of the category (like a constant) that you want to apply the locale to, which is then passed in further parameters.
strcoll()
)strtoupper()
localeconv()
functionlocaleconv()
)strftime()
An example of how the set locale affects how data is displayed.
<?php
print_r(1.234); // => 1.234
setlocale(LC_NUMERIC, 'ru_RU');
print_r(1.234); // => 1,234
If you pass 0
as second argument instead of the locale: setlocale(LC_ALL, 0)
, the function will return the currently set locale for the category.
Display the current locale for the LC_CTYPE
category.
If you've reached a deadlock it's time to ask your question in the «Discussions». How ask a question correctly:
Tests are designed so that they test the solution in different ways and against different data. Often the solution works with one kind of input data but doesn't work with others. Check the «Tests» tab to figure this out, you can find hints at the error output.
It's fine. 🙆 One task in programming can be solved in many different ways. If your code passed all tests, it complies with the task conditions.
In some rare cases, the solution may be adjusted to the tests, but this can be seen immediately.
It's hard to make educational materials that will suit everyone. We do our best but there is always something to improve. If you see a material that is not clear to you, describe the problem in “Discussions”. It will be great if you'll write unclear points in the question form. Usually, we need a few days for corrections.
By the way, you can participate in courses improvement. There is a link below to the lessons course code which you can edit right in your browser.
Your exercise will be checked with these tests:
1<?php
2
3namespace HexletBasics\DeepIntoStrings\Locales;
4
5use PHPUnit\Framework\TestCase;
6
7class Test 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
Teacher's solution will be available in: