首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何翻译火猴的资源字符串?

如何翻译火猴的资源字符串?
EN

Stack Overflow用户
提问于 2012-04-18 01:35:13
回答 3查看 3.4K关注 0票数 2

我是и拉兹利安,我需要火猴的资源字符串在我的语言中,例如当我使用对话框时。我找不到方法来翻译它。有人知道怎么做吗?

EN

回答 3

Stack Overflow用户

发布于 2012-04-18 02:09:44

您需要的是类似this的东西,但用于FMX。在快速搜索中,我在help for Delphi XE2中找到的唯一文件是FMX.Consts。您获取该文件,对其进行翻译,然后将翻译后的文件放入您的项目中。

当Delphi得到更新时要小心。原始文件可以更改,您需要更新您的翻译。此外,您可能希望更改包含Resource Strings的任何其他文件,并且该文件正在由您的项目使用。

最后,我不是这方面的专家,但如果你打算使用多语言,这可能不是更好的方法。

票数 1
EN

Stack Overflow用户

发布于 2012-04-18 02:59:04

翻译FMX表单是使用TLang组件完成的,尽管这在大多数对话框中不起作用。

票数 1
EN

Stack Overflow用户

发布于 2016-02-26 04:07:23

您可以使用FMX.Consts.pas更改对话框,但它会在编译期间修复语言。如果要在运行时检查主机操作系统的语言版本,则应更正FMX.Platform.Android.pas或FMX.Platform.iOS.pas。

对于安卓,在FMX.Platform.Android.pas中,在过程TPlatformAndroid.MessageDialog中...找到ButtonCaptions并将其包含在您自己的函数中,例如: ZSTranslate( ButtonCaptionsB)。通过以下方式声明ZSTranslate:

代码语言:javascript
复制
function ZSTranslate(txt: String):String;
var
  LocaleSvc: IFMXLocaleService;
begin
  LocaleSvc :=  TPlatformServices.Current.GetPlatformService(IFMXLocaleService) as IFMXLocaleService;
 result:=txt;
 if LocaleSvc.GetCurrentLangID ='your_language_two_letter_id' then
 begin
   if txt= 'Yes' then
    result := 'yes in your language'
    else
     if txt= 'No' then
      result := 'no in your language'
    else
     if txt= 'Confirm' then
      result := 'confirm in your language'
        else
     if txt= 'Cancel' then
      result := 'cancel in your language';
 end
end;

在FMX.Platform.Android.pas的副本中,将ZSTranslate放在TPlatformAndroid.MessageDialog之上的某个位置,并将此更正版本的FMX.Platform.Android.pas添加到您的项目中。

请注意,上面的例子非常简单,据我所知,在Embarcadero质量系统中有未解决的案例,建议在这里使用translate方法(所以TLang应该可以工作)。我没有尝试翻译,我的版本完成了这项工作(因为对话框中只有几个按钮标签,而我只想要两种不同的语言)。

对于iOS,您应该在FMX.Platform.iOS.pas中查找函数TPlatformCocoaTouch.MessageDialog。请注意,有两个重载版本。在iOS中还有MsgTitles和ButtonCaptions,因为iOS中的对话框显示标题。

PS。对于波兰语,我还必须更正GetCurrentLangID方法,因为它总是返回'en‘-请仔细检查您的语言的结果。适用于我的版本:在FMX.Platform.iOS.pas中:

代码语言:javascript
复制
function TPlatformCocoaTouch.GetCurrentLangID: string;
var
  lngs : NSArray;
  CurrentLocale: NSLocale;
  LanguageISO: NSString;
begin
  lngs := TNSLocale.OCClass.preferredLanguages;
  LanguageISO:= TNSString.Wrap(lngs.objectAtIndex(0));
  //CurrentLocale := TNSLocale.Wrap(TNSLocale.OCClass.currentLocale);
  //LanguageISO := TNSString.Wrap(CurrentLocale.objectForKey((NSLocaleLanguageCode as ILocalObject).GetObjectID));
  Result := UTF8ToString(LanguageISO.UTF8String);
  if Length(Result) > 2 then
    Delete(Result, 3, MaxInt);
end;

在FMX.Platform.Android.pas中:

代码语言:javascript
复制
function TPlatformAndroid.GetCurrentLangID: string;
var
  Locale: JLocale;
begin
  Locale := TJLocale.JavaClass.getDefault;
  Result := JStringToString(Locale.getLanguage);//getISO3Language); //zs
  if Length(Result) > 2 then
    Delete(Result, 3, MaxInt);
end;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10196149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档