Skip to content

Commit 30e174a

Browse files
committed
use any available english locale instead of requiring en_US.utf-8
1 parent b9f8f02 commit 30e174a

File tree

1 file changed

+29
-9
lines changed

1 file changed

+29
-9
lines changed

src/globals/ext-tests/gettext.php

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,40 @@
44

55
assert(function_exists('gettext'));
66
assert(function_exists('bindtextdomain'));
7+
assert(function_exists('bind_textdomain_codeset'));
78
assert(function_exists('textdomain'));
89

9-
if (!is_dir('locale/en_US/LC_MESSAGES/')) {
10-
mkdir('locale/en_US/LC_MESSAGES/', 0755, true);
10+
foreach (['en_US', 'en_GB'] as $lc) {
11+
$dir = "locale/{$lc}/LC_MESSAGES";
12+
if (!is_dir($dir)) {
13+
mkdir($dir, 0755, true);
14+
}
15+
$mo = '3hIElQAAAAACAAAAHAAAACwAAAAFAAAAPAAAAAAAAABQAAAABgAAAFEAAAAXAQAAWAAAAAcAAABwAQAAAQAAAAAAAAAAAAAAAgAAAAAAAAAA56S65L6LAFByb2plY3QtSWQtVmVyc2lvbjogUEFDS0FHRSBWRVJTSU9OClJlcG9ydC1Nc2dpZC1CdWdzLVRvOiAKUE8tUmV2aXNpb24tRGF0ZTogWUVBUi1NTy1EQSBITzpNSytaT05FCkxhc3QtVHJhbnNsYXRvcjogRlVMTCBOQU1FIDxFTUFJTEBBRERSRVNTPgpMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPgpMYW5ndWFnZTogCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgBFeGFtcGxlAA==';
16+
$path = "{$dir}/test.mo";
17+
if (!file_exists($path)) {
18+
file_put_contents($path, base64_decode($mo));
19+
}
1120
}
12-
if (!file_exists('locale/en_US/LC_MESSAGES/test.mo')) {
13-
$mo = '3hIElQAAAAACAAAAHAAAACwAAAAFAAAAPAAAAAAAAABQAAAABgAAAFEAAAAXAQAAWAAAAAcAAABwAQAAAQAAAAAAAAAAAAAAAgAAAAAAAAAA56S65L6LAFByb2plY3QtSWQtVmVyc2lvbjogUEFDS0FHRSBWRVJTSU9OClJlcG9ydC1Nc2dpZC1CdWdzLVRvOiAKUE8tUmV2aXNpb24tRGF0ZTogWUVBUi1NTy1EQSBITzpNSStaT05FCkxhc3QtVHJhbnNsYXRvcjogRlVMTCBOQU1FIDxFTUFJTEBBRERSRVNTPgpMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPgpMYW5ndWFnZTogCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgBFeGFtcGxlAA==';
14-
file_put_contents('locale/en_US/LC_MESSAGES/test.mo', base64_decode($mo));
15-
}
16-
putenv('LANG=en_US');
17-
assert(setlocale(LC_ALL, 'en_US.utf-8') === 'en_US.utf-8');
21+
22+
// Probe for an available English locale
23+
$candidates = [
24+
'en_US.UTF-8', 'en_US.utf8', 'en_US.utf-8', 'en_US',
25+
'en_GB.UTF-8', 'en_GB.utf8', 'en_GB.utf-8', 'en_GB',
26+
'English_United States.65001', 'English_United States.1252',
27+
'English_United Kingdom.65001', 'English_United Kingdom.1252',
28+
];
29+
30+
$locale = setlocale(LC_ALL, $candidates);
31+
assert($locale !== false);
32+
33+
putenv('LC_ALL=' . $locale);
34+
putenv('LANG=' . $locale);
35+
putenv('LANGUAGE=' . (stripos($locale, 'US') !== false ? 'en_US:en_GB' : 'en_GB:en_US'));
1836

1937
$domain = 'test';
2038
bindtextdomain($domain, 'locale/');
39+
bind_textdomain_codeset($domain, 'UTF-8');
2140
textdomain($domain);
2241

23-
assert(gettext(json_decode('"\u793a\u4f8b"', true)) === 'Example');
42+
$src = json_decode('"\u793a\u4f8b"', true);
43+
assert(gettext($src) === 'Example');

0 commit comments

Comments
 (0)