PHP 8.2 Alpine 3.19中IntlDateFormatter格式化ar_AE日期缺阿拉伯数字
PHP 8.2 + Alpine 3.19下ar_AE区域IntlDateFormatter数字显示异常问题
将PHP项目从7.4升级到8.2后,在PHP 8.2 + Alpine 3.19环境中使用IntlDateFormatter格式化ar_AE区域日期时出现异常:原环境(PHP 7.4 + Alpine 3.12)会输出全阿拉伯字符(包括数字),但新环境中仅显示阿拉伯文字,数字仍为拉丁形式(如1、2022)。
已知Alpine 3.16开始ICU数据拆分,已在PHP 8.2的Dockerfile中添加icu-libs和icu-data-full,问题部分解决,但ar_AE区域的数字仍未显示为阿拉伯数字。
输出对比
PHP 7.4输出
/var/www $ php test.php ar_AE: السبت، ١ يناير ٢٠٢٢ ١٢:٥٩:٥٩ ص توقيت وسط أوروبا الرسمي ar_QA: السبت، ١ يناير ٢٠٢٢ ١٢:٥٩:٥٩ ص توقيت وسط أوروبا الرسمي ar_SA: السبت، ١ يناير ٢٠٢٢ م ١٢:٥٩:٥٩ ص توقيت وسط أوروبا الرسمي
PHP 8.2输出
/var/www $ php test.php ar_AE: السبت، 1 يناير 2022 في 12:59:59 ص توقيت وسط أوروبا الرسمي ar_QA: السبت، ١ يناير ٢٠٢٢ في ١٢:٥٩:٥٩ ص توقيت وسط أوروبا الرسمي ar_SA: السبت، ١ يناير ٢٠٢٢ م في ١٢:٥٩:٥٩ ص توقيت وسط أوروبا الرسمي
测试代码(test.php)
<?php $formatter = new IntlDateFormatter( 'ar_AE', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Berlin' ); echo 'ar_AE: ' . $formatter->format(new DateTime('2021-12-31 23:59:59')); echo PHP_EOL; $formatter = new IntlDateFormatter( 'ar_QA', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Berlin' ); echo 'ar_QA: ' . $formatter->format(new DateTime('2021-12-31 23:59:59')); echo PHP_EOL; $formatter = new IntlDateFormatter( 'ar_SA', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Berlin' ); echo 'ar_SA: ' . $formatter->format(new DateTime('2021-12-31 23:59:59')); echo PHP_EOL;
环境配置
PHP 7.4 Dockerfile
FROM php:7.4-fpm-alpine3.12 RUN apk update \ && apk --no-cache add \ freetype \ icu \ icu-dev RUN docker-php-ext-install intl USER www-data WORKDIR /var/www
PHP 7.4 INTL版本信息
Internationalization support => enabled ICU version => 67.1 ICU Data version => 67.1 ICU TZData version => 2019c ICU Unicode version => 13.0
PHP 8.2 Dockerfile
FROM php:8.2-fpm-alpine3.19 RUN apk update \ && apk --no-cache add \ freetype \ icu \ icu-dev \ icu-libs \ icu-data \ icu-data-full RUN docker-php-ext-install intl USER www-data WORKDIR /var/www
PHP 8.2 INTL版本信息
Internationalization support => enabled ICU version => 74.1 ICU Data version => 74.1 ICU TZData version => 2023c ICU Unicode version => 15.1
已尝试的额外操作
安装了以下字体及相关包,但无效果:
font-arabic-misc \ font-noto-arabic \ musl-locales \ fontconfig \ ttf-dejavu \ font-noto font-noto-extra font-arabic-misc \ font-misc-cyrillic font-mutt-misc font-screen-cyrillic font-winitzki-cyrillic font-cronyx-cyrillic \ font-noto-armenian font-noto-cherokee font-noto-devanagari font-noto-ethiopic font-noto-georgian \ font-noto-hebrew font-noto-lao font-noto-malayalam font-noto-tamil font-noto-thaana font-noto-thai \ freetype ttf-droid ttf-freefont ttf-liberation freetype-dev
问题
为何在PHP 8.2 Alpine 3.19中ar_AE区域仍显示非阿拉伯数字?是遗漏了依赖,还是这属于正确输出需要调整PHPUnit测试?
内容的提问来源于stack exchange,提问作者user23441883
相关产品推荐
相关产品推荐

