Skip to content

Commit 11b3197

Browse files
committed
✨ Feature: finish i18n text
1 parent a649fcc commit 11b3197

File tree

15 files changed

+187
-60
lines changed

15 files changed

+187
-60
lines changed

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@
2929
"upyun",
3030
"weibo"
3131
],
32-
"typescript.tsdk": "node_modules\\typescript\\lib"
32+
"typescript.tsdk": "node_modules/typescript/lib"
3333
}

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"@types/fs-extra": "^5.0.4",
6161
"@types/image-size": "^0.0.29",
6262
"@types/inquirer": "^0.0.42",
63+
"@types/js-yaml": "^4.0.5",
6364
"@types/lodash": "^4.14.175",
6465
"@types/md5": "^2.1.32",
6566
"@types/mime-types": "^2.1.0",
@@ -106,6 +107,7 @@
106107
"image-size": "^0.8.3",
107108
"inquirer": "^6.0.0",
108109
"is-wsl": "^2.2.0",
110+
"js-yaml": "^4.1.0",
109111
"lodash": "^4.17.21",
110112
"md5": "^2.2.1",
111113
"mime-types": "2.1.33",

src/core/PicGo.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ export class PicGo extends EventEmitter implements IPicGo {
118118

119119
getConfig<T> (name?: string): T {
120120
if (!name) {
121-
console.log(this._config)
122121
return this._config as unknown as T
123122
} else {
124123
return get(this._config, name)

src/i18n/en.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ export const EN: ILocales = {
2222
PICBED_ALICLOUD_PATH: 'Set Path',
2323
PICBED_ALICLOUD_CUSTOMURL: 'Set Custom URL',
2424
PICBED_ALICLOUD_OPTIONS: 'Set URL Suffix',
25+
PICBED_ALICLOUD_MESSAGE_AREA: 'Ex. oss-cn-beijing',
26+
PICBED_ALICLOUD_MESSAGE_PATH: 'Ex. test/',
27+
PICBED_ALICLOUD_MESSAGE_OPTIONS: 'Ex. ?x-oss-process=xxx',
28+
PICBED_ALICLOUD_MESSAGE_CUSTOMURL: 'Ex. https://test.com',
2529

2630
// Tencent-cloud
2731
PICBED_TENCENTCLOUD: 'Tencent Cloud',
@@ -32,7 +36,13 @@ export const EN: ILocales = {
3236
PICBED_TENCENTCLOUD_BUCKET: 'Set Bucket',
3337
PICBED_TENCENTCLOUD_AREA: 'Set Area',
3438
PICBED_TENCENTCLOUD_PATH: 'Set Path',
39+
PICBED_TENCENTCLOUD_OPTIONS: 'Set URL Suffix',
3540
PICBED_TENCENTCLOUD_CUSTOMURL: 'Set Custom URL',
41+
PICBED_TENCENTCLOUD_MESSAGE_APPID: 'Ex. 1234567890',
42+
PICBED_TENCENTCLOUD_MESSAGE_AREA: 'Ex. ap-beijing',
43+
PICBED_TENCENTCLOUD_MESSAGE_PATH: 'Ex. test/',
44+
PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL: 'Ex. http://test.com',
45+
PICBED_TENCENTCLOUD_MESSAGE_OPTIONS: 'Ex. ?imageMogr2',
3646

3747
// GitHub
3848
PICBED_GITHUB: 'GitHub',
@@ -41,6 +51,10 @@ export const EN: ILocales = {
4151
PICBED_GITHUB_PATH: 'Set Path',
4252
PICBED_GITHUB_BRANCH: 'Set Branch',
4353
PICBED_GITHUB_CUSTOMURL: 'Set Custom URL',
54+
PICBED_GITHUB_MESSAGE_REPO: 'Ex. username/repo',
55+
PICBED_GITHUB_MESSAGE_BRANCH: 'Ex. main',
56+
PICBED_GITHUB_MESSAGE_PATH: 'Ex. test/',
57+
PICBED_GITHUB_MESSAGE_CUSTOMURL: 'Ex. https://test.com',
4458

4559
// qiniu
4660
PICBED_QINIU: 'Qiniu',
@@ -51,11 +65,16 @@ export const EN: ILocales = {
5165
PICBED_QINIU_URL: 'Set URL',
5266
PICBED_QINIU_OPTIONS: 'Set URL Suffix',
5367
PICBED_QINIU_AREA: 'Set Area',
68+
PICBED_QINIU_MESSAGE_PATH: 'Ex. test/',
69+
PICBED_QINIU_MESSAGE_AREA: 'Ex. z0',
70+
PICBED_QINIU_MESSAGE_OPTIONS: 'Ex. ?imageslim',
71+
PICBED_QINIU_MESSAGE_URL: 'Ex. https://xxx.yyy.glb.clouddn.com',
5472

5573
// imgur
5674
PICBED_IMGUR: 'Imgur',
5775
PICBED_IMGUR_CLIENTID: 'Set ClientId',
5876
PICBED_IMGUR_PROXY: 'Set Proxy',
77+
PICBED_IMGUR_MESSAGE_PROXY: 'Ex. http://127.0.0.1:1080',
5978

6079
// upyun
6180
PICBED_UPYUN: 'Upyun',
@@ -65,6 +84,11 @@ export const EN: ILocales = {
6584
PICBED_UPYUN_PATH: 'Set Path',
6685
PICBED_UPYUN_URL: 'Set URL',
6786
PICBED_UPYUN_OPTIONS: 'Set URL Suffix',
87+
PICBED_UPYUN_MESSAGE_OPERATOR: 'Ex. me',
88+
PICBED_UPYUN_MESSAGE_PASSWORD: 'Please type the operator password',
89+
PICBED_UPYUN_MESSAGE_URL: 'Ex. http://xxx.test.upcdn.net',
90+
PICBED_UPYUN_MESSAGE_OPTIONS: 'Ex. !imgslim',
91+
PICBED_UPYUN_MESSAGE_PATH: 'Ex. test/',
6892

6993
// Plugin Handler
7094
PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS: 'Plugin installed successfully',

src/i18n/index.ts

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
import { ZH_CN, ILocalesKey } from './zh-CN'
1+
import { ZH_CN, ILocalesKey, ILocales } from './zh-CN'
22
import { merge } from 'lodash'
33
import { IPicGo } from '../types'
4+
import path from 'path'
5+
import fs from 'fs-extra'
6+
import yaml from 'js-yaml'
47

58
import { ObjectAdapter, I18n } from '@picgo/i18n'
69
import { IStringKeyMap, II18nManager } from '../types/index'
@@ -19,15 +22,46 @@ class I18nManager implements II18nManager {
1922
constructor (ctx: IPicGo) {
2023
this.ctx = ctx
2124
this.objectAdapter = new ObjectAdapter(languageList)
22-
const language = this.ctx.getConfig<string>('settings.language') || 'zh-CN'
25+
let language = this.ctx.getConfig<string>('settings.language') || 'zh-CN'
26+
if (!languageList[language]) {
27+
language = 'zh-CN' // use default
28+
}
2329
this.i18n = new I18n({
2430
adapter: this.objectAdapter,
2531
defaultLanguage: language
2632
})
33+
this.loadOutterI18n()
34+
}
35+
36+
private loadOutterI18n (): void {
37+
const i18nFolder = this.getOutterI18nFolder()
38+
const files = fs.readdirSync(i18nFolder, {
39+
withFileTypes: true
40+
})
41+
files.forEach(file => {
42+
if (file.isFile() && file.name.endsWith('.yml')) {
43+
const i18nFilePath = path.join(i18nFolder, file.name)
44+
const i18nFile = fs.readFileSync(i18nFilePath, 'utf8')
45+
try {
46+
const i18nFileObj = yaml.load(i18nFile) as ILocales
47+
languageList[file.name.replace(/\.yml$/, '')] = i18nFileObj
48+
} catch (e) {
49+
console.error(e)
50+
}
51+
}
52+
})
53+
}
54+
55+
private getOutterI18nFolder (): string {
56+
const i18nFolder = path.join(this.ctx.baseDir, 'i18n-cli')
57+
if (!fs.pathExistsSync(i18nFolder)) {
58+
fs.ensureDirSync(i18nFolder)
59+
}
60+
return i18nFolder
2761
}
2862

2963
translate<T extends string>(key: ILocalesKey | T, args?: IStringKeyMap<string>): string {
30-
return this.i18n.translate(key, args) || ''
64+
return this.i18n.translate(key, args) || key
3165
}
3266

3367
setLanguage (language: string): void {

src/i18n/zh-CN.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ export const ZH_CN = {
2020
PICBED_ALICLOUD_PATH: '设定存储路径',
2121
PICBED_ALICLOUD_CUSTOMURL: '设定自定义域名',
2222
PICBED_ALICLOUD_OPTIONS: '设定网址后缀',
23+
PICBED_ALICLOUD_MESSAGE_AREA: '例如:oss-cn-beijing',
24+
PICBED_ALICLOUD_MESSAGE_PATH: '例如:test/',
25+
PICBED_ALICLOUD_MESSAGE_OPTIONS: '例如:?x-oss-process=xxx',
26+
PICBED_ALICLOUD_MESSAGE_CUSTOMURL: '例如:https://test.com',
2327

2428
// Tencent-cloud
2529
PICBED_TENCENTCLOUD: '腾讯云COS',
@@ -30,7 +34,13 @@ export const ZH_CN = {
3034
PICBED_TENCENTCLOUD_BUCKET: '设定Bucket',
3135
PICBED_TENCENTCLOUD_AREA: '设定存储区域',
3236
PICBED_TENCENTCLOUD_PATH: '设定存储路径',
37+
PICBED_TENCENTCLOUD_OPTIONS: '设定网址后缀',
3338
PICBED_TENCENTCLOUD_CUSTOMURL: '设定自定义域名',
39+
PICBED_TENCENTCLOUD_MESSAGE_APPID: '例如:1234567890',
40+
PICBED_TENCENTCLOUD_MESSAGE_AREA: '例如:ap-beijing',
41+
PICBED_TENCENTCLOUD_MESSAGE_PATH: '例如:test/',
42+
PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL: '例如:https://test.com',
43+
PICBED_TENCENTCLOUD_MESSAGE_OPTIONS: '例如:?imageMogr2',
3444

3545
// GitHub
3646
PICBED_GITHUB: 'GitHub',
@@ -39,6 +49,10 @@ export const ZH_CN = {
3949
PICBED_GITHUB_PATH: '设定存储路径',
4050
PICBED_GITHUB_BRANCH: '设定分支名',
4151
PICBED_GITHUB_CUSTOMURL: '设定自定义域名',
52+
PICBED_GITHUB_MESSAGE_REPO: '格式:username/repo',
53+
PICBED_GITHUB_MESSAGE_BRANCH: '例如:main',
54+
PICBED_GITHUB_MESSAGE_PATH: '例如:test/',
55+
PICBED_GITHUB_MESSAGE_CUSTOMURL: '例如:https://test.com',
4256

4357
// qiniu
4458
PICBED_QINIU: '七牛云',
@@ -49,11 +63,16 @@ export const ZH_CN = {
4963
PICBED_QINIU_URL: '设定访问网址',
5064
PICBED_QINIU_OPTIONS: '设定网址后缀',
5165
PICBED_QINIU_AREA: '设定存储区域',
66+
PICBED_QINIU_MESSAGE_PATH: '例如:test/',
67+
PICBED_QINIU_MESSAGE_AREA: '例如:z0',
68+
PICBED_QINIU_MESSAGE_OPTIONS: '例如:?imageslim',
69+
PICBED_QINIU_MESSAGE_URL: '例如:https://xxx.yyy.glb.clouddn.com',
5270

5371
// imgur
5472
PICBED_IMGUR: 'Imgur',
5573
PICBED_IMGUR_CLIENTID: '设定ClientId',
5674
PICBED_IMGUR_PROXY: '设定代理',
75+
PICBED_IMGUR_MESSAGE_PROXY: '例如:http://127.0.0.1:1080',
5776

5877
// upyun
5978
PICBED_UPYUN: '又拍云',
@@ -63,6 +82,11 @@ export const ZH_CN = {
6382
PICBED_UPYUN_PATH: '设定存储路径',
6483
PICBED_UPYUN_URL: '设定加速域名',
6584
PICBED_UPYUN_OPTIONS: '设定网址后缀',
85+
PICBED_UPYUN_MESSAGE_OPERATOR: '例如:me',
86+
PICBED_UPYUN_MESSAGE_PASSWORD: '输入操作员密码',
87+
PICBED_UPYUN_MESSAGE_URL: '例如:http://xxx.test.upcdn.net',
88+
PICBED_UPYUN_MESSAGE_OPTIONS: '例如:!imgslim',
89+
PICBED_UPYUN_MESSAGE_PATH: '例如:test/',
6690

6791
// Plugin Handler
6892
PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS: '插件安装成功',

src/plugins/uploader/aliyun.ts

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,49 +80,53 @@ const config = (ctx: IPicGo): IPluginConfig[] => {
8080
{
8181
name: 'accessKeyId',
8282
type: 'input',
83-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_ACCESSKEYID'),
83+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_ACCESSKEYID') },
8484
default: userConfig.accessKeyId || '',
8585
required: true
8686
},
8787
{
8888
name: 'accessKeySecret',
89-
type: 'input',
90-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_ACCESSKEYSECRET'),
89+
type: 'password',
90+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_ACCESSKEYSECRET') },
9191
default: userConfig.accessKeySecret || '',
9292
required: true
9393
},
9494
{
9595
name: 'bucket',
9696
type: 'input',
97-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_BUCKET'),
97+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_BUCKET') },
9898
default: userConfig.bucket || '',
9999
required: true
100100
},
101101
{
102102
name: 'area',
103103
type: 'input',
104-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_AREA'),
104+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_AREA') },
105105
default: userConfig.area || '',
106+
get message () { return ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_MESSAGE_AREA') },
106107
required: true
107108
},
108109
{
109110
name: 'path',
110111
type: 'input',
111-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_PATH'),
112+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_PATH') },
113+
get message () { return ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_MESSAGE_PATH') },
112114
default: userConfig.path || '',
113115
required: false
114116
},
115117
{
116118
name: 'customUrl',
117119
type: 'input',
118-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_CUSTOMURL'),
120+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_CUSTOMURL') },
121+
get message () { return ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_MESSAGE_CUSTOMURL') },
119122
default: userConfig.customUrl || '',
120123
required: false
121124
},
122125
{
123126
name: 'options',
124127
type: 'input',
125-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_OPTIONS'),
128+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_OPTIONS') },
129+
get message () { return ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD_MESSAGE_OPTIONS') },
126130
default: userConfig.options || '',
127131
required: false
128132
}
@@ -132,7 +136,9 @@ const config = (ctx: IPicGo): IPluginConfig[] => {
132136

133137
export default function register (ctx: IPicGo): void {
134138
ctx.helper.uploader.register('aliyun', {
135-
name: ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD'),
139+
get name () {
140+
return ctx.i18n.translate<ILocalesKey>('PICBED_ALICLOUD')
141+
},
136142
handle,
137143
config
138144
})

src/plugins/uploader/github.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,35 +65,39 @@ const config = (ctx: IPicGo): IPluginConfig[] => {
6565
{
6666
name: 'repo',
6767
type: 'input',
68-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_REPO'),
68+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_REPO') },
69+
get message () { return ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_MESSAGE_REPO') },
6970
default: userConfig.repo || '',
7071
required: true
7172
},
7273
{
7374
name: 'branch',
7475
type: 'input',
75-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_BRANCH'),
76+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_BRANCH') },
77+
get message () { return ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_MESSAGE_BRANCH') },
7678
default: userConfig.branch || 'master',
7779
required: true
7880
},
7981
{
8082
name: 'token',
81-
type: 'input',
82-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_TOKEN'),
83+
type: 'password',
84+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_TOKEN') },
8385
default: userConfig.token || '',
8486
required: true
8587
},
8688
{
8789
name: 'path',
8890
type: 'input',
89-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_PATH'),
91+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_PATH') },
92+
get message () { return ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_MESSAGE_PATH') },
9093
default: userConfig.path || '',
9194
required: false
9295
},
9396
{
9497
name: 'customUrl',
9598
type: 'input',
96-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_CUSTOMURL'),
99+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_CUSTOMURL') },
100+
get message () { return ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB_MESSAGE_CUSTOMURL') },
97101
default: userConfig.customUrl || '',
98102
required: false
99103
}
@@ -103,7 +107,7 @@ const config = (ctx: IPicGo): IPluginConfig[] => {
103107

104108
export default function register (ctx: IPicGo): void {
105109
ctx.helper.uploader.register('github', {
106-
name: ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB'),
110+
get name () { return ctx.i18n.translate<ILocalesKey>('PICBED_GITHUB') },
107111
handle,
108112
config
109113
})

src/plugins/uploader/imgur.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,15 @@ const config = (ctx: IPicGo): IPluginConfig[] => {
6464
{
6565
name: 'clientId',
6666
type: 'input',
67-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_IMGUR_CLIENTID'),
67+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_IMGUR_CLIENTID') },
6868
default: userConfig.clientId || '',
6969
required: true
7070
},
7171
{
7272
name: 'proxy',
7373
type: 'input',
74-
alias: ctx.i18n.translate<ILocalesKey>('PICBED_IMGUR_PROXY'),
74+
get alias () { return ctx.i18n.translate<ILocalesKey>('PICBED_IMGUR_PROXY') },
75+
get message () { return ctx.i18n.translate<ILocalesKey>('PICBED_IMGUR_MESSAGE_PROXY') },
7576
default: userConfig.proxy || '',
7677
required: false
7778
}
@@ -81,7 +82,7 @@ const config = (ctx: IPicGo): IPluginConfig[] => {
8182

8283
export default function register (ctx: IPicGo): void {
8384
ctx.helper.uploader.register('imgur', {
84-
name: ctx.i18n.translate<ILocalesKey>('PICBED_IMGUR'),
85+
get name () { return ctx.i18n.translate<ILocalesKey>('PICBED_IMGUR') },
8586
handle,
8687
config
8788
})

0 commit comments

Comments
 (0)