---
title: "Internationalization"
version: "5.11"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.phalcon.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Internationalization

## Overview
Phalcon is written in C as an extension for PHP. There is a [PECL][intl] extension that offers internationalization functions to PHP applications called [intl][intl]. Its documentation can be found on the pages of the official [PHP manual][intl-manual].

Phalcon does not offer this functionality, since creating such a component would be replicating existing code.

In the examples below, we will show you how to implement the [intl][intl] extension's functionality into Phalcon-powered applications.

:::warning[WARNING]
This guide is not intended to be a complete documentation of the [intl][intl] extension. Please visit the [documentation][intl-book] of the extension for a reference.
:::

## Find out Best Available Locale
There are several ways to find out the best available locale using [intl][intl]. One of them is to check the HTTP `Accept-Language` header:

```php
<?php

use Locale;

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);

// Locale could be something like 'en_GB' or 'en'
echo $locale;
```

The below method returns a locale identified. It is used to get language, culture, or regionally-specific behavior from the Locale API.

Examples of identifiers include:

| Identifier       | Description                                 |
|------------------|---------------------------------------------|
| `en-US`          | (English, United States)                    |
| `ru-RU`          | (Russian, Russia)                           |
| `zh-Hant-TW`     | (Chinese, Traditional Script, Taiwan)       |
| `fr-CA`, `fr-FR` | (French for Canada and France respectively) |

## Formatting Messages Based on Locale
Part of creating a localized application is to produce concatenated, language-neutral messages. The [MessageFormatter][messageformatter] allows for the production of those messages.

Printing numbers formatted based on some locale:

```php
<?php

use MessageFormatter;

// € 4 560
$formatter = new MessageFormatter('fr_FR', '€ {0, number, integer}');
echo $formatter->format([4560]);

// USD$ 4,560.5
$formatter = new MessageFormatter('en_US', 'USD$ {0, number}');
echo $formatter->format([4560.50]);

// ARS$ 1.250,25
$formatter = new MessageFormatter('es_AR', 'ARS$ {0, number}');
echo $formatter->format([1250.25]);
```

Message formatting using time and date patterns:

```php
<?php

use MessageFormatter;

$time   = time();
$values = [7, $time, $time];

// 'At 3:50:31 PM on Apr 19, 2015, there was a disturbance on planet 7.'
$pattern   = 'At {1, time} on {1, date}, there was a disturbance on planet {0, number}.';
$formatter = new MessageFormatter('en_US', $pattern);
echo $formatter->format($values);

// 'À 15:53:01 le 19 avr. 2015, il y avait une perturbation sur la planète 7.'
$pattern   = 'À {1, time} le {1, date}, il y avait une perturbation sur la planète {0, number}.';
$formatter = new MessageFormatter('fr_FR', $pattern);
echo $formatter->format($values);
```

## Locale-Sensitive Comparison
The [Collator][collator] class provides string comparison capability with support for appropriate locale-sensitive sort orderings. Check the examples below on the usage of this class:

```php
<?php

use Collator;

// Create a collator using Spanish locale
$collator = new Collator('es');

// Returns that the strings are equal, in spite of the emphasis on the 'o'
$collator->setStrength(Collator::PRIMARY);

var_dump(
$collator->compare('una canción', 'una cancion')
);

// Returns that the strings are not equal
$collator->setStrength(Collator::DEFAULT_VALUE);

var_dump(
$collator->compare('una canción', 'una cancion')
);
```

## Transliteration
[Transliterator][transliterator] provides transliteration of strings:

```php
<?php

use Transliterator;

$id = 'Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();';
$transliterator = Transliterator::create($id);

$string = "garçon-étudiant-où-L'école";
echo $transliterator->transliterate($string); // garconetudiantoulecole
```

[intl]: https://pecl.php.net/package/intl
[intl-manual]: https://www.php.net/manual/en/intro.intl.php
[intl-book]: https://www.php.net/manual/en/book.intl.php
[messageformatter]: https://www.php.net/manual/en/class.messageformatter.php
[collator]: https://www.php.net/manual/en/class.collator.php
[transliterator]: https://www.php.net/manual/en/class.transliterator.php

Source: https://docs.phalcon.io/5.11/i18n/index.mdx
