Lazarus:i18n 不翻译应用程序

问题描述

我已经用德语编写了一个 Lazarus 应用程序,现在我想将它翻译成英语。所以我在项目设置中激活了 i18n 并选中了“更新 .po 文件...”。然后,我创建了一个单位 uTranslationStrings 并将 resourcestring example = 'Beispiel'; 放在 implementation 之前。我确保在我的主机中use uTranslationStrings,DefaultTranslator,LCLTranslator。然后,我运行该应用程序并在 Poedit 中打开 projectXY.po 文件。我将所有内容翻译成英文并将其保存为 projectXY.en.po。我为德国语言环境做了同样的事情。此外,我添加一个语言菜单条目,让用户可以在德语和英语之间切换。

procedure TMainForm.MenuDeutschClick(Sender: TObject);
begin
 SetDefaultLang('de');
end;

procedure TMainForm.MenuEnglischClick(Sender: TObject);
begin
 SetDefaultLang('en');
end;

但是当我尝试实际切换语言时,没有任何反应。我认为原因可能是所有的翻译字符串都只是标签标题,所以我在 uMain添加了以下代码

Application.MessageBox(PChar(i18nWarning),PChar(i18nError),MB_ICONERROR);

以及 uTranslationStrings 中的以下代码

resourcestring
  // other strings
  i18nWarning = 'Warnung! Deine Eingabe ist inkorrekt!';
  i18nError = 'Fehler';

但是 MessageBox 始终以德语显示,即使我以 program.exe --lang en 启动我的程序(但请注意,显示的是德语文本 ).

为什么会这样以及如何解决

谢谢!

解决方法

以下是我“解决”问题的方法:我完全删除了 i18n 并重新执行了所有操作(以完全相同的方式)。出于某种原因,它现在确实有效。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...