Translation: Fix #40495: auto language detection on MacOS (various WS)

This commit is contained in:
rich2014 2023-09-10 18:09:37 +08:00
parent a2d2cbc5dd
commit cbf1dcc616
2 changed files with 26 additions and 17 deletions

View File

@ -225,6 +225,11 @@ uses
Windows;
{$ENDIF}
{$IFDEF DARWIN}
uses
MacOSAll, Unix;
{$ENDIF}
function IsKey(Txt, Key: PChar): boolean;
begin
if Txt=nil then exit(false);
@ -1907,5 +1912,25 @@ begin
end;
end;
{$IFDEF DARWIN}
function setenv(const name:PAnsiChar; const value:PAnsiChar; overwrite:cint): cint; cdecl; external clib;
procedure FIX_MACOS_LANG_ENV_VAR;
var
cfLang: CFPropertyListRef;
lang: array[0..49] of char;
begin
cfLang:= CFPreferencesCopyAppValue( CFSTR('AppleLocale'), CFSTR('') );
if not Assigned(cfLang) then
exit;
CFStringGetCString( cfLang, lang, SizeOf(lang), kCFStringEncodingUTF8 );
setenv( 'LANG', lang, 0 );
CFRelease( cfLang );
end;
initialization
FIX_MACOS_LANG_ENV_VAR;
{$ENDIF}
end.

View File

@ -8,7 +8,7 @@ interface
uses
classes,
MacOSAll, CocoaAll, Cocoa_Extra,
SysUtils, Types, LCLType, LCLClasses, LCLProc, Unix,
SysUtils, Types, LCLType, LCLClasses, LCLProc,
Graphics, Math, GraphType;
var
@ -147,8 +147,6 @@ function AllocImageRotatedByDegrees(src: NSImage; degrees: double): NSImage;
function AllocCursorFromCursorByDegrees(src: NSCursor; degrees: double): NSCursor;
var
NSSTR_AppleLocale: NSString;
NSSTR_DARK_NAME: NSString;
NSSTR_DARK_NAME_VIBRANT: NSString;
NSSTR_LINE_FEED: NSString;
@ -1260,27 +1258,13 @@ begin
img.release;
end;
function setenv(const name:PAnsiChar; const value:PAnsiChar; overwrite:cint): cint; cdecl; external clib;
procedure FIX_LANG_ENV_VAR;
var
nsLang: NSString;
begin
nsLang:= NSUserDefaults.standardUserDefaults.stringForKey( NSSTR_AppleLocale );
if not Assigned(nsLang) then
exit;
setenv( 'LANG', nsLang.UTF8String, 0 );
end;
initialization
NSSTR_AppleLocale:= NSSTR('AppleLocale');
NSSTR_DARK_NAME:= NSSTR(DarkName);
NSSTR_DARK_NAME_VIBRANT:= NSSTR(DarkNameVibrant);
NSSTR_LINE_FEED:= NSStr(#10);
NSSTR_CARRIAGE_RETURN:= NSStr(#13);
NSSTR_LINE_SEPARATOR:= StrToNSString(#$E2#$80#$A8, false);
NSSTR_PARAGRAPH_SEPARATOR:= StrToNSString(#$E2#$80#$A9, false);
FIX_LANG_ENV_VAR;
finalization;
NSSTR_LINE_SEPARATOR.release;