0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.1757: Mac: default locale is lacking the encoding

Problem:    Mac: default locale is lacking the encoding.
Solution:   Add ".UTF-8 to the locale. (Yee Cheng Chin, closes #7022)
This commit is contained in:
Bram Moolenaar 2020-09-27 16:03:15 +02:00
parent cfcd011fcd
commit a5fe91e6dc
3 changed files with 30 additions and 2 deletions

View File

@ -570,12 +570,17 @@ mac_lang_init(void)
{ {
if (mch_getenv((char_u *)"LANG") == NULL) if (mch_getenv((char_u *)"LANG") == NULL)
{ {
char buf[20]; char buf[50];
// $LANG is not set, either because it was unset or Vim was started
// from the Dock. Query the system locale.
if (LocaleRefGetPartString(NULL, if (LocaleRefGetPartString(NULL,
kLocaleLanguageMask | kLocaleLanguageVariantMask | kLocaleLanguageMask | kLocaleLanguageVariantMask |
kLocaleRegionMask | kLocaleRegionVariantMask, kLocaleRegionMask | kLocaleRegionVariantMask,
sizeof buf, buf) == noErr && *buf) sizeof(buf) - 10, buf) == noErr && *buf)
{ {
if (strcasestr(buf, "utf-8") == NULL)
strcat(buf, ".UTF-8");
vim_setenv((char_u *)"LANG", (char_u *)buf); vim_setenv((char_u *)"LANG", (char_u *)buf);
# ifdef HAVE_LOCALE_H # ifdef HAVE_LOCALE_H
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");

View File

@ -2,6 +2,8 @@
scriptencoding utf-8 scriptencoding utf-8
source check.vim
func Test_environ() func Test_environ()
unlet! $TESTENV unlet! $TESTENV
call assert_equal(0, has_key(environ(), 'TESTENV')) call assert_equal(0, has_key(environ(), 'TESTENV'))
@ -45,4 +47,23 @@ func Test_external_env()
call assert_equal('', result) call assert_equal('', result)
endfunc endfunc
func Test_mac_locale()
CheckFeature osxdarwin
" If $LANG is not set then the system locale will be used.
" Run Vim after unsetting all the locale environmental vars, and capture the
" output of :lang.
let lang_results = system("unset LANG; unset LC_MESSAGES; " ..
\ shellescape(v:progpath) ..
\ " --clean -esX -c 'redir @a' -c 'lang' -c 'put a' -c 'print' -c 'qa!' ")
" Check that:
" 1. The locale is the form of <locale>.UTF-8.
" 2. Check that fourth item (LC_NUMERIC) is properly set to "C".
" Example match: "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"
call assert_match('"\([a-zA-Z_]\+\.UTF-8/\)\{3}C\(/[a-zA-Z_]\+\.UTF-8\)\{2}"',
\ lang_results,
\ "Default locale should have UTF-8 encoding set, and LC_NUMERIC set to 'C'")
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1757,
/**/ /**/
1756, 1756,
/**/ /**/