店铺本地化文件
店铺本地化文件是以 .json
文件扩展名保存的 JSON 文件。它们存储在主题中展示在店铺上的翻译字符串。这些翻译可以通过 SHOPLINE 语言编辑器被商家访问。
与硬编码的文本字符串不同,主题的 layout、templates、snippets 和 sections 可以使用 Handlebars 翻译 helper(t helper)引用这些翻译。这样可以从 locale 文件中返回当前选择的语言的翻译字符串。
使用 t
helper 的时候,你可以使用插入动态值翻译。
位置
店铺本地化文件位于主题的 locales
目录中:
└── theme
...
├── config
└── locales
├── en.json
...
配置定义
店铺本地化文件需要遵循特定的命名结构,同时也遵循基本的组织结构:
- 类别:翻译的顶级类别。
- 组:类别内的第二级翻译分组。
- 描述:第三级,代表单个的翻译。
{
"products": {
"product_list": {
"load_more_tip": "custom text",
...
},
...
},
...
}
命名翻译描述时,尽量提供足够的描述以便给翻译提供上下文。例如:order.order_details.insuranceService_content_email
比 order.order_details.email
提供了更多的上下文。
文件命名
本地化文件的命名必须遵循标准的 IETF 语言标记命名法,其中第一个小写字母代码代表语言,后面以 .json
结尾。例如:
语言 | 名称格式 |
---|---|
English | en.json |
Indonesian | id.json |
Thai | th.json |
比较例外的是中文-简体、中文-繁体,它们分别是:
语言 | 名称格式 |
---|---|
中文-简体 | zh-hans-cn.json |
中文-繁体 | zh-hant-tw.json |
内容
为了确保翻译正确映射,并尽可能简化商家的操作过程,你应该组织你的字段结构以翻译主题结构。
例如,结构的前两级可能如下所示:
第一级 | 第二级 |
---|---|
general | 404、面包屑、搜索(结果页和空态页)、分页 |
blogs | 文章、文章评论、博客侧边栏 |
cart | 购物车内容、更新、注释、结帐链接 |
collection | 分类、分类相关 |
products | 产品、产品相关 |
layout | 一般字段标题和标识符 |
customer | 帐户、订单(列表和详细信息)、帐户激活、地址、登录名、密码、注册 |
contact | 联系表单、表单错误 |
home_page | 空态页、精选、帮助 |
gift_cards | 标题、使用条款 |
如果你在代码片段中使用翻译,那么你应该将它们与最相关的类别分组。例如,如果你有一个名为 related-products.html
的代码片段,那么任何相关的翻译都应该包含在 products
组中。
用法
在处理店铺本地化文件时,请注意以下事项:
引用店铺翻译
要引用主题中当前选择的语言所对应的店铺语言文件中的翻译,可以使用翻译字段和 Handlebars 翻译 helper(t helper)。
例如,假设你有英语、法语和西班牙语的多语言文件。在这种情况下,每个相关语言文件中可能包含以下内容:
/locales/en.default.json (English)
:
{
"products": {
"product_list": {
"load_more_tip": "Loading more items"
}
}
}
/locales/id.json (Indonesian)
:
{
"products": {
"product_list": {
"load_more_tip": "Muat lebih banyak proyek"
}
}
}
/locales/th.json (Thai)
:
{
"products": {
"product_list": {
"load_more_tip": "โหลดรายการเพิ่มเติม"
}
}
}
要引用此翻译,你可以使用如下代码:
<span></span>
在 Handlebars 中引用翻译字段时,必须将它们用单引号(')或双引号(")包裹起来。
输出内容是根据每个多语言文件中的配置定义的:
// English
<span>Your email</span>
// Indonesian
<span>Muat lebih banyak proyek</span>
// Thai
<span>โหลดรายการเพิ่มเติม</span>
插入动态值
翻译字符串可以进行插值操作,这意味着你可以在字符串中包含变量,字符串在 Handlebars 中引用时动态填充。
例如,你可以在你的多语言文件中包含以下内容:
/locales/en.json
:
{
"blog": {
"comment": {
"single_count": "{{count}} comments"
}
}
}
当你在主题中引用该翻译时,可以为 count
变量指定一个值:
/layout/theme.html
:
<h2>
</h2>
将 count
分配值为 5,此代码输出为:
<h2>5 comments</h2>
Error loading component.