Free PHP course. Sign Up for tracking progress →

PHP: Localization

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.

  • LC_ALL — all of the following
  • LC_COLLATE — string comparison functions (see strcoll())
  • LC_CTYPE — string conversion and classification functions, for example strtoupper()
  • LC_MONETARY — for the localeconv() function
  • LC_NUMERIC — specifies the decimal separator character (see also localeconv())
  • LC_TIME — date/time formatting with strftime()

An example of how the set locale affects how data is displayed.


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.

The exercise doesn't pass checking. What to do? 😶

If you've reached a deadlock it's time to ask your question in the «Discussions». How ask a question correctly:

  • Be sure to attach the test output, without it it's almost impossible to figure out what went wrong, even if you show your code. It's complicated for developers to execute code in their heads, but having a mistake before their eyes most probably will be helpful.
In my environment the code works, but not here 🤨

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.

My code is different from the teacher's one 🤔

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.

I've read the lessons but nothing is clear 🙄

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.

If you got stuck and don't know what to do, you can ask a question in our community