|
4 | 4 |
|
5 | 5 | assert(function_exists('gettext')); |
6 | 6 | assert(function_exists('bindtextdomain')); |
| 7 | +assert(function_exists('bind_textdomain_codeset')); |
7 | 8 | assert(function_exists('textdomain')); |
8 | 9 |
|
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 | + } |
11 | 20 | } |
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')); |
18 | 36 |
|
19 | 37 | $domain = 'test'; |
20 | 38 | bindtextdomain($domain, 'locale/'); |
| 39 | +bind_textdomain_codeset($domain, 'UTF-8'); |
21 | 40 | textdomain($domain); |
22 | 41 |
|
23 | | -assert(gettext(json_decode('"\u793a\u4f8b"', true)) === 'Example'); |
| 42 | +$src = json_decode('"\u793a\u4f8b"', true); |
| 43 | +assert(gettext($src) === 'Example'); |
0 commit comments