PHP multi-language support getting started with Locale class in intl extension

nabbisen - May 20 '21 - - Dev Community

* The cover image is originally by anncapictures and edited with great appreciation.


Summary

PHP provides a very useful extension for multi-language support named intl. It means "internationalization".
This post shows how to install it (on OpenBSD) and use it with holding up Locale class as an example.

Environment

  • OS: OpenBSD 6.9
  • Programming Language: PHP 7.4

Description

Installation

First, get the extension as a ports package:

$ doas pkg_add php-intl
quirks-3.632 signed on 2021-05-18T20:40:55Z
Ambiguous: choose package for php-intl
    0: <None>
    1: php-intl-7.3.28
    2: php-intl-7.4.19
    3: php-intl-8.0.6
Your choice: 2
php-intl-7.4.19:icu4c-wwwdata-68.2v0: ok
php-intl-7.4.19:icu4c-68.2v0: ok
php-intl-7.4.19: ok
Enter fullscreen mode Exit fullscreen mode

Then, activate it:

$ cd /etc/php-7.4

$ # enable extension
$ doas ln -s ../php-7.4.sample/intl.ini
$ # validate the symbolic link created
$ ls -l
total 0
...
lrwxr-xr-x  1 root  wheel  26 May 20 11:05 intl.ini@ -> ../php-7.4.sample/intl.ini
...

$ # load it
$ doas rcctl restart php74_fpm
Enter fullscreen mode Exit fullscreen mode

That's it.

Get localized display name with Locale::getDisplayLanguage

The intl extension is active now.
Let's use getDisplayLanguage function of Locale class in it. It brings "an appropriately localized display name for language of the inputlocale".

Example 1: Language names in current language

locale_get_display_language, the "procedural style", is available instead of Locale::getDisplayLanguage.
Almost all what to do is to pass locale string, which you want to convert to the display name, as the first parameter.

# prerequisites:
# the default locale is en-US

$arr = ['en', 'ja', 'de', 'es', 'fr', 'sv', 'ar']; # for example
Enter fullscreen mode Exit fullscreen mode

If the second parameter is omitted, string shown in the default language is returned. For example, locale_get_display_language('ja'); this time means "Japanese in English".

foreach ($arr as $lang) {
    echo locale_get_display_language($lang);
    // or: echo Locale::getDisplayLanguage($lang);
}
# ==> 
# English
# Japanese
# German
# Spanish
# French
# Swedish
# Arabic
Enter fullscreen mode Exit fullscreen mode

Example 2: Language names in each language

If the second parameter is passed to locale_get_display_language or Locale::getDisplayLanguage, string shown in the language is returned. For example, ocale_get_display_language('ja', 'ja'); means "Japanese in Japanese".

foreach ($arr as $lang) {
    echo locale_get_display_language($lang, $lang);
    // or: echo Locale::getDisplayLanguage($lang, $lang);
}
# ==>
# English
# 日本語
# Deutsch
# español
# français
# svenska
# العربية
Enter fullscreen mode Exit fullscreen mode

S' wonderful🙂

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .