自定义翻译
From LimeSurvey Manual
简介
自 LimeSurvey 5.4.0 起,您可以通过直接访问数据库,为所有已包含语言中的所有字符串设置自己的翻译。
如果现有翻译不符合您的业务需求,可以使用此系统。
此方法应仅用于特定情况,因为对 LimeSurvey 核心文本的修改在日后仍需要您再次修改数据库。
此外,您还可以使用此方法翻译问卷主题特有的字符串。
数据库翻译的工作原理
对于数据库翻译,LimeSurvey 使用的方法受 Yii 框架中的 CDbMessageSource 启发。
- 在 SourceMessage 表 lime_source_message->message 中查找该字符串,获取其 id:lime_source_message->id
- 如果存在,则在 Message 表 lime_message->translation 中,按当前语言 lime_message->language 和当前 id lime_message->id 查找相关翻译
LimeSurvey 会从 po 文件创建翻译数组(有关如何更新该文件的信息,请参见 翻译 LimeSurvey),然后将其与数据库中的所有翻译合并。
如果数据库中存在翻译,则始终返回数据库中的翻译。
英语和法语“提交”按钮示例
假设您希望在所有问卷(使用特定主题)中,让提交按钮显示 _Validate_ 而不是 _Submit_。如果您只是更新主题,将 gT('Submit') 替换为 gT('Validate'),则所有语言下都会显示 _Validate_。
适用于所有主题下的所有问卷
- 创建源消息
INSERT INTO lime_source_message (id, category, message) VALUES (NULL, '', 'Submit'); - 查看 ID(如果是第一条,则 ID 为 1),并在下一步中使用它
- 创建相关翻译:
INSERT INTO lime_message (id, language, translation) VALUES ('1', 'en', 'Validate'), ('1', 'fr', 'Valider');
请勿将字符串替换为空字符串,否则翻译将回退为原始英文句子。您必须至少包含一个空格。
使用您自己的主题(推荐方案)
此方法使用您自己的模板,同时也会更新所有其他语言的默认字符串。
- 在主题编辑器中选择 Navigation 部分
- 搜索
Template:GT("Submit")(位于 navigator.twig 中) - 替换为
Template:GT("Validate") - 创建源消息
INSERT INTO lime_source_message (id, category, message) VALUES (NULL, '', 'Validate'); - 查看 ID(如果是第一条,则 ID 为 1),并在下一步中使用它
- 创建相关翻译:
INSERT INTO lime_message (id, language, translation) VALUES ('1', 'fr', 'Valider');
请注意
lime_source_message 中的 category 字段必须是空字符串(''),而不是 NULL。如果类别不完全匹配,gT() 将无法找到源消息,您的翻译也不会生效。在为主题特有的字符串添加翻译时,这一点尤为重要。