如何在自定义 Frappe 应用中添加和管理翻译:分步指南
1. 创建 translations 文件夹
步骤:
在您的自定义应用目录中,于以下位置创建一个名为 translations 的文件夹:
apps/your-app/your-app/translations/
为什么?
Frappe 会自动检测此文件夹。它遵循“约定优于配置”的原则,因此将翻译文件放在此处可确保它们无需额外设置即可被识别。
2. 添加翻译 CSV 文件
步骤:
在 translations 文件夹中为每种语言创建一个 CSV 文件。例如:
ar.csv(阿拉伯语)
es.csv(西班牙语)
CSV 结构:
"source_string","translated_string","context"
"agent","توكيل",""
"continue","إستكمال",""
为什么?
- 第 1 列(
source_string):代码中使用的原始字符串(例如:_("continue"))。
- 第 2 列(
translated_string):该字符串的翻译版本。
- 第 3 列(
context):可选。用于澄清翻译的上下文。
第三列是可选的,可以留空。
3. 在代码中使用可翻译字符串
步骤:
在您的 Python、HTML 或 JavaScript 代码中使用 _() 包裹字符串:
from frappe import _
def my_function():
message = _("continue") # Will be replaced with "إستكمال" for Arabic users
为什么?
_() 函数将字符串标记为可翻译。在运行时,Frappe 会根据用户的语言偏好替换它们。
4. 构建站点
仅当您在自定义前端 JS 中使用 __() 并更改了 JS 文件时才需要。
步骤:
运行构建命令:
bench --site your-site build
5. 验证翻译
步骤:
- 在 Frappe 中将用户语言切换为阿拉伯语(或目标语言)。
- 检查
_("continue") 现在是否显示为 "إستكمال"。
为什么?
这确认了 Frappe 能正确地将源字符串映射到其对应的翻译版本。
关键说明
语言代码
- CSV 文件名必须与 Frappe 的语言代码匹配(例如:阿拉伯语为
ar)。
- 您可以在 Frappe > 语言设置 中找到这些代码。
文件夹位置
translations 文件夹必须位于应用包目录的根目录(不能在子模块内)。
- 翻译在构建期间会被缓存。
- 编辑翻译文件后,务必重启 bench。
回退行为
- 如果某个字符串未被翻译,Frappe 将使用原始(源)字符串。
我需要构建或迁移站点吗?
不需要,Frappe 会根据登录用户的语言偏好,在运行时动态从您的 translations/lang.csv 文件中加载翻译。
您只需刷新浏览器或在必要时清除缓存即可。
仅当您在自定义前端 JS 中使用 __() 并更改了 JS 文件时,才需要 bench build。
示例工作流程
-
创建:
apps/my_app/my_app/translations/ar.csv
-
添加条目:
"welcome_message","مرحبا بك!",""
-
在代码中使用:
_("welcome_message")
-
清除缓存:
- 构建:
- 在阿拉伯语界面中进行测试。
解释上下文?
上下文本质上是一种元数据,
用于向翻译使用者说明该翻译应在何时何地使用。
因为有时同一个词会有不同的含义。
例如:
"charge","شحن",""
"charge","رسوم",""
这里我们有相同的词,但含义不同(使用上下文不同)
因此,为了区分它们,我们需要为其提供上下文。
"charge","شحن","mobile phone charge"
"charge","رسوم","invoice line"
在代码中:
_("charge") # here we don't know which meaning (context to use)
_("charge", context="mobile phone charge") # here we mean شحن
_("charge", context="invoice line") # here we mean رسوم