Delphi 本地化DevExpress

Delphi 本地化DevExpress,delphi,localization,devexpress,Delphi,Localization,Devexpress,在丹麦,我正在使用DevExpress创建一个应用程序。 但是我需要将DevExpress控件本地化为说丹麦语。但在我开始工作并自己做翻译之前,我想知道是否有人已经做过了。 我正在使用cxLocalizerEditor创建带有翻译的.ini文件 是否已经有丹麦翻译 有人能本地化自定义资源字符串吗?我不能让它工作 编辑文章以添加我稍后讨论的示例代码。 帮助中的示例如下所示。但我根本没法让它发挥作用。 使用 cxLocalization、dxCore、cxClasses type TForm1

在丹麦,我正在使用DevExpress创建一个应用程序。 但是我需要将DevExpress控件本地化为说丹麦语。但在我开始工作并自己做翻译之前,我想知道是否有人已经做过了。 我正在使用cxLocalizerEditor创建带有翻译的.ini文件

是否已经有丹麦翻译

有人能本地化自定义资源字符串吗?我不能让它工作

编辑文章以添加我稍后讨论的示例代码。 帮助中的示例如下所示。但我根本没法让它发挥作用。 使用 cxLocalization、dxCore、cxClasses

type
  TForm1 = class(TForm, IdxLocalizerListener)
  cxLocalizer1: TcxLocalizer;
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
// ...
  public
    procedure TranslationChanged;
  end;
// ...

procedure TForm1.Create(AOwner: TComponent);
begin
  dxResourceStringsRepository.AddListener(Self);
  inherited Create(AOwner);
end;

procedure TForm1.Destroy;
begin
  dxResourceStringsRepository.RemoveListener(Self);
  inherited;
end;

procedure TForm1.TranslationChanged;
begin
  Caption := cxGetResourceString(@sAppName);
  // ...
end;
但我可以做的是:cxLanguage是我使用Localizer UI使用自定义resourcestring创建的单元,@shPDSettingsCaption只是一个随机resourcestring

unit Unit1;

interface

uses
  cxLocalization, dxCore, cxClasses, cxLanguage,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm, IdxLocalizerListener)
  procedure FormShow(Sender: TObject);
  private
  public
    procedure TranslationChanged;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  TranslationChanged;
end;

procedure TForm1.TranslationChanged;
begin
  Caption := cxGetResourceString(@sHpDbSettingsCaption);
end;


end.

我没有使用cxLocalizerEditor,但对于ResourceString,我使用cxSetResourceString创建了一个常量单位进行翻译,它可以正常工作

unit craDevExpressConsts;

interface

uses
  Classes,
  cxClasses,
  sysutils;

//GetDevExpressResourceString changed in ChangeResourceStrings
procedure ChangeResourceStrings;    
 implementation

uses
  cxFilterConsts,
  cxFilterControlStrs,
  cxEditConsts,
  cxGridStrs;

procedure ChangeResourceStrings;      
begin
  //================================
  // cxFilterControlStrs
  //================================
  // cxFilterBoolOperator
  cxSetResourceString(@cxSFilterBoolOperatorAnd, 'EN');
  cxSetResourceString(@cxSFilterBoolOperatorOr, 'OF');
  cxSetResourceString(@cxSFilterBoolOperatorNotAnd, 'NIET EN'); // not all
  cxSetResourceString(@cxSFilterBoolOperatorNotOr, 'NIET OF'); // not any
  cxSetResourceString(@cxSFilterFooterAddCondition, 'Selectie Toevoegen');


  //================================
  // cxEditConsts
  //================================
  // Invalid input value. Use escape key to abandon changes.
  cxSetResourceString(@cxSEditValidateErrorText, 'Ongeldige invoer waarde. Gebruik escape toets om wijzigingen te annuleren.');

  // Date
  cxSetResourceString(@cxSDatePopupClear, 'Ledigen'); // Clear
  cxSetResourceString(@cxSDatePopupNow, 'Nu'); // Now
  cxSetResourceString(@cxSDatePopupOK, 'Ok'); // OK
  cxSetResourceString(@cxSDatePopupToday, 'Vandaag'); // Today
  cxSetResourceString(@cxSDateError, 'Ongeldige Datum'); // Invalid Date

  ...

 end;

end.

我没有使用cxLocalizerEditor,但对于ResourceString,我使用cxSetResourceString创建了一个常量单位进行翻译,它可以正常工作

unit craDevExpressConsts;

interface

uses
  Classes,
  cxClasses,
  sysutils;

//GetDevExpressResourceString changed in ChangeResourceStrings
procedure ChangeResourceStrings;    
 implementation

uses
  cxFilterConsts,
  cxFilterControlStrs,
  cxEditConsts,
  cxGridStrs;

procedure ChangeResourceStrings;      
begin
  //================================
  // cxFilterControlStrs
  //================================
  // cxFilterBoolOperator
  cxSetResourceString(@cxSFilterBoolOperatorAnd, 'EN');
  cxSetResourceString(@cxSFilterBoolOperatorOr, 'OF');
  cxSetResourceString(@cxSFilterBoolOperatorNotAnd, 'NIET EN'); // not all
  cxSetResourceString(@cxSFilterBoolOperatorNotOr, 'NIET OF'); // not any
  cxSetResourceString(@cxSFilterFooterAddCondition, 'Selectie Toevoegen');


  //================================
  // cxEditConsts
  //================================
  // Invalid input value. Use escape key to abandon changes.
  cxSetResourceString(@cxSEditValidateErrorText, 'Ongeldige invoer waarde. Gebruik escape toets om wijzigingen te annuleren.');

  // Date
  cxSetResourceString(@cxSDatePopupClear, 'Ledigen'); // Clear
  cxSetResourceString(@cxSDatePopupNow, 'Nu'); // Now
  cxSetResourceString(@cxSDatePopupOK, 'Ok'); // OK
  cxSetResourceString(@cxSDatePopupToday, 'Vandaag'); // Today
  cxSetResourceString(@cxSDateError, 'Ongeldige Datum'); // Invalid Date

  ...

 end;

end.

荷兰、德国和意大利都有VCL本地化。我不知道有丹麦语的

关于自定义资源字符串的本地化,您还不太清楚您的确切问题,但支持中心存在几个相关问题:


如果这些都没有帮助,我建议您在DevExpress支持论坛上提出一个新问题。

荷兰、德国和意大利都有VCL本地化。我不知道有丹麦语的

关于自定义资源字符串的本地化,您还不太清楚您的确切问题,但支持中心存在几个相关问题:


如果没有这些帮助,我建议您在DevExpress支持论坛上打开一个新问题。

1-为每个控件创建定位器类

using DevExpress.XtraGrid.Localization;


 using System;    
    using System.Collections.Generic;
    using System.Linq;

    class cls_GridLocalizer : GridLocalizer
        {
 public override string Language { get { return "Arabic"; } }
        public override string GetLocalizedString(GridStringId id)
        {
            string ret = "";
            switch (id)
            {
                case GridStringId.MenuColumnSortAscending: return "فرز تصاعدي";
                case GridStringId.MenuColumnSortDescending: return "فرز تنازلي";
                case GridStringId.MenuColumnClearSorting: return "الغاء 

الفرز";
                    case GridStringId.MenuColumnGroup: return "تجميع حسب هذا العمود";
.
.
.
.
  default:
                    ret = base.GetLocalizedString(id);

                    break;
            }
            return ret;
        }
    }
}
2-从包含网格的表单中调用类:

GridLocalizer.Active = new cls_GridLocalizer();
3-享受


1-为每个控件创建定位器类

using DevExpress.XtraGrid.Localization;


 using System;    
    using System.Collections.Generic;
    using System.Linq;

    class cls_GridLocalizer : GridLocalizer
        {
 public override string Language { get { return "Arabic"; } }
        public override string GetLocalizedString(GridStringId id)
        {
            string ret = "";
            switch (id)
            {
                case GridStringId.MenuColumnSortAscending: return "فرز تصاعدي";
                case GridStringId.MenuColumnSortDescending: return "فرز تنازلي";
                case GridStringId.MenuColumnClearSorting: return "الغاء 

الفرز";
                    case GridStringId.MenuColumnGroup: return "تجميع حسب هذا العمود";
.
.
.
.
  default:
                    ret = base.GetLocalizedString(id);

                    break;
            }
            return ret;
        }
    }
}
2-从包含网格的表单中调用类:

GridLocalizer.Active = new cls_GridLocalizer();
3-享受



您可能需要检查@Nikola:您链接到的页面是关于.NET产品的。OP应该看看。@UlrichGerhardt谢谢。我完全没有注意到delphi标记。@OZ8HP,如果您没有找到cxLocalizer的任何内容,您可能会更幸运地使用已经存在一段时间的cxIntl。您可能可以将cxIntl.ini转换为cxLocalizer。@UlrichGerhardt:我之前看到过taht链接,但没有发现丹麦语言。据我所知,cxIntl是完全不同的方法。我找不到任何比2008年更新的信息。你可能想查看@Nikola:你链接到的页面是关于.NET产品的。OP应该看看。@UlrichGerhardt谢谢。我完全没有注意到delphi标记。@OZ8HP,如果您没有找到cxLocalizer的任何内容,您可能会更幸运地使用已经存在一段时间的cxIntl。您可能可以将cxIntl.ini转换为cxLocalizer。@UlrichGerhardt:我之前看到过taht链接,但没有发现丹麦语言。据我所知,cxIntl是完全不同的方法。我找不到任何比2008年更新的信息,但那不是丹麦的,是吗-不,我是在我的单位手工翻译的,因为我在申请表中只使用荷兰语。当我启动我的应用程序时,我只调用craDevExpressConsts.GetDevExpressResourceString,来自devexpress组件的所有resourcestring都翻译成荷兰语。为了把英语翻译成荷兰语,我使用谷歌翻译来帮助我;为什么设置资源字符串的东西叫做GetResourceString?可怕的名字!ChangeResourceStrings或除Get之外的任何内容@沃伦P:谢谢你的建议。我改了名字,但那不是丹麦的,是吗-不,我是在我的单位手工翻译的,因为我在申请表中只使用荷兰语。当我启动我的应用程序时,我只调用craDevExpressConsts.GetDevExpressResourceString,来自devexpress组件的所有resourcestring都翻译成荷兰语。为了把英语翻译成荷兰语,我使用谷歌翻译来帮助我;为什么设置资源字符串的东西叫做GetResourceString?可怕的名字!ChangeResourceStrings或除Get之外的任何内容@沃伦P:谢谢你的建议。我更改了名称我也找不到任何名称,因此我将自己更改,然后拼写错误将出现在我自己身上:-关于自定义资源字符串,那么我的问题是手册中的示例我无法运行。我还没能在网上找到任何样本。resourcestrings的编写和翻译没有问题。你能发布更多关于无法运行的resourcestrings的信息吗?我假设你必须构建一个资源BPL,并以某种方式注册它,才能使其正常工作?@Warren P:这就是我一直在努力工作的手册中的例子。我不懂操作手册
我现在在这里,但我会看看我是否能在今天晚些时候发布一些信息。现在是丹麦早上6点,我也找不到任何信息,所以我要自己做,然后拼写错误将由我自己决定:-关于自定义资源字符串,我的问题是手册中的示例我无法运行。我还没能在网上找到任何样本。resourcestrings的编写和翻译没有问题。你能发布更多关于无法运行的resourcestrings的信息吗?我假设你必须构建一个资源BPL,并以某种方式注册它,才能使其正常工作?@Warren P:这就是我一直在努力工作的手册中的例子。我现在还没有拿到手册,但我会看看是否能在今天晚些时候发布一些信息,现在是丹麦早上6点