@geekron/strapi 0.2.13 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/index.js +2 -2
- package/dist/admin/index.mjs +2 -2
- package/dist/i18n/translations/en/reset/admin.json +10 -0
- package/dist/i18n/translations/en/reset/auth.json +6 -0
- package/dist/i18n/translations/en/reset/content-manager.json +4 -0
- package/dist/i18n/translations/index.ts +230 -0
- package/dist/i18n/translations/zh-Hans/components.json +5 -0
- package/dist/i18n/translations/zh-Hans/console.json +223 -0
- package/dist/i18n/translations/zh-Hans/content-types.json +30 -0
- package/dist/i18n/translations/zh-Hans/plugin.json +32 -0
- package/dist/i18n/translations/zh-Hans/prefix/content-manager.json +321 -0
- package/dist/i18n/translations/zh-Hans/prefix/content-releases.json +106 -0
- package/dist/i18n/translations/zh-Hans/prefix/content-type-builder.json +68 -0
- package/dist/i18n/translations/zh-Hans/prefix/email.json +10 -0
- package/dist/i18n/translations/zh-Hans/prefix/review-workflows.json +17 -0
- package/dist/i18n/translations/zh-Hans/reset/admin.json +213 -0
- package/dist/i18n/translations/zh-Hans/reset/auth.json +6 -0
- package/dist/i18n/translations/zh-Hans/reset/content-manager.json +4 -0
- package/dist/i18n/translations/zh-Hans/reset/content-type-builder.json +228 -0
- package/dist/i18n/translations/zh-Hans/reset/i18n.json +4 -0
- package/i18n/translations/en/reset/admin.json +10 -0
- package/i18n/translations/en/reset/auth.json +6 -0
- package/i18n/translations/en/reset/content-manager.json +4 -0
- package/i18n/translations/zh-Hans/components.json +5 -0
- package/i18n/translations/zh-Hans/console.json +223 -0
- package/i18n/translations/zh-Hans/content-types.json +30 -0
- package/i18n/translations/zh-Hans/plugin.json +32 -0
- package/i18n/translations/zh-Hans/prefix/content-manager.json +321 -0
- package/i18n/translations/zh-Hans/prefix/content-releases.json +106 -0
- package/i18n/translations/zh-Hans/prefix/content-type-builder.json +68 -0
- package/i18n/translations/zh-Hans/prefix/email.json +10 -0
- package/i18n/translations/zh-Hans/prefix/review-workflows.json +17 -0
- package/i18n/translations/zh-Hans/reset/admin.json +213 -0
- package/i18n/translations/zh-Hans/reset/auth.json +6 -0
- package/i18n/translations/zh-Hans/reset/content-manager.json +4 -0
- package/i18n/translations/zh-Hans/reset/content-type-builder.json +228 -0
- package/i18n/translations/zh-Hans/reset/i18n.json +4 -0
- package/package.json +1 -1
package/dist/admin/index.js
CHANGED
|
@@ -50103,13 +50103,13 @@ var register = (app) => {
|
|
|
50103
50103
|
name: "Website"
|
|
50104
50104
|
});
|
|
50105
50105
|
app.addMenuLink({
|
|
50106
|
-
to:
|
|
50106
|
+
to: "website",
|
|
50107
50107
|
icon: import_icons15.ChartPie,
|
|
50108
50108
|
intlLabel: {
|
|
50109
50109
|
id: `${pluginId}.plugin.name`,
|
|
50110
50110
|
defaultMessage: "Website"
|
|
50111
50111
|
},
|
|
50112
|
-
Component:
|
|
50112
|
+
Component: () => Promise.resolve().then(() => (init_App(), exports_App)),
|
|
50113
50113
|
permissions: [],
|
|
50114
50114
|
position: 3
|
|
50115
50115
|
});
|
package/dist/admin/index.mjs
CHANGED
|
@@ -50165,13 +50165,13 @@ var register = (app) => {
|
|
|
50165
50165
|
name: "Website"
|
|
50166
50166
|
});
|
|
50167
50167
|
app.addMenuLink({
|
|
50168
|
-
to:
|
|
50168
|
+
to: "website",
|
|
50169
50169
|
icon: ChartPie3,
|
|
50170
50170
|
intlLabel: {
|
|
50171
50171
|
id: `${pluginId}.plugin.name`,
|
|
50172
50172
|
defaultMessage: "Website"
|
|
50173
50173
|
},
|
|
50174
|
-
Component:
|
|
50174
|
+
Component: () => Promise.resolve().then(() => (init_App(), exports_App)),
|
|
50175
50175
|
permissions: [],
|
|
50176
50176
|
position: 3
|
|
50177
50177
|
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app.components.NpsSurvey.banner-title": "您有多大可能会向朋友或同事推荐极客领航?",
|
|
3
|
+
"app.components.NpsSurvey.feedback-response": "非常感谢您的反馈!",
|
|
4
|
+
"app.components.NpsSurvey.feedback-question": "您有任何改进建议吗?",
|
|
5
|
+
"app.components.NpsSurvey.submit-feedback": "提交反馈",
|
|
6
|
+
"app.components.NpsSurvey.dismiss-survey-label": "关闭问卷",
|
|
7
|
+
"app.components.NpsSurvey.no-recommendation": "完全不可能",
|
|
8
|
+
"app.components.NpsSurvey.happy-to-recommend": "非常愿意",
|
|
9
|
+
"app.components.NpsSurvey.select-rating": "选择评分"
|
|
10
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Auth.form.welcome.subtitle": "Log in to your account",
|
|
3
|
+
"Auth.form.welcome.title": "Hello, Welcome!",
|
|
4
|
+
"Auth.form.register.subtitle": "Credentials are only used to authenticate in Admin panel. All saved data will be stored in your database.",
|
|
5
|
+
"Auth.form.register.news.label": "By doing this you accept the {terms} and the {policy}."
|
|
6
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 为翻译对象添加前缀
|
|
3
|
+
* @param translations - 原始翻译对象
|
|
4
|
+
* @param prefix - 前缀字符串
|
|
5
|
+
* @returns 添加前缀后的翻译对象
|
|
6
|
+
*/
|
|
7
|
+
const addPrefix = (translations: Record<string, any>, prefix: string): Record<string, any> => {
|
|
8
|
+
return Object.keys(translations).reduce((acc, key) => {
|
|
9
|
+
acc[`${prefix}.${key}`] = translations[key];
|
|
10
|
+
return acc;
|
|
11
|
+
}, {} as Record<string, any>);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 判断文件是否在 prefix 目录中(需要添加前缀)
|
|
16
|
+
* @param modulePath - 模块路径
|
|
17
|
+
* @returns 是否在 prefix 目录中
|
|
18
|
+
*/
|
|
19
|
+
const isInPrefixDir = (modulePath: string): boolean => {
|
|
20
|
+
// 检查路径中是否包含 /prefix/ 子串
|
|
21
|
+
return modulePath.includes('/prefix/') || modulePath.includes('\\prefix\\');
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* 从路径中提取文件名(不含扩展名)
|
|
26
|
+
* @param modulePath - 模块路径
|
|
27
|
+
* @returns 文件名
|
|
28
|
+
*/
|
|
29
|
+
const extractFileName = (modulePath: string): string => {
|
|
30
|
+
const match = modulePath.match(/\/([^/]+)\.json$/);
|
|
31
|
+
return match?.[1] || '';
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* 处理单个语言目录下的所有翻译文件
|
|
36
|
+
* @param modules - 导入的模块对象
|
|
37
|
+
* @param locale - 语言代码
|
|
38
|
+
* @param basePath - 基础路径前缀(用于自定义目录)
|
|
39
|
+
* @returns 合并后的翻译对象
|
|
40
|
+
*/
|
|
41
|
+
const processLocaleModules = (
|
|
42
|
+
modules: Record<string, any>,
|
|
43
|
+
locale: string,
|
|
44
|
+
basePath = '.'
|
|
45
|
+
): Record<string, any> => {
|
|
46
|
+
const localePrefix = `${basePath}/${locale}/`;
|
|
47
|
+
|
|
48
|
+
return Object.keys(modules).reduce((acc, modulePath) => {
|
|
49
|
+
// 只处理指定语言目录下的文件
|
|
50
|
+
if (!modulePath.startsWith(localePrefix)) {
|
|
51
|
+
return acc;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const fileName = extractFileName(modulePath);
|
|
55
|
+
if (!fileName) {
|
|
56
|
+
return acc;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const translation = modules[modulePath] as Record<string, any>;
|
|
60
|
+
|
|
61
|
+
// 判断是否在 prefix 目录中,prefix 目录中的文件添加文件名作为前缀
|
|
62
|
+
if (isInPrefixDir(modulePath)) {
|
|
63
|
+
return {
|
|
64
|
+
...acc,
|
|
65
|
+
...addPrefix(translation, fileName)
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// 根目录文件,直接合并(不添加前缀)
|
|
70
|
+
return {
|
|
71
|
+
...acc,
|
|
72
|
+
...translation
|
|
73
|
+
};
|
|
74
|
+
}, {} as Record<string, any>);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 自动发现翻译目录下的所有语言
|
|
79
|
+
* @param modules - 导入的模块对象
|
|
80
|
+
* @param basePath - 基础路径前缀
|
|
81
|
+
* @returns 语言代码数组
|
|
82
|
+
*/
|
|
83
|
+
const discoverLocales = (modules: Record<string, any>, basePath = '.'): string[] => {
|
|
84
|
+
const locales = new Set<string>();
|
|
85
|
+
const pattern = new RegExp(`^${basePath.replace('.', '\\.')}/([^/]+)/`);
|
|
86
|
+
|
|
87
|
+
Object.keys(modules).forEach(modulePath => {
|
|
88
|
+
const match = modulePath.match(pattern);
|
|
89
|
+
if (match?.[1]) {
|
|
90
|
+
locales.add(match[1]);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
return Array.from(locales);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* 深度合并翻译对象(后面的值会覆盖前面的值)
|
|
99
|
+
* @param target - 目标对象(基础对象)
|
|
100
|
+
* @param source - 源对象(覆盖对象,优先级更高)
|
|
101
|
+
* @returns 合并后的新对象
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* const base = { a: { b: 1, c: 2 }, d: 3 };
|
|
105
|
+
* const override = { a: { b: 10 }, e: 4 };
|
|
106
|
+
* const result = deepMerge(base, override);
|
|
107
|
+
* // 结果:{ a: { b: 10, c: 2 }, d: 3, e: 4 }
|
|
108
|
+
* // 说明:override.a.b 覆盖了 base.a.b,但 base.a.c 保留
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
const deepMerge = (
|
|
112
|
+
target: Record<string, any>,
|
|
113
|
+
source: Record<string, any>
|
|
114
|
+
): Record<string, any> => {
|
|
115
|
+
// 创建新对象,避免修改原始对象
|
|
116
|
+
const result = { ...target };
|
|
117
|
+
|
|
118
|
+
// 遍历源对象的所有键
|
|
119
|
+
for (const key in source) {
|
|
120
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
121
|
+
const sourceValue = source[key];
|
|
122
|
+
const targetValue = result[key];
|
|
123
|
+
|
|
124
|
+
// 判断是否需要深度合并(两者都是对象且不是数组)
|
|
125
|
+
const shouldDeepMerge =
|
|
126
|
+
typeof sourceValue === 'object' &&
|
|
127
|
+
sourceValue !== null &&
|
|
128
|
+
!Array.isArray(sourceValue) &&
|
|
129
|
+
typeof targetValue === 'object' &&
|
|
130
|
+
targetValue !== null &&
|
|
131
|
+
!Array.isArray(targetValue);
|
|
132
|
+
|
|
133
|
+
if (shouldDeepMerge) {
|
|
134
|
+
// 递归深度合并对象
|
|
135
|
+
result[key] = deepMerge(targetValue, sourceValue);
|
|
136
|
+
} else {
|
|
137
|
+
// 直接覆盖(包括基本类型、数组、null、undefined)
|
|
138
|
+
result[key] = sourceValue;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return result;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* 翻译加载器配置接口
|
|
148
|
+
*/
|
|
149
|
+
interface TranslationsConfig {
|
|
150
|
+
/** 扩展翻译目录配置数组(自定义目录的值会覆盖默认目录的值) */
|
|
151
|
+
extensions?: Array<{
|
|
152
|
+
/** 扩展目录的模块对象(使用 import.meta.glob 导入) */
|
|
153
|
+
modules: Record<string, any>;
|
|
154
|
+
/** 扩展目录的基础路径(用于路径匹配) */
|
|
155
|
+
basePath?: string;
|
|
156
|
+
}>;
|
|
157
|
+
/** 指定要加载的语言列表,如果不指定则自动发现 */
|
|
158
|
+
locales?: string[];
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* 创建多语言翻译对象
|
|
163
|
+
* @param config - 翻译加载器配置(可选)
|
|
164
|
+
* @returns 以语言为 key 的翻译对象
|
|
165
|
+
*
|
|
166
|
+
* @description
|
|
167
|
+
* 该方法实现了多目录翻译文件的深度合并机制:
|
|
168
|
+
* 1. 自动加载默认目录 (translations/) 下的 JSON 文件
|
|
169
|
+
* 2. 支持扩展自定义目录,可以添加多个自定义来源
|
|
170
|
+
* 3. 合并顺序:默认目录 → 自定义目录 1 → 自定义目录 2 → ...
|
|
171
|
+
* 4. 覆盖机制:后面的目录会 **深度覆盖**前面目录的值
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```typescript
|
|
175
|
+
* // 基础用法:只加载默认目录
|
|
176
|
+
* const t = translations();
|
|
177
|
+
*
|
|
178
|
+
* // 高级用法:加载默认目录 + 自定义扩展目录(自定义目录会深度覆盖默认目录)
|
|
179
|
+
* const t = translations({
|
|
180
|
+
* extensions: [
|
|
181
|
+
* {
|
|
182
|
+
* modules: import.meta.glob('../custom/ * \/ ** \/ *.json', { eager: true, import: 'default' }),
|
|
183
|
+
* basePath: '../custom'
|
|
184
|
+
* }
|
|
185
|
+
* ]
|
|
186
|
+
* });
|
|
187
|
+
*
|
|
188
|
+
* // 指定语言列表
|
|
189
|
+
* const t = translations({
|
|
190
|
+
* locales: ['en', 'zh-Hans', 'zh-Hant']
|
|
191
|
+
* });
|
|
192
|
+
*
|
|
193
|
+
* // 深度覆盖示例:
|
|
194
|
+
* // 默认目录的 en.json: { common: { hello: "Hello", world: "World" }, home: { title: "Home" } }
|
|
195
|
+
* // 自定义目录的 en.json: { common: { hello: "Hi" }, about: { title: "About" } }
|
|
196
|
+
* // 最终结果: { common: { hello: "Hi", world: "World" }, home: { title: "Home" }, about: { title: "About" } }
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
export const translations = (config?: TranslationsConfig): Record<string, Record<string, any>> => {
|
|
200
|
+
const { extensions = [], locales: specifiedLocales } = config || {};
|
|
201
|
+
|
|
202
|
+
// @ts-ignore
|
|
203
|
+
// 自动加载默认翻译目录
|
|
204
|
+
const defaultModules = import.meta.glob('./*/**/*.json', { eager: true, import: 'default' });
|
|
205
|
+
|
|
206
|
+
// 收集所有模块(默认目录在前,自定义目录在后,确保自定义目录覆盖默认目录)
|
|
207
|
+
const allModuleSources = [
|
|
208
|
+
{ modules: defaultModules, basePath: '.' },
|
|
209
|
+
...extensions
|
|
210
|
+
];
|
|
211
|
+
|
|
212
|
+
// 自动发现所有语言或使用指定的语言列表
|
|
213
|
+
const allLocales = specifiedLocales || [
|
|
214
|
+
...new Set(
|
|
215
|
+
allModuleSources.flatMap(({ modules, basePath = '.' }) =>
|
|
216
|
+
discoverLocales(modules, basePath)
|
|
217
|
+
)
|
|
218
|
+
)
|
|
219
|
+
];
|
|
220
|
+
|
|
221
|
+
// 为每个语言构建翻译对象
|
|
222
|
+
return allLocales.reduce((result, locale) => {
|
|
223
|
+
// 合并所有来源的翻译(后面的会覆盖前面的)
|
|
224
|
+
result[locale] = allModuleSources.reduce((acc, {modules, basePath = '.'}) => {
|
|
225
|
+
const localeTranslations = processLocaleModules(modules, locale, basePath);
|
|
226
|
+
return deepMerge(acc, localeTranslations);
|
|
227
|
+
}, {} as Record<string, any>);
|
|
228
|
+
return result;
|
|
229
|
+
}, {} as Record<string, Record<string, any>>);
|
|
230
|
+
};
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
{
|
|
2
|
+
"content-manager.plugin.name": "内容管理",
|
|
3
|
+
"website.plugin.name": "网站",
|
|
4
|
+
"Translation": "翻译",
|
|
5
|
+
"About": "关于",
|
|
6
|
+
"Common": "通用",
|
|
7
|
+
"Home": "首页",
|
|
8
|
+
"Menu": "菜单",
|
|
9
|
+
"Site": "站点",
|
|
10
|
+
"Theme": "主题",
|
|
11
|
+
"search.placeholder": "搜索",
|
|
12
|
+
"website.widget.title": "仪表盘",
|
|
13
|
+
"website.widget.link": "前往内容管理",
|
|
14
|
+
"website.data-nested.modal.edit.title": "编辑项目",
|
|
15
|
+
"website.data-nested.modal.title": "标题",
|
|
16
|
+
"website.data-nested.modal.title.placeholder": "输入标题...",
|
|
17
|
+
"website.data-nested.modal.url": "网址",
|
|
18
|
+
"website.data-nested.modal.url.placeholder": "输入网址...",
|
|
19
|
+
"website.data-nested.modal.data": "数据",
|
|
20
|
+
"website.data-nested.modal.select-data": "选择数据",
|
|
21
|
+
"website.data-nested.modal.cancel": "取消",
|
|
22
|
+
"website.data-nested.modal.save": "保存",
|
|
23
|
+
"content-manager.containers.list.table-headers.status": "状态",
|
|
24
|
+
"i18n.list-view.table.header.label": "可用语言",
|
|
25
|
+
"list.asset.at.finished": "文件夹加载完成",
|
|
26
|
+
"global.more.actions": "更多操作",
|
|
27
|
+
"content-type-builder.search.placeholder": "搜索",
|
|
28
|
+
"chat.tooltips.open-chat": "打开聊天",
|
|
29
|
+
"chat.tooltips.close-chat": "关闭聊天",
|
|
30
|
+
"chat.tooltips.create-chat": "新建对话",
|
|
31
|
+
"chat.header.default-title": "新对话",
|
|
32
|
+
"chat.input.strapi-ai-can-make-errors": "Strapi AI 可能会出错",
|
|
33
|
+
"plugin::website.translation": "翻译",
|
|
34
|
+
"api::about.about": "关于",
|
|
35
|
+
"plugin::website.common": "通用",
|
|
36
|
+
"api::home.home": "首页",
|
|
37
|
+
"plugin::website.menu": "菜单",
|
|
38
|
+
"plugin::website.site": "网站",
|
|
39
|
+
"plugin::website.theme": "主题",
|
|
40
|
+
"base": "基础",
|
|
41
|
+
"base.image": "图片",
|
|
42
|
+
"base.video": "视频",
|
|
43
|
+
"site": "网站",
|
|
44
|
+
"site.banner": "横幅",
|
|
45
|
+
"site.social": "社交媒体",
|
|
46
|
+
"app.utils.drag": "拖拽",
|
|
47
|
+
"app.utils.toggle": "切换",
|
|
48
|
+
"Settings.application.header": "应用程序",
|
|
49
|
+
"review-workflows.plugin.name": "审核工作流",
|
|
50
|
+
"global.plugins.website": "网站管理",
|
|
51
|
+
"global.plugins.website.description": "极客领航网站管理插件",
|
|
52
|
+
"components.Select.placeholder": "请选择",
|
|
53
|
+
"User": "用户",
|
|
54
|
+
"Article": "文章",
|
|
55
|
+
"Article Category": "文章分类",
|
|
56
|
+
"Author": "作者",
|
|
57
|
+
"Global": "全局",
|
|
58
|
+
"Category": "分类",
|
|
59
|
+
"Visitor": "访客",
|
|
60
|
+
"Tag": "标签",
|
|
61
|
+
"Keyword": "关键词",
|
|
62
|
+
"Page": "页面",
|
|
63
|
+
"FAQ": "常见问题",
|
|
64
|
+
"Case": "案例",
|
|
65
|
+
"Case Category": "案例分类",
|
|
66
|
+
"Service": "服务子项",
|
|
67
|
+
"Service Category": "服务大类",
|
|
68
|
+
"Solution": "应用场景",
|
|
69
|
+
"Solution Category": "解决方案",
|
|
70
|
+
"Contact": "联系我们",
|
|
71
|
+
"Search": "搜索",
|
|
72
|
+
"Product": "产品",
|
|
73
|
+
"Product Item": "产品子项",
|
|
74
|
+
"Product Category": "产品类型",
|
|
75
|
+
"menu": "菜单",
|
|
76
|
+
"menu.items": "菜单项",
|
|
77
|
+
"menu.base": "基础菜单",
|
|
78
|
+
"menu.children-one": "一级子菜单",
|
|
79
|
+
"menu.children-two": "二级子菜单",
|
|
80
|
+
"menu.page": "页面",
|
|
81
|
+
"shared.contact": "联系方式",
|
|
82
|
+
"dashboard.widget.title": "仪表盘总览",
|
|
83
|
+
"dashboard.widget.link": "前往内容管理",
|
|
84
|
+
"api::common.common": "通用",
|
|
85
|
+
"api::menu.menu": "主菜单",
|
|
86
|
+
"api::article.article": "文章",
|
|
87
|
+
"api::author.author": "作者",
|
|
88
|
+
"api::category.category": "分类",
|
|
89
|
+
"api::tag.tag":"标签",
|
|
90
|
+
"api::visitor.visitor":"访客",
|
|
91
|
+
"api::global.global": "全局",
|
|
92
|
+
"api::keyword.keyword": "关键词",
|
|
93
|
+
"api::translation.translation": "翻译",
|
|
94
|
+
"api::article-category.article-category": "文章分类",
|
|
95
|
+
"api::site.site":"网站设置",
|
|
96
|
+
"home":"首页用",
|
|
97
|
+
"shared": "共享",
|
|
98
|
+
"home.customers":"合作客户",
|
|
99
|
+
"home.testimonials":"客户评价",
|
|
100
|
+
"shared.image":"图片",
|
|
101
|
+
"shared.block": "区块",
|
|
102
|
+
"shared.rich-text": "富文本",
|
|
103
|
+
"shared.slider": "滑块",
|
|
104
|
+
"shared.media": "媒体文件",
|
|
105
|
+
"shared.quote": "引用",
|
|
106
|
+
"shared.seo": "SEO",
|
|
107
|
+
"shared.resource": "资源",
|
|
108
|
+
"shared.social-media": "社交媒体",
|
|
109
|
+
"shared.link": "链接",
|
|
110
|
+
"shared.link-list": "链接列表",
|
|
111
|
+
"shared.menu": "菜单",
|
|
112
|
+
"shared.menu-2": "菜单2",
|
|
113
|
+
"shared.menu-3": "菜单3",
|
|
114
|
+
"shared.dataset": "数据集",
|
|
115
|
+
"dashboard.plugin.name": "网站数据",
|
|
116
|
+
"api::case.case": "案例",
|
|
117
|
+
"api::case-category.case-category": "案例分类",
|
|
118
|
+
"api::faq.faq": "常见问题",
|
|
119
|
+
"api::page.page": "页面",
|
|
120
|
+
"api::service.service": "服务子项",
|
|
121
|
+
"api::service-category.service-category": "服务大类",
|
|
122
|
+
"api::solution.solution": "应用场景",
|
|
123
|
+
"api::solution-category.solution-category": "解决方案",
|
|
124
|
+
"api::contact.contact": "联系我们",
|
|
125
|
+
"api::search.search": "搜索",
|
|
126
|
+
"api::product.product": "产品",
|
|
127
|
+
"api::product-category.product-category": "产品类型",
|
|
128
|
+
"blocks": "区块",
|
|
129
|
+
"blocks.cases": "案例区块",
|
|
130
|
+
"home.cases": "首页案例",
|
|
131
|
+
"shared.file": "文件",
|
|
132
|
+
"shared.office": "办公室",
|
|
133
|
+
"shared.youtube": "YouTube",
|
|
134
|
+
"api::product-item.product-item": "产品子项",
|
|
135
|
+
"view-switch.list": "列表视图",
|
|
136
|
+
"plugin::users-permissions.user": "用户",
|
|
137
|
+
"upload.modal.upload-list.sub-header.add-folder": "添加文件夹",
|
|
138
|
+
"cancel": "取消",
|
|
139
|
+
"pages.PurchaseRelease.description": "将内容分组并一起发布更新",
|
|
140
|
+
"pages.PurchaseRelease.perks1": "向发布版本添加多个条目",
|
|
141
|
+
"pages.PurchaseRelease.perks2": "快速识别包含错误的条目",
|
|
142
|
+
"pages.PurchaseRelease.perks3": "安排发布时间或手动发布",
|
|
143
|
+
"global.plugins.strapi-cloud": "Strapi 云服务",
|
|
144
|
+
"global.plugins.strapi-cloud.description": "将本地项目部署到 Strapi 云服务的说明",
|
|
145
|
+
"Settings.review-workflows.list.page.title": "审核流程",
|
|
146
|
+
"Settings.roles.form.permissions.create (invite)": "创建(邀请)",
|
|
147
|
+
"settings.page.purchase.description": "管理您的内容审核流程",
|
|
148
|
+
"settings.page.purchase.perks1": "可自定义的审核阶段",
|
|
149
|
+
"settings.page.purchase.perks2": "管理用户权限",
|
|
150
|
+
"settings.page.purchase.perks3": "支持 Webhook",
|
|
151
|
+
"users-permissions.List.button.roles": "添加新角色",
|
|
152
|
+
"users-permissions.[object Object]": "JWKS URL",
|
|
153
|
+
"http://www.client-app.com": "http://www.client-app.com",
|
|
154
|
+
"global.localeToggle.label": "选择界面语言",
|
|
155
|
+
"app.components.LeftMenuLinkContainer.settings": "设置",
|
|
156
|
+
"article": "文章",
|
|
157
|
+
"author": "作者",
|
|
158
|
+
"category": "分类",
|
|
159
|
+
"user": "用户",
|
|
160
|
+
"users and roles": "用户和角色",
|
|
161
|
+
"users": "用户",
|
|
162
|
+
"roles": "角色",
|
|
163
|
+
"project": "项目",
|
|
164
|
+
"general": "通用",
|
|
165
|
+
"transfer tokens": "传输令牌",
|
|
166
|
+
"api tokens": "API令牌",
|
|
167
|
+
"api Tokens": "API令牌",
|
|
168
|
+
"webhooks": "Web钩子",
|
|
169
|
+
"plugins and marketplace": "插件和市场",
|
|
170
|
+
"marketplace": "市场",
|
|
171
|
+
"Internationalization": "国际化",
|
|
172
|
+
"Locales": "语言环境",
|
|
173
|
+
"media library": "媒体库",
|
|
174
|
+
"email": "邮箱",
|
|
175
|
+
"content-manager": "内容管理器",
|
|
176
|
+
"single types": "单类型",
|
|
177
|
+
"collection types": "集合类型",
|
|
178
|
+
"components": "组件",
|
|
179
|
+
"content-type-builder": "内容类型构建器",
|
|
180
|
+
"upload": "上传",
|
|
181
|
+
"assets": "资源",
|
|
182
|
+
"users-permissions": "用户权限",
|
|
183
|
+
"providers": "提供商",
|
|
184
|
+
"emailTemplates": "邮件模板",
|
|
185
|
+
"advancedSettings": "高级设置",
|
|
186
|
+
"about": "关于",
|
|
187
|
+
"global": "全局",
|
|
188
|
+
"content-type-builder.attribute.null.description": "用于数据建模的类型",
|
|
189
|
+
"window.confirm.close-modal.file": "您确定吗?您的更改将会丢失。",
|
|
190
|
+
"form.attribute.condition.no-fields": "没有可用的布尔值或枚举字段来设置条件。",
|
|
191
|
+
"form.attribute.condition.apply": "应用条件",
|
|
192
|
+
"app.components.Select.placeholder": "请选择",
|
|
193
|
+
"global.administrator-mh4649ok": "管理员",
|
|
194
|
+
"global.strapi-author": "作者",
|
|
195
|
+
"global.strapi-editor": "编辑者",
|
|
196
|
+
"global.strapi-super-admin": "超级管理员",
|
|
197
|
+
"components.placeholder.select": "请选择",
|
|
198
|
+
"Keywords": "关键词",
|
|
199
|
+
"content-manager.apiError.Policy Failed": "策略失败",
|
|
200
|
+
"title.no-override": "标题",
|
|
201
|
+
"description.no-override": "描述",
|
|
202
|
+
"name.no-override": "名称",
|
|
203
|
+
"content-type-builder.contentType.draftAndPublish.description": "允许在发布前编写条目的草稿版本",
|
|
204
|
+
"content-type-builder.contentType.draftAndPublish.label": "草稿与发布",
|
|
205
|
+
"i18n.CheckboxConfirmation.Modal.title": "禁用本地化",
|
|
206
|
+
"containers.SettingPage.editSettings.description": "拖拽字段以构建布局",
|
|
207
|
+
"content-manager.containers.SettingPage.edit-settings.modal-form.mainField.hint": "设置显示字段",
|
|
208
|
+
"content-manager.containers.ListSettingsView.modal-form.size": "大小",
|
|
209
|
+
"components.LeftMenu.collection-types": "集合类型",
|
|
210
|
+
"components.LeftMenu.single-types": "单类型",
|
|
211
|
+
"components.LeftMenu.collectionTypes": "集合类型",
|
|
212
|
+
"components.LeftMenu.singleTypes": "单类型",
|
|
213
|
+
"tours.previous":"下一步",
|
|
214
|
+
"Settings.tokens.viewToken":"查看 Token",
|
|
215
|
+
"Settings.tokens.copy.copy":"复制",
|
|
216
|
+
"upload.header.breadcrumbs.nav.label": "文件夹导航",
|
|
217
|
+
"upload.header.actions.folder-level-up": "返回上一级",
|
|
218
|
+
"content-manager.content-types.api::article-category.article-category.description": "描述",
|
|
219
|
+
"content-manager.content-types.api::keyword.keyword.seo": "SEO 优化",
|
|
220
|
+
"actions.delete.label": "删除条目({locale})",
|
|
221
|
+
"geodata.geojson.section.info": "设置信息",
|
|
222
|
+
"geodata.geojson.info.label": "每个内容类型只允许一个 GeoJSON 字段"
|
|
223
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"content-manager.content-types.plugin::website.common.title": "标题",
|
|
3
|
+
"content-manager.content-types.plugin::website.common.description": "描述",
|
|
4
|
+
"content-manager.content-types.plugin::website.common.copyright": "版权",
|
|
5
|
+
"content-manager.content-types.plugin::website.common.icp": "ICP 备案",
|
|
6
|
+
"content-manager.content-types.plugin::website.common.socials": "社交媒体",
|
|
7
|
+
"content-manager.content-types.plugin::website.common.footLinks": "底部链接",
|
|
8
|
+
"content-manager.content-types.plugin::website.theme.style": "样式",
|
|
9
|
+
"content-manager.content-types.plugin::website.theme.logo": "Logo",
|
|
10
|
+
"content-manager.content-types.plugin::website.theme.icon": "图标",
|
|
11
|
+
"content-manager.content-types.plugin::website.theme.styles": "样式列表",
|
|
12
|
+
"content-manager.content-types.plugin::website.theme.scripts": "脚本列表",
|
|
13
|
+
"content-manager.content-types.plugin::website.site.title": "标题",
|
|
14
|
+
"content-manager.content-types.plugin::website.site.url": "网址",
|
|
15
|
+
"content-manager.content-types.plugin::website.site.enabled": "启用状态",
|
|
16
|
+
"content-manager.content-types.plugin::website.site.index": "首页配置",
|
|
17
|
+
"content-manager.content-types.plugin::website.site.robots": "robots.txt",
|
|
18
|
+
"content-manager.content-types.plugin::website.site.head": "页面头部",
|
|
19
|
+
"content-manager.content-types.plugin::website.site.foot": "页面底部",
|
|
20
|
+
"content-manager.content-types.plugin::website.site.gtagId": "Google Analytics ID",
|
|
21
|
+
"content-manager.content-types.plugin::website.site.inquiryEmail": "咨询邮箱",
|
|
22
|
+
"content-manager.content-types.plugin::website.menu.title": "标题",
|
|
23
|
+
"content-manager.content-types.plugin::website.menu.items": "菜单项",
|
|
24
|
+
"content-manager.content-types.plugin::website.translation.id": "ID",
|
|
25
|
+
"content-manager.content-types.plugin::website.translation.key": "键名",
|
|
26
|
+
"content-manager.content-types.plugin::website.translation.value": "值",
|
|
27
|
+
"content-manager.content-types.plugin::website.translation.createdAt": "创建时间",
|
|
28
|
+
"content-manager.content-types.api::about.about.title": "标题",
|
|
29
|
+
"content-manager.content-types.api::home.home.title": "标题"
|
|
30
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"website.plugin.name": "网站管理",
|
|
3
|
+
"website.widget.title": "仪表盘",
|
|
4
|
+
"website.widget.link": "前往内容管理",
|
|
5
|
+
"website.menu.dashboard": "Dashboard 主页",
|
|
6
|
+
"website.menu.inquiry": "询盘列表",
|
|
7
|
+
"website.menu.visitor": "访客记录",
|
|
8
|
+
"website.fields.slugInput.label": "URL 别名",
|
|
9
|
+
"website.fields.slugInput.description": "输入 URL 友好的别名",
|
|
10
|
+
"website.fields.slugInput.available": "可用",
|
|
11
|
+
"website.fields.slugInput.unavailable": "不可用",
|
|
12
|
+
"website.fields.slugInput.regenerate": "重新生成",
|
|
13
|
+
"website.slug-input.input.aria-label": "Slug 输入框",
|
|
14
|
+
"website.slug-input.input.placeholder": "输入文本将自动转换为 slug",
|
|
15
|
+
"website.slug-input.preview.label": "Slug 预览:",
|
|
16
|
+
"website.slug-input.check-availability.error": "检查可用性失败",
|
|
17
|
+
"website.color-picker.toggle.aria-label": "颜色选择器切换",
|
|
18
|
+
"website.color-picker.input.format": "HEX",
|
|
19
|
+
"website.color-picker.input.aria-label": "颜色选择器输入",
|
|
20
|
+
"website.icon-picker.toggle.aria-label": "图标选择器切换",
|
|
21
|
+
"website.icon-picker.placeholder": "选择图标",
|
|
22
|
+
"website.icon-picker.title": "选择图标",
|
|
23
|
+
"website.icon-picker.back": "返回",
|
|
24
|
+
"website.icon-picker.search": "搜索图标...",
|
|
25
|
+
"website.icon-picker.loading": "加载中...",
|
|
26
|
+
"website.icon-picker.no-icons": "未找到图标",
|
|
27
|
+
"website.data-nested.modal.add.title": "添加项目",
|
|
28
|
+
"website.data-nested.modal.add": "添加",
|
|
29
|
+
"website.data-select.toggle.aria-label": "数据选择切换",
|
|
30
|
+
"website.data-select.title": "选择数据",
|
|
31
|
+
"website.data-select.search": "搜索内容类型..."
|
|
32
|
+
}
|