Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
94862958
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
94862958
编写于
9月 22, 2016
作者:
J
Joao Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
localize extension metadata with default english
上级
4e09528f
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
58 addition
and
7 deletion
+58
-7
src/vs/platform/extensionManagement/common/extensionNls.ts
src/vs/platform/extensionManagement/common/extensionNls.ts
+33
-0
src/vs/platform/extensionManagement/node/extensionManagementService.ts
...rm/extensionManagement/node/extensionManagementService.ts
+25
-7
未找到文件。
src/vs/platform/extensionManagement/common/extensionNls.ts
0 → 100644
浏览文件 @
94862958
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
{
cloneAndChange
}
from
'
vs/base/common/objects
'
;
import
{
IExtensionManifest
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
const
nlsRegex
=
/^%
([\w\d
.
]
+
)
%$/i
;
export
interface
ITranslations
{
[
key
:
string
]:
string
;
}
export
function
localizeManifest
(
manifest
:
IExtensionManifest
,
translations
:
ITranslations
):
IExtensionManifest
{
const
patcher
=
value
=>
{
if
(
typeof
value
!==
'
string
'
)
{
return
;
}
const
match
=
nlsRegex
.
exec
(
value
);
if
(
!
match
)
{
return
;
}
return
translations
[
match
[
1
]]
||
value
;
};
return
cloneAndChange
(
manifest
,
patcher
);
}
src/vs/platform/extensionManagement/node/extensionManagementService.ts
浏览文件 @
94862958
...
...
@@ -17,6 +17,7 @@ import { IExtensionManagementService, IExtensionGalleryService, ILocalExtension,
IGalleryExtension
,
IExtensionIdentity
,
IExtensionManifest
,
IGalleryMetadata
,
InstallExtensionEvent
,
DidInstallExtensionEvent
,
LocalExtensionType
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
localizeManifest
}
from
'
../common/extensionNls
'
;
import
{
IEnvironmentService
}
from
'
vs/platform/environment/common/environment
'
;
import
{
Limiter
}
from
'
vs/base/common/async
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
...
...
@@ -61,6 +62,23 @@ function validate(zipPath: string, extension?: IExtensionIdentity, version?: str
});
}
function
readManifest
(
extensionPath
:
string
):
TPromise
<
{
manifest
:
IExtensionManifest
;
metadata
:
IGalleryMetadata
;
}
>
{
const
promises
=
[
pfs
.
readFile
(
path
.
join
(
extensionPath
,
'
package.json
'
),
'
utf8
'
)
.
then
(
raw
=>
parseManifest
(
raw
)),
pfs
.
readFile
(
path
.
join
(
extensionPath
,
'
package.nls.json
'
),
'
utf8
'
)
.
then
<
string
>
(
null
,
err
=>
err
.
code
!==
'
ENOENT
'
?
TPromise
.
wrapError
(
err
)
:
'
{}
'
)
.
then
(
raw
=>
JSON
.
parse
(
raw
))
];
return
TPromise
.
join
<
any
>
(
promises
).
then
(([{
manifest
,
metadata
},
translations
])
=>
{
return
{
manifest
:
localizeManifest
(
manifest
,
translations
),
metadata
};
});
}
function
getExtensionId
(
extension
:
IExtensionIdentity
,
version
:
string
):
string
{
return
`
${
extension
.
publisher
}
.
${
extension
.
name
}
-
${
version
}
`
;
}
...
...
@@ -145,11 +163,9 @@ export class ExtensionManagementService implements IExtensionManagementService {
private
installExtension
(
zipPath
:
string
,
id
:
string
,
metadata
:
IGalleryMetadata
=
null
):
TPromise
<
ILocalExtension
>
{
const
extensionPath
=
path
.
join
(
this
.
extensionsPath
,
id
);
const
manifestPath
=
path
.
join
(
extensionPath
,
'
package.json
'
);
return
extract
(
zipPath
,
extensionPath
,
{
sourcePath
:
'
extension
'
,
overwrite
:
true
})
.
then
(()
=>
pfs
.
readFile
(
manifestPath
,
'
utf8
'
))
.
then
(
raw
=>
parseManifest
(
raw
))
.
then
(()
=>
readManifest
(
extensionPath
))
.
then
(({
manifest
})
=>
{
return
pfs
.
readdir
(
extensionPath
).
then
(
children
=>
{
const
readme
=
children
.
filter
(
child
=>
/^readme
(\.
txt|
\.
md|
)
$/i
.
test
(
child
))[
0
];
...
...
@@ -159,9 +175,12 @@ export class ExtensionManagementService implements IExtensionManagementService {
const
type
=
LocalExtensionType
.
User
;
const
local
:
ILocalExtension
=
{
type
,
id
,
manifest
,
metadata
,
path
:
extensionPath
,
readmeUrl
,
changelogUrl
};
const
rawManifest
=
assign
(
manifest
,
{
__metadata
:
metadata
}
);
const
manifestPath
=
path
.
join
(
extensionPath
,
'
package.json
'
);
return
pfs
.
writeFile
(
manifestPath
,
JSON
.
stringify
(
rawManifest
,
null
,
'
\t
'
))
return
pfs
.
readFile
(
manifestPath
,
'
utf8
'
)
.
then
(
raw
=>
parseManifest
(
raw
))
.
then
(({
manifest
})
=>
assign
(
manifest
,
{
__metadata
:
metadata
}))
.
then
(
manifest
=>
pfs
.
writeFile
(
manifestPath
,
JSON
.
stringify
(
manifest
,
null
,
'
\t
'
)))
.
then
(()
=>
local
);
});
});
...
...
@@ -230,8 +249,7 @@ export class ExtensionManagementService implements IExtensionManagementService {
const
changelog
=
children
.
filter
(
child
=>
/^changelog
(\.
txt|
\.
md|
)
$/i
.
test
(
child
))[
0
];
const
changelogUrl
=
changelog
?
URI
.
file
(
path
.
join
(
extensionPath
,
changelog
)).
toString
()
:
null
;
return
pfs
.
readFile
(
path
.
join
(
extensionPath
,
'
package.json
'
),
'
utf8
'
)
.
then
(
raw
=>
parseManifest
(
raw
))
return
readManifest
(
extensionPath
)
.
then
<
ILocalExtension
>
(({
manifest
,
metadata
})
=>
({
type
,
id
,
manifest
,
metadata
,
path
:
extensionPath
,
readmeUrl
,
changelogUrl
}));
}).
then
(
null
,
()
=>
null
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录