---
title: "Internationalization"
version: "3.4"
---

> 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

Phalcon is written in C as an extension for PHP. There is a [PECL](https://pecl.php.net/package/intl) extension that offers internationalization functions to PHP applications called [intl](https://pecl.php.net/package/intl). Starting from PHP 5.4/5.5 this extension is bundled with PHP. Its documentation can be found in the pages of the official [PHP manual](https://www.php.net/manual/en/intro.intl.php).

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](https://pecl.php.net/package/intl) extension's functionality into Phalcon powered applications.

:::warning[NOTE]
This guide is not intended to be a complete documentation of the [intl](https://pecl.php.net/package/intl) extension. Please visit its the [documentation](https://www.php.net/manual/en/book.intl.php) of the extension for a reference. 
:::

## Find out best available Locale
There are several ways to find out the best available locale using [intl](https://pecl.php.net/package/intl). One of them is to check the HTTP `Accept-Language` header: 

```php
<?php

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

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

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:

* 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](https://www.php.net/manual/en/class.messageformatter.php) allows for the production of those messages.

Printing numbers formatted based on some locale:

```php
<?php

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

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

// Prints 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

// Setting parameters
$time   = time();
$values = [7, $time, $time];

// Prints '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);

// Prints 'À 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](https://www.php.net/manual/en/class.collator.php) 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

// 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](https://www.php.net/manual/en/class.transliterator.php) provides transliteration of strings:

```php
<?php

$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
```

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