Delphi 德尔菲:DKLang:有人能用同一类的两个表单来解决这个问题吗

Delphi 德尔菲:DKLang:有人能用同一类的两个表单来解决这个问题吗,delphi,delphi-7,Delphi,Delphi 7,是本地化包。我有一个老问题,当同一类的两种或两种以上的形式没有翻译(只有第一种是翻译的,其他的是英语)。我指的是动态创建的表单 有人能解决这个问题吗?《DKlang》的作者今年没有回复 编辑 如何在行动中看到:演示项目(6KB RAR,仅限源代码)。 编译后,按主按钮-您将看到示例表单的3个实例,第一个是本地化的,其他2个不是。需要非Unicode Delphi+TNT Unicode控件+3.x 看来我找到了。我的修复是TDKLang_CompTranslations.FindComponen

是本地化包。我有一个老问题,当同一类的两种或两种以上的形式没有翻译(只有第一种是翻译的,其他的是英语)。我指的是动态创建的表单

有人能解决这个问题吗?《DKlang》的作者今年没有回复

编辑 如何在行动中看到:演示项目(6KB RAR,仅限源代码)。 编译后,按主按钮-您将看到示例表单的3个实例,第一个是本地化的,其他2个不是。需要非Unicode Delphi+TNT Unicode控件+3.x


看来我找到了。我的修复是TDKLang_CompTranslations.FindComponentName中的两行新行 哪些是“Form2_1”、“Form2_2”的名称

函数TDKLang\u CompTranslations.FindComponentName(scoComponentName:String):TDKLang\u CompTranslation;
var-idx:整数;
开始
idx:=位置(“”,s组件名称)//补充
如果idx>0,则System.Delete(sComponentName、idx、MaxInt)//补充
idx:=IndexOfComponentName(SCOComponentName);

如果idx这是一个很老的问题,但是为了记录在案,我想给出正确的答案。
DKLanguageController有一个节名属性。
在处理将动态实例化的表单或框架时,请为SectionName指定一个值。此值对于所有者表单/框架的所有实例都是通用的。
所有翻译将存储在名为SectionName值的节下,而不是表单/框架的名称。

文档中明确说明了这一点,无需修改源代码。

许可证允许您自己动手。您尝试了什么?我尝试了查看源代码,无法理解代码,因此无法修复问题。如果某位优秀的组件编写人员能够理解它,我将不胜感激。您还没有完全描述这个问题。如果你真的关心这一点,你会提供一个完整的复制的问题。我添加了演示RAR(仅源代码)到第一篇文章。在编译演示并按下btn后可以看到。请在Form2.FormCreate或FormShow中尝试使用TDKLanguageManager ApplyTranToController到Form2 self.dLanguageController 1不,需要弄乱。我将问题发布给DKL开发者。他同意这是臭虫。修正了,我不敢相信。我使用DKLANG3.01(源代码日期:2006)。我有多个像你揭露的那样的案例,但由于部门名称Property,我从来没有遇到过任何问题,尽管他同意这是个问题。DKLTrue的Github页面,我在Github上找到的。但这样做是没有用的,因为SectionName存在。我仍然认为没有必要“与之混淆”。我被否决的答案是正确的,它尊重DKLang的功能设计。你自己试试看,你就会明白。但是为每个表单设置SectionName是不好的。对于每个具有2个对象的对象。我仍然认为我不想设置SectionName
function TDKLang_CompTranslations.FindComponentName(sComponentName: String): TDKLang_CompTranslation;
  var idx: Integer;
  begin
    idx := Pos('_', sComponentName); //added
    if idx>0 then System.Delete(sComponentName, idx, MaxInt); //added

    idx := IndexOfComponentName(sComponentName);
    if idx<0 then Result := nil else Result := GetItems(idx);
  end;