Delphi FireMonkey APP 如何获得当前系统语言设置

用 Delphi 的 FireMonkey 框架,可以写手机 APP,Android 和 iOS 都支持。

FireMonkey 框架还提供了一个函数:LoadLangFromStrings,加载对应的语言内容,程序界面上的元素会自动显示加载的语言里的文字。比如 TLabel.Text 就会自动变化。这里,TLabel 有一个属性:AutoTranslate,默认是 True,设计期可以在属性编辑器里修改,就是干这个的。


那么,程序要加载相应的语言数据,程序如何知道当前系统的语言设置呢?这里有段代码,来自:https://forums.embarcadero.com/thread.jspa?threadID=108333

uses FMX.Platform{$IFDEF MSWINDOWS},WinAPi.Windows{$ENDIF};

{$R *.fmx}

//以下这个函数,获取当前操作系统的语言设置。比如 Windows 底下,语言为中文,返回 Zh
//这个函数支持各种操作系统。
function GetOSLangID: String;
{$IFDEF MACOS}
var
  Languages: NSArray;
begin
  Languages := TNSLocale.OCClass.preferredLanguages;
  Result := TNSString.Wrap(Languages.objectAtIndex(0)).UTF8String;
{$ENDIF}
{$IFDEF ANDROID}
var
  LocServ: IFMXLocaleService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXLocaleService, IInterface(LocServ)) then
    Result := LocServ.GetCurrentLangID;
{$ENDIF}
{$IFDEF MSWINDOWS}
var
  buffer: MarshaledString;
  UserLCID: LCID;
  BufLen: Integer;
begin
  // defaults
  UserLCID := GetUserDefaultLCID;
  BufLen := GetLocaleInfo(UserLCID, LOCALE_SISO639LANGNAME, nil, 0);
  buffer := StrAlloc(BufLen);
  if GetLocaleInfo(UserLCID, LOCALE_SISO639LANGNAME, buffer, BufLen) <> 0 then
    Result := buffer
  else
    Result := 'en';
  StrDispose(buffer);
{$ENDIF}
end;

上述代码,测试通过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值