GUI开发阶段的本地化

时间:2017-10-01 20:53:55

标签: xml localization lazarus freepascal

我正在为世界上许多用户编写应该免费的软件。我希望为用户(社区)提供一个机会来自己浏览GUI的任何语言环境。我不认为在二进制版本或库中嵌入任何语言环境是个好主意(例如* .dll,* .so等)。 Lazarus + Free Pascal 3.0.2。某些组件(例如textlables,menuitems)具有名称和标题属性。我计划制作一个XML文件(lang_en.xml,lang_de.xml等),其中包含'key:value'属性,如:

<tag name="ComponentName" value="ComponentCaption" />

,并从文件中获取它以通过运行时分配程序的组件。这是我的问题:

  1. 问题的解决方案令人满意吗?如果没有,您建议阅读哪些信息以更完美地实现自定义本地化?
  2. 我对在积极优化之后在二进制程序中保存Component.Name值有一些疑问。如果它是真的,那另一个配对键:值类型我必须使用?

2 个答案:

答案 0 :(得分:1)

将LCLTranslator或DefaultTranslator添加到主窗体的uses子句,将字符串声明为resourcestrings,并在项目设置中激活i18n选项通常足以使您的程序可翻译(好吧,90%...... - 需要一些调整在这里和那里)

查看教程http://wiki.lazarus.freepascal.org/Step-by-step_instructions_for_creating_multi-language_applications,其中介绍了如何使用基于po文件的Lazarus本地化系统。一般概念在http://wiki.lazarus.freepascal.org/Translations_/i18n/_localizations_for_programs中解释。在Lazarus安装文件夹 examples / translation 中找到一个工作示例。

答案 1 :(得分:0)

Afaik Lazarus有一个自己的gettext实现,直接读取.po文本。

您的解决方案是零订单,需要进行大量额外的改进和思考。要考虑入门的一些事情:

  1. Componentname在表单中仅是唯一的,因此您至少需要一个与类似表单不同的级别。
  2. 不同名称的组件名可能需要相同的文字。
  3. 原始语言中的文本可能会对其中一种翻译语言中的内容使用相同的单词。应该有一种方法来覆盖。
  4. gettext支持多种语言的倍数(一头母牛,两头母牛,三头母牛)。对于“更多”
  5. ,有些使用不同的“两个”后缀

    至少开始研究那里有什么(lazarus翻译系统和gettext得到它的一些原则)以及背后的设计原因。

    莫尔