DKLang是本地化包。当同一类的两种或多种形式没有被翻译时,我遇到了一个老问题(只有其中一种被翻译,其他的是英文)。我的意思是动态创建的表单。
有人可以解决这个问题吗?DKlang 的作者一年没有回应。
编辑如何查看实际操作:演示项目(6KB RAR,仅限源代码)在此处下载。编译后,按主按钮-您将看到 3 个示例表单实例,第一个已本地化,其他 2 个未本地化。需要非 Unicode Delphi + TNT Unicode Controls + DKLang 3.x
看来我找到了。我的修复是 TDKLang_CompTranslations.FindComponentName 中的两个新行,分别用于名称“Form2_1”、“Form2_2”
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;
现在这是一个相当古老的问题,但为了记录,我想给出正确的答案。
DKLanguageController 有一个SectionName属性。
当使用将被动态实例化的表单或框架时,给 SectionName 一个值。该值对于所有者表单/框架的所有实例都是通用的。
所有翻译都将存储在以SectionName值命名的部分下,而不是表单/框架的名称。
这在文档中有明确说明,无需乱码。