DEV Community

Cover image for PHP multi-language support getting started with Locale class in intl extension
nabbisen
nabbisen

Posted on

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

* 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🙂

Top comments (0)