Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

locale_get_display_name does not work as expected by default in Alpine Linux 3.16 based PHP images #1302

Open
gdejong opened this issue May 30, 2022 · 9 comments
Labels
question Usability question, not directly related to an error with the image

Comments

@gdejong
Copy link

gdejong commented May 30, 2022

The latest PHP images based on Alpine Linux now use Alpine Linux v3.16.

In v3.16, Alpine Linux has split the ICU package in two: icu-data-en and icu-data-full.

Only the icu-data-en package is now installed by default. The Alpine Linux changelog mentions this as well:

icu-libs only installs icu-data-en. If additional language support is required, icu-data-full needs to be installed manually. 
# apk list | grep -i icu
icu-libs-71.1-r2 x86_64 {icu} (MIT ICU Unicode-TOU) [installed]
icu-data-en-71.1-r2 x86_64 {icu} (MIT ICU Unicode-TOU) [installed]

This results in the following code not working as expected:

<?php

echo locale_get_display_name('ja', 'ja');

This now yields the output Japanese instead the expected 日本語. Other locale-related methods will probably also be affected.

Would the Alpine-based PHP images want to include the icu-data-full package by default? Or is this package expected/intended to be not installed by default?

See

@gdejong gdejong changed the title locale_get_display_name does not work as expected by default in Alpine Linux based PHP images locale_get_display_name does not work as expected by default in Alpine Linux 3.16 based PHP images May 30, 2022
@tianon
Copy link
Member

tianon commented May 31, 2022

I'd personally lean towards this being the expected behavior of Alpine-based images (as in #1301, which is fundamentally the same underlying cause/issue). From the standard "Alpine" description on https://hub.docker.com/_/php:

To minimize image size, it's uncommon for additional related tools (such as git or bash) to be included in Alpine-based images. Using this image as a base, add the things you need in your own Dockerfile (see the alpine image description for examples of how to install packages if you are unfamiliar).

(Especially since an additional 29MiB is a pretty non-trivial bump, and it's not going to be all users of the image which require it.)

@wglambert wglambert added question Usability question, not directly related to an error with the image and removed Issue labels May 31, 2022
@CybotTM
Copy link

CybotTM commented Jun 1, 2022

How likely is it to come across an app today that doesn't have to deal with internationalization in some way?

Maybe this deficit of Alpine images should be emphasized more clearly, or there should be another flavour: alpine-intl and alpine-en?

@Mattie112
Copy link

Also: this breaks (our) existing apps. If a smaller image is wanted perhaps that can be done at a major release instead of a bugfix release?

(and yes adding the package ourselves fixes the problem)

@tianon
Copy link
Member

tianon commented Jun 1, 2022

If you switch from the -alpine variants to the -alpine3.15 variants, you will get the old behavior back.

@thijskaspers
Copy link

@gdejong thanks for creating this issue! I've just spent 2.5 hours debugging why my dates were suddenly in English instead of the given locale. Fixed after adding icu-data-full package or pinning Alpine to 3.15.

@hexus
Copy link

hexus commented Jun 14, 2022

The problem isn't so much Alpine's philosophy, but the way consumers of the PHP Docker images have to deal with the various package availability changes made between Alpine versions.

As a user of this Docker image, let's say of tags 7.4-fpm-alpine and 8.1-fpm-alpine, it's unfortunate when packages that directly affect the behaviour of PHP change under my feet. Localization functionality in PHP that I may have been relying on is suddenly no longer available and I have to investigate why, just because it was decided to bump all supported images from Alpine 3.15 to 3.16.

From a user standpoint this is quite simply a backwards-incompatible change, or one that contributes to a Docker image tag being unstable. With some more careful consideration of package changes between Alpine versions, such unexpected breakages could be avoided. Much like @Mattie112 mentioned, Alpine version bumps make more sense in tandem with a minor version of PHP, I feel.

That said, I'll be adding icu-data-full from now on, I suppose!

@tianon
Copy link
Member

tianon commented Jun 14, 2022

Unfortunately, the Alpine and PHP release cycles aren't in sync (or that would be more tenable), and users constantly want access to the newer Alpine releases, which is why we implemented more specific aliases (7.4-fpm-alpine3.15, 7.4-fpm-alpine3.16, 8.1-fpm-alpine15, 8.1-fpm-alpine16) for users to pin to specific releases and get themselves a more "stable" experience (with the understanding that they'll need to keep up with Alpine releases, but putting when to make those changes more in their hands than ours if they so choose).

@guvra
Copy link

guvra commented Jul 7, 2022

Is it planned to add icu-data-full to the alpine 3.16 images?

If not, I fear that many developers will spend hours trying to understand why they get issues with dates.

tomudding added a commit to GEWIS/gewisdb that referenced this issue Aug 16, 2022
It appears that Alpine Linux does not come with full localisation
support by default. Any reasonable information on this is actually
pretty sparse, so it took me more than an hour to fix this.

I initially tried to use `musl-locales` and `musl-locales-lang`,
however, while these provide partial localisations (for Dutch) PHP
would not accept it no matter what. Even moving the files around
didn't fix the issue.

Finally, I saw docker-library/php#1302
which explained that `icu-data-full` is not installed by default,
as it is approximately 30MB (which is quite large for Alpine).
tomudding added a commit to GEWIS/gewisweb that referenced this issue Aug 16, 2022
It appears that Alpine Linux does not come with full localisation
support by default. Any reasonable information on this is actually
pretty sparse, so it took me more than an hour to fix this.

I initially tried to use `musl-locales` and `musl-locales-lang`,
however, while these provide partial localisations (for Dutch) PHP
would not accept it no matter what. Even moving the files around
didn't fix the issue.

Finally, I saw docker-library/php#1302
which explained that `icu-data-full` is not installed by default,
as it is approximately 30MB (which is quite large for Alpine).
@ItsReddi
Copy link

If not, I fear that many developers will spend hours trying to understand why they get issues with dates.

your fear was right.
php/php-src#9365

@tianon tianon pinned this issue Oct 6, 2022
@tianon tianon unpinned this issue Oct 6, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Usability question, not directly related to an error with the image
Projects
None yet
Development

No branches or pull requests

9 participants