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;  

相关阅读 >>

Delphi char数组、string和pchar的相互转换

Delphi多线程学习:多线程数据库查询(ado)

Delphi中indy10 的idtcpserver断开客户端连接报错问题的解决办法

Delphi setprivilege 提权代码

Delphi 内存管理[5]

Delphi中 tstringlist和thashedstringlist的性能对比

Delphi通过idsmtp发送邮件的简单代码

Delphi写一个utf8编码格式的文本文件

Delphi 对比两个文件是否相同的函数

Delphi 限制窗体大小的最大值与最小值

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...