Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
mycard
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
syntax_j
mycard
Commits
95f65352
Commit
95f65352
authored
Dec 07, 2016
by
wudizhanche1000
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/v3' into v3
# Conflicts: # app/apps.service.ts # index.js
parents
05e831bd
783a2327
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
292 additions
and
181 deletions
+292
-181
app/app-detail.component.html
app/app-detail.component.html
+4
-4
app/app-detail.component.ts
app/app-detail.component.ts
+1
-1
app/app.ts
app/app.ts
+1
-1
app/apps.service.ts
app/apps.service.ts
+64
-29
app/lobby.component.html
app/lobby.component.html
+6
-6
app/lobby.component.ts
app/lobby.component.ts
+1
-0
app/mycard.component.ts
app/mycard.component.ts
+1
-1
app/ygopro.component.ts
app/ygopro.component.ts
+47
-7
apps.json
apps.json
+105
-120
locale/messages.en-US.xlf
locale/messages.en-US.xlf
+61
-11
package.json
package.json
+1
-1
No files found.
app/app-detail.component.html
View file @
95f65352
...
...
@@ -8,10 +8,10 @@
<!--应用变更中-->
<div
class=
"actions"
*ngIf=
"currentApp.isInstalled() && !currentApp.isReady()"
>
<div>
<span
*ngIf=
"currentApp.isDownloading()"
>
正在下载
</span>
<span
*ngIf=
"currentApp.isInstalling()"
>
正在安装...
</span>
<span
*ngIf=
"currentApp.isUninstalling()"
>
正在卸载...
</span>
<span
*ngIf=
"currentApp.isWaiting()"
>
等待安装...
</span>
<span
i18n
*ngIf=
"currentApp.isDownloading()"
>
正在下载
</span>
<span
i18n
*ngIf=
"currentApp.isInstalling()"
>
正在安装...
</span>
<span
i18n
*ngIf=
"currentApp.isUninstalling()"
>
正在卸载...
</span>
<span
i18n
*ngIf=
"currentApp.isWaiting()"
>
等待安装...
</span>
<span
*ngIf=
"currentApp.status.total"
>
{{(currentApp.status.progress/currentApp.status.total * 100).toFixed()}}%
</span>
<span>
{{currentApp.progressMessage()}}
</span>
</div>
...
...
app/app-detail.component.ts
View file @
95f65352
...
...
@@ -74,7 +74,7 @@ export class AppDetailComponent implements OnInit {
async
installMod
(
mod
:
App
)
{
let
option
=
new
InstallOption
(
mod
,
path
.
dirname
(
mod
.
parent
.
local
!
.
path
));
let
option
=
new
InstallOption
(
mod
,
path
.
dirname
(
mod
.
parent
!
.
local
!
.
path
));
await
this
.
install
(
mod
,
option
,
{});
}
...
...
app/app.ts
View file @
95f65352
...
...
@@ -52,7 +52,7 @@ export class App {
author
:
string
;
// English Only
homepage
:
string
;
category
:
Category
;
parent
:
App
;
parent
?
:
App
;
get
download
():
string
{
let
downloadUrl
=
"
https://thief.mycard.moe/metalinks/
"
;
...
...
app/apps.service.ts
View file @
95f65352
import
{
Injectable
,
ApplicationRef
,
EventEmitter
}
from
"
@angular/core
"
;
import
{
Http
}
from
"
@angular/http
"
;
import
{
App
,
AppStatus
,
Action
}
from
"
./app
"
;
import
{
App
,
AppStatus
,
Action
,
Category
}
from
"
./app
"
;
import
{
SettingsService
}
from
"
./settings.sevices
"
;
import
*
as
fs
from
"
fs
"
;
import
*
as
path
from
"
path
"
;
...
...
@@ -54,14 +54,37 @@ export class AppsService {
private
downloadService
:
DownloadService
)
{
}
loadApps
()
{
return
this
.
http
.
get
(
'
./apps.json
'
)
.
toPromise
()
.
then
((
response
)
=>
{
let
data
=
response
.
json
();
async
loadApps
()
{
let
data
=
await
this
.
http
.
get
(
'
./apps.json
'
).
map
((
response
)
=>
response
.
json
()).
toPromise
();
this
.
apps
=
this
.
loadAppsList
(
data
);
return
this
.
apps
;
});
}
async
migrate
()
{
await
this
.
migrate_v2_ygopro
();
await
this
.
migreate_library
();
}
async
migrate_v2_ygopro
()
{
// 导入萌卡 v2 的 YGOPRO
try
{
const
legacy_ygopro_path
=
require
(
path
.
join
(
'
db.json
'
)).
local
.
ygopro
.
path
;
if
(
legacy_ygopro_path
)
{
// 导入YGOPRO
}
}
catch
(
error
)
{
}
}
async
migreate_library
()
{
let
libraries
=
this
.
settingsService
.
getLibraries
();
for
(
let
library
of
libraries
)
{
if
(
library
.
path
==
path
.
join
(
remote
.
app
.
getPath
(
"
appData
"
),
"
library
"
))
{
library
.
path
=
path
.
join
(
remote
.
app
.
getPath
(
"
appData
"
),
"
MyCardLibrary
"
)
}
}
localStorage
.
setItem
(
SettingsService
.
SETTING_LIBRARY
,
JSON
.
stringify
(
libraries
));
}
loadAppsList
=
(
data
:
any
):
Map
<
string
,
App
>
=>
{
...
...
@@ -84,13 +107,15 @@ export class AppsService {
}
// 去除无关语言
for
(
let
key
of
[
'
name
'
,
'
description
'
])
{
for
(
let
key
of
[
'
name
'
,
'
description
'
,
'
news
'
])
{
if
(
app
[
key
])
{
let
value
=
app
[
key
][
locale
];
if
(
!
value
)
{
value
=
app
[
key
][
"
zh-CN
"
];
}
app
[
key
]
=
value
;
}
}
// 去除平台无关的内容
for
(
let
key
of
[
'
actions
'
,
'
dependencies
'
,
'
references
'
,
'
version
'
])
{
...
...
@@ -108,8 +133,9 @@ export class AppsService {
}
// 设置App关系
for
(
let
[
id
]
of
apps
)
{
let
temp
=
apps
.
get
(
id
)
!
.
actions
;
for
(
let
[
id
,
app
]
of
apps
)
{
let
temp
=
app
.
actions
;
let
map
=
new
Map
<
string
,
any
>
();
for
(
let
action
of
Object
.
keys
(
temp
))
{
let
openId
=
temp
[
action
][
"
open
"
];
...
...
@@ -118,10 +144,9 @@ export class AppsService {
}
map
.
set
(
action
,
temp
[
action
]);
}
app
s
.
get
(
id
)
!
.
actions
=
map
;
app
.
actions
=
map
;
for
(
let
key
of
[
'
dependencies
'
,
'
references
'
,
'
parent
'
])
{
let
app
=
apps
.
get
(
id
)
!
;
let
value
=
app
[
key
];
if
(
value
)
{
if
(
Array
.
isArray
(
value
))
{
...
...
@@ -135,6 +160,26 @@ export class AppsService {
}
}
}
// 为语言包置一个默认的名字
// 这里简易做个 i18n 的 hack
const
lang
=
{
'
en-US
'
:
{
'
en-US
'
:
'
English
'
,
'
zh-CN
'
:
'
Simplified Chinese
'
,
'
zh-TW
'
:
'
Traditional Chinese
'
,
'
language_pack
'
:
'
Language
'
},
'
zh-CN
'
:
{
'
en-US
'
:
'
英文
'
,
'
zh-CN
'
:
'
简体中文
'
,
'
zh-TW
'
:
'
繁体中文
'
,
'
language_pack
'
:
'
语言包
'
}
};
if
(
!
app
.
name
&&
app
.
category
==
Category
.
module
&&
app
.
tags
.
includes
(
'
language
'
)
&&
app
.
parent
)
{
app
.
name
=
`
${
app
.
parent
.
name
}
${
lang
[
locale
].
language_pack
}
(
${
app
.
locales
.
map
((
l
)
=>
lang
[
locale
][
l
]).
join
(
'
,
'
)}
)`
}
}
return
apps
;
};
...
...
@@ -332,18 +377,9 @@ export class AppsService {
remote
.
getCurrentWindow
().
minimize
();
}
// 如果有actions.main.execuate, 定位那个execuate的顶层路径
// 如果没有,定位目录里面任意一个顶级文件
browse
(
app
:
App
)
{
if
(
app
.
local
)
{
let
appPath
=
app
.
local
.
path
;
fs
.
readdir
(
appPath
,
(
err
,
files
)
=>
{
if
(
!
err
)
{
remote
.
shell
.
showItemInFolder
(
appPath
+
"
/.
"
);
}
else
{
Logger
.
error
(
"
Browser Window Error:
"
,
appPath
,
err
);
}
});
remote
.
shell
.
showItemInFolder
(
app
.
local
.
path
+
"
/.
"
);
}
}
...
...
@@ -371,7 +407,6 @@ export class AppsService {
if
(
connection
)
{
connection
.
connection
.
close
();
}
console
.
log
(
server
.
url
);
connection
=
{
connection
:
new
WebSocket
(
server
.
url
),
address
:
null
};
let
id
:
Timer
|
null
;
this
.
connections
.
set
(
app
,
connection
);
...
...
app/lobby.component.html
View file @
95f65352
...
...
@@ -2,7 +2,7 @@
<div
id=
"main"
>
<div
id=
"apps"
*ngIf=
"apps"
>
<span
*ngIf=
"grouped_apps.installed"
>
已安装
</span>
<span
i18n
*ngIf=
"grouped_apps.installed"
>
已安装
</span>
<ul
*ngIf=
"grouped_apps.installed"
class=
"nav nav-sidebar"
>
<li
*ngFor=
"let app of grouped_apps.installed"
[class.active]=
"app===currentApp"
>
<i
*ngIf=
"!app.isReady() && !app.status.total"
class=
"spin fa fa-circle-o-notch fa-spin fa-fw"
></i>
...
...
@@ -17,13 +17,13 @@
</li>
</ul>
<span
*ngIf=
"grouped_apps.recommend"
>
推荐
</span>
<span
i18n
*ngIf=
"grouped_apps.recommend"
>
推荐
</span>
<ul
*ngIf=
"grouped_apps.recommend"
class=
"nav nav-sidebar"
>
<li
*ngFor=
"let app of grouped_apps.recommend"
[class.active]=
"app===currentApp"
>
<a
(click)=
"chooseApp(app)"
href=
"#"
>
{{app.name}}
</a>
</li>
</ul>
<span
*ngIf=
"grouped_apps.mysterious"
>
迷之物体
</span>
<span
i18n
*ngIf=
"grouped_apps.mysterious"
>
迷之物体
</span>
<ul
*ngIf=
"grouped_apps.mysterious"
class=
"nav nav-sidebar"
>
<li
*ngFor=
"let app of grouped_apps.mysterious"
[class.active]=
"app===currentApp"
>
<a
(click)=
"chooseApp(app)"
href=
"#"
>
{{app.name}}
</a>
...
...
@@ -33,7 +33,7 @@
max=
"{{app.status.total}}"
></progress>
</li>
</ul>
<span
*ngIf=
"grouped_apps.touhou"
>
东方 Project
</span>
<span
i18n
*ngIf=
"grouped_apps.touhou"
>
东方 Project
</span>
<ul
*ngIf=
"grouped_apps.touhou"
class=
"nav nav-sidebar"
>
<li
*ngFor=
"let app of grouped_apps.touhou"
[class.active]=
"app===currentApp"
>
<a
(click)=
"chooseApp(app)"
href=
"#"
>
{{app.name}}
</a>
...
...
@@ -43,13 +43,13 @@
max=
"{{app.status.total}}"
></progress>
</li>
</ul>
<span
*ngIf=
"grouped_apps.touhou_pc98"
>
东方旧作
</span>
<span
i18n
*ngIf=
"grouped_apps.touhou_pc98"
>
东方旧作
</span>
<ul
*ngIf=
"grouped_apps.touhou_pc98"
class=
"nav nav-sidebar"
>
<li
*ngFor=
"let app of grouped_apps.touhou_pc98"
[class.active]=
"app===currentApp"
>
<a
(click)=
"chooseApp(app)"
href=
"#"
>
{{app.name}}
</a>
</li>
</ul>
<span
*ngIf=
"grouped_apps.runtime_installed"
>
已安装的运行库
</span>
<span
i18n
*ngIf=
"grouped_apps.runtime_installed"
>
已安装的运行库
</span>
<ul
*ngIf=
"grouped_apps.runtime_installed"
class=
"nav nav-sidebar"
>
<li
*ngFor=
"let app of grouped_apps.runtime_installed"
[class.active]=
"app===currentApp"
>
<a
(click)=
"chooseApp(app)"
href=
"#"
>
{{app.name}}
</a>
...
...
app/lobby.component.ts
View file @
95f65352
...
...
@@ -29,6 +29,7 @@ export class LobbyComponent implements OnInit {
async
ngOnInit
()
{
this
.
apps
=
await
this
.
appsService
.
loadApps
();
await
this
.
appsService
.
migrate
();
this
.
chooseApp
(
Array
.
from
(
this
.
apps
.
values
()).
find
(
app
=>
app
.
isInstalled
())
||
this
.
apps
.
get
(
"
ygopro
"
)
!
);
// 初始化聊天室
...
...
app/mycard.component.ts
View file @
95f65352
...
...
@@ -14,7 +14,7 @@ declare const $: any;
export
class
MyCardComponent
implements
OnInit
{
currentPage
:
string
=
"
lobby
"
;
update_status
:
string
|
undefined
;
update_status
:
string
|
undefined
=
remote
.
getGlobal
(
'
update_status
'
)
;
update_error
:
string
|
undefined
;
currentWindow
=
remote
.
getCurrentWindow
();
window
=
window
;
...
...
app/ygopro.component.ts
View file @
95f65352
...
...
@@ -2,7 +2,6 @@
* Created by zh99998 on 16/9/2.
*/
import
{
Component
,
OnInit
,
ChangeDetectorRef
,
Input
}
from
"
@angular/core
"
;
import
{
AppsService
}
from
"
./apps.service
"
;
import
*
as
fs
from
"
fs
"
;
import
*
as
path
from
"
path
"
;
import
*
as
crypto
from
"
crypto
"
;
...
...
@@ -15,7 +14,7 @@ import {App} from "./app";
import
{
Http
,
Headers
,
URLSearchParams
}
from
"
@angular/http
"
;
import
"
rxjs/Rx
"
;
import
{
ISubscription
}
from
"
rxjs/Subscription
"
;
import
{
AppLocal
}
from
"
./app-local
"
;
import
{
SettingsService
}
from
"
./settings.sevices
"
;
declare
const
$
:
any
;
...
...
@@ -109,7 +108,7 @@ export class YGOProComponent implements OnInit {
connections
:
WebSocket
[]
=
[];
constructor
(
private
http
:
Http
,
private
appsService
:
App
sService
,
private
loginService
:
LoginService
,
private
ref
:
ChangeDetectorRef
)
{
constructor
(
private
http
:
Http
,
private
settingsService
:
Setting
sService
,
private
loginService
:
LoginService
,
private
ref
:
ChangeDetectorRef
)
{
switch
(
process
.
platform
)
{
case
'
darwin
'
:
this
.
numfont
=
[
'
/System/Library/Fonts/SFNSTextCondensed-Bold.otf
'
];
...
...
@@ -117,7 +116,7 @@ export class YGOProComponent implements OnInit {
break
;
case
'
win32
'
:
this
.
numfont
=
[
path
.
join
(
process
.
env
[
'
SystemRoot
'
],
'
Fonts
'
,
'
arialbd.ttf
'
)];
this
.
textfont
=
[
path
.
join
(
process
.
env
[
'
SystemRoot
'
],
'
Fonts
'
,
'
simsun.ttc
'
)];
this
.
textfont
=
[
path
.
join
(
process
.
env
[
'
SystemRoot
'
],
'
Fonts
'
,
'
msyh.ttc
'
),
path
.
join
(
process
.
env
[
'
SystemRoot
'
],
'
Fonts
'
,
'
msyh.ttf
'
),
path
.
join
(
process
.
env
[
'
SystemRoot
'
],
'
Fonts
'
,
'
simsun.ttc
'
)];
break
;
}
}
...
...
@@ -208,7 +207,7 @@ export class YGOProComponent implements OnInit {
}
}
if
(
!
await
this
.
get_font
([
data
.
textfont
.
split
(
'
'
,
2
)[
0
]]))
{
if
(
data
.
textfont
==
'
c:/windows/fonts/simsun.ttc 14
'
||
!
await
this
.
get_font
([
data
.
textfont
.
split
(
'
'
,
2
)[
0
]]))
{
let
font
=
await
this
.
get_font
(
this
.
textfont
);
if
(
font
)
{
data
[
'
textfont
'
]
=
`
${
font
}
14`
...
...
@@ -258,10 +257,51 @@ export class YGOProComponent implements OnInit {
return
this
.
join
(
'
AI#
'
+
name
,
this
.
servers
[
0
])
}
start_game
(
args
:
string
[])
{
async
start_game
(
args
:
string
[])
{
let
win
=
remote
.
getCurrentWindow
();
win
.
minimize
();
console
.
log
(
path
.
join
(
this
.
app
.
local
!
.
path
,
this
.
app
.
actions
.
get
(
'
main
'
)
!
.
execute
),
args
,
{
cwd
:
this
.
app
.
local
!
.
path
});
let
locale
=
this
.
settingsService
.
getLocale
();
if
(
localStorage
.
getItem
(
'
ygopro-locale
'
)
!=
locale
)
{
console
.
log
(
`try convert ygopro locale to
${
locale
}
`
)
try
{
await
new
Promise
((
resolve
,
reject
)
=>
{
let
source
=
fs
.
createReadStream
(
path
.
join
(
this
.
app
.
local
!
.
path
,
'
locales
'
,
locale
,
'
strings.conf
'
));
source
.
on
(
'
open
'
,
(
error
:
Error
)
=>
{
let
destination
=
fs
.
createWriteStream
(
path
.
join
(
this
.
app
.
local
!
.
path
,
'
strings.conf
'
));
source
.
pipe
(
destination
);
destination
.
on
(
'
error
'
,
(
error
:
Error
)
=>
{
reject
(
error
)
});
destination
.
on
(
'
close
'
,
()
=>
{
resolve
()
})
});
source
.
on
(
'
error
'
,
(
error
:
Error
)
=>
{
reject
(
error
)
});
});
await
new
Promise
((
resolve
,
reject
)
=>
{
let
source
=
fs
.
createReadStream
(
path
.
join
(
this
.
app
.
local
!
.
path
,
'
locales
'
,
locale
,
'
cards.cdb
'
));
source
.
on
(
'
open
'
,
(
error
:
Error
)
=>
{
let
destination
=
fs
.
createWriteStream
(
path
.
join
(
this
.
app
.
local
!
.
path
,
'
cards.cdb
'
));
source
.
pipe
(
destination
);
destination
.
on
(
'
error
'
,
(
error
:
Error
)
=>
{
reject
(
error
)
});
destination
.
on
(
'
close
'
,
()
=>
{
resolve
()
})
});
source
.
on
(
'
error
'
,
(
error
:
Error
)
=>
{
reject
(
error
)
});
});
localStorage
.
setItem
(
'
ygopro-locale
'
,
locale
)
console
.
log
(
`convert ygopro locale to
${
locale
}
success`
)
}
catch
(
error
)
{
console
.
error
(
`convert ygopro locale to
${
locale
}
failed`
,
error
)
}
}
return
new
Promise
((
resolve
,
reject
)
=>
{
let
child
=
child_process
.
spawn
(
path
.
join
(
this
.
app
.
local
!
.
path
,
this
.
app
.
actions
.
get
(
'
main
'
)
!
.
execute
),
args
,
{
cwd
:
this
.
app
.
local
!
.
path
,
...
...
apps.json
View file @
95f65352
...
...
@@ -2,7 +2,8 @@
{
"id"
:
"th06"
,
"name"
:
{
"zh-CN"
:
"东方红魔乡"
"zh-CN"
:
"东方红魔乡"
,
"en-US"
:
"The Embodiment of Scarlet Devil"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -28,7 +29,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -74,9 +75,6 @@
},
{
"id"
:
"th06-lang-zh-TW"
,
"name"
:
{
"zh-CN"
:
"东方红魔乡 语言包 (繁体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -101,7 +99,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"zh-
CN
"
"zh-
TW
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -145,7 +143,8 @@
{
"id"
:
"th07"
,
"name"
:
{
"zh-CN"
:
"东方妖妖梦"
"zh-CN"
:
"东方妖妖梦"
,
"en-US"
:
"Perfect Cherry Blossom"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -171,7 +170,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -215,9 +214,6 @@
},
{
"id"
:
"th07-lang-zh-TW"
,
"name"
:
{
"zh-CN"
:
"东方妖妖梦 语言包 (繁体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -242,7 +238,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"zh-
CN
"
"zh-
TW
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -286,7 +282,8 @@
{
"id"
:
"th075"
,
"name"
:
{
"zh-CN"
:
"东方萃梦想"
"zh-CN"
:
"东方萃梦想"
,
"en-US"
:
"Immaterial and Missing Power"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -312,7 +309,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -356,9 +353,6 @@
},
{
"id"
:
"th075-lang-zh-TW"
,
"name"
:
{
"zh-CN"
:
"东方萃梦想 语言包 (繁体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -383,7 +377,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"zh-
CN
"
"zh-
TW
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -428,7 +422,8 @@
{
"id"
:
"th08"
,
"name"
:
{
"zh-CN"
:
"东方永夜抄"
"zh-CN"
:
"东方永夜抄"
,
"en-US"
:
"Imperishable Night"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -454,7 +449,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -498,9 +493,6 @@
},
{
"id"
:
"th08-lang-zh-CN"
,
"name"
:
{
"zh-CN"
:
"东方永夜抄 语言包 (简体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -569,7 +561,8 @@
{
"id"
:
"th09"
,
"name"
:
{
"zh-CN"
:
"东方花映冢"
"zh-CN"
:
"东方花映冢"
,
"en-US"
:
"Phantasmagoria of Flower View"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -595,7 +588,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -639,9 +632,6 @@
},
{
"id"
:
"th09-lang-zh-TW"
,
"name"
:
{
"zh-CN"
:
"东方花映冢 语言包 (繁体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -666,7 +656,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"zh-
CN
"
"zh-
TW
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -710,7 +700,8 @@
{
"id"
:
"th095"
,
"name"
:
{
"zh-CN"
:
"东方文花帖"
"zh-CN"
:
"东方文花帖"
,
"en-US"
:
"Shoot the Bullet"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -736,7 +727,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -780,9 +771,6 @@
},
{
"id"
:
"th095-lang-zh-TW"
,
"name"
:
{
"zh-CN"
:
"东方文花帖 语言包 (繁体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -807,7 +795,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"zh-
CN
"
"zh-
TW
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -851,7 +839,8 @@
{
"id"
:
"th10"
,
"name"
:
{
"zh-CN"
:
"东方风神录"
"zh-CN"
:
"东方风神录"
,
"en-US"
:
"Mountain of Faith"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -861,7 +850,9 @@
"touhou"
],
"dependencies"
:
{
"win32"
:
[
"directx"
],
"win32"
:
[
"directx"
],
"darwin"
:
[
"wine"
]
...
...
@@ -877,7 +868,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -921,9 +912,6 @@
},
{
"id"
:
"th10-lang-zh-CN-zh-TW"
,
"name"
:
{
"zh-CN"
:
"东方风神录 语言包 (简体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -948,7 +936,8 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"zh-CN"
"zh-CN"
,
"zh-TW"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -992,7 +981,8 @@
{
"id"
:
"th105"
,
"name"
:
{
"zh-CN"
:
"东方绯想天"
"zh-CN"
:
"东方绯想天"
,
"en-US"
:
"Scarlet Weather Rhapsody"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -1002,7 +992,9 @@
"touhou"
],
"dependencies"
:
{
"win32"
:
[
"directx"
],
"win32"
:
[
"directx"
],
"darwin"
:
[
"wine"
]
...
...
@@ -1018,7 +1010,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1058,9 +1050,6 @@
},
{
"id"
:
"th105-lang-zh-CN"
,
"name"
:
{
"zh-CN"
:
"东方绯想天 语言包 (简体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -1115,7 +1104,8 @@
{
"id"
:
"th11"
,
"name"
:
{
"zh-CN"
:
"东方地灵殿"
"zh-CN"
:
"东方地灵殿"
,
"en-US"
:
"Subterranean Animism"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -1125,7 +1115,9 @@
"touhou"
],
"dependencies"
:
{
"win32"
:
[
"directx"
],
"win32"
:
[
"directx"
],
"darwin"
:
[
"wine"
]
...
...
@@ -1141,7 +1133,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1185,9 +1177,6 @@
},
{
"id"
:
"th11-lang-zh-TW"
,
"name"
:
{
"zh-CN"
:
"东方地灵殿 语言包 (繁体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -1212,7 +1201,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"zh-
CN
"
"zh-
TW
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1256,7 +1245,8 @@
{
"id"
:
"th12"
,
"name"
:
{
"zh-CN"
:
"东方星莲船"
"zh-CN"
:
"东方星莲船"
,
"en-US"
:
"Undefined Fantastic Object"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -1266,7 +1256,9 @@
"touhou"
],
"dependencies"
:
{
"win32"
:
[
"directx"
],
"win32"
:
[
"directx"
],
"darwin"
:
[
"wine"
]
...
...
@@ -1282,7 +1274,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1326,9 +1318,6 @@
},
{
"id"
:
"th12-lang-zh-TW"
,
"name"
:
{
"zh-CN"
:
"东方星莲船 语言包 (繁体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -1353,7 +1342,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"zh-
CN
"
"zh-
TW
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1397,7 +1386,8 @@
{
"id"
:
"th123"
,
"name"
:
{
"zh-CN"
:
"东方非想天则"
"zh-CN"
:
"东方非想天则"
,
"en-US"
:
"Touhou Hisōtensoku"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -1427,7 +1417,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1468,9 +1458,6 @@
},
{
"id"
:
"th123-lang-zh-CN"
,
"name"
:
{
"zh-CN"
:
"东方非想天则 语言包 (简体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -1525,7 +1512,8 @@
{
"id"
:
"th1"
,
"name"
:
{
"zh-CN"
:
"东方灵异传"
"zh-CN"
:
"东方灵异传"
,
"en-US"
:
"Highly Responsive to Prayers"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -1551,7 +1539,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1582,7 +1570,8 @@
{
"id"
:
"th2"
,
"name"
:
{
"zh-CN"
:
"东方封魔录"
"zh-CN"
:
"东方封魔录"
,
"en-US"
:
"Story of Eastern Wonderland"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -1610,7 +1599,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1638,9 +1627,6 @@
},
{
"id"
:
"th2-lang-zh-TW"
,
"name"
:
{
"zh-CN"
:
"东方封魔录 语言包 (繁体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -1664,7 +1650,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"zh-
CN
"
"zh-
TW
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1693,7 +1679,8 @@
{
"id"
:
"th3"
,
"name"
:
{
"zh-CN"
:
"东方梦时空"
"zh-CN"
:
"东方梦时空"
,
"en-US"
:
"Phantasmagoria of Dim. Dream"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -1721,7 +1708,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1750,9 +1737,6 @@
},
{
"id"
:
"th3-lang-zh-TW"
,
"name"
:
{
"zh-CN"
:
"东方梦时空 语言包 (繁体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -1776,7 +1760,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"zh-
CN
"
"zh-
TW
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1805,7 +1789,8 @@
{
"id"
:
"th4"
,
"name"
:
{
"zh-CN"
:
"东方幻想乡"
"zh-CN"
:
"东方幻想乡"
,
"en-US"
:
"Lotus Land Story"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -1833,7 +1818,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1862,9 +1847,6 @@
},
{
"id"
:
"th4-lang-zh-TW"
,
"name"
:
{
"zh-CN"
:
"东方幻想乡 语言包 (繁体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -1888,7 +1870,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"zh-
CN
"
"zh-
TW
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1917,7 +1899,8 @@
{
"id"
:
"th5"
,
"name"
:
{
"zh-CN"
:
"东方怪绮谈"
"zh-CN"
:
"东方怪绮谈"
,
"en-US"
:
"Mystic Square"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
...
...
@@ -1945,7 +1928,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"
zh-CN
"
"
ja-JP
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -1975,9 +1958,6 @@
},
{
"id"
:
"th5-lang-zh-TW"
,
"name"
:
{
"zh-CN"
:
"东方怪绮谈 语言包 (繁体中文)"
},
"description"
:
{
"zh-CN"
:
"fxt desc"
},
...
...
@@ -2001,7 +1981,7 @@
"author"
:
"ZUN"
,
"homepage"
:
"http://www.myacg.cc"
,
"locales"
:
[
"zh-
CN
"
"zh-
TW
"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -2051,7 +2031,9 @@
"author"
:
"Fluorohydride"
,
"homepage"
:
"https://github.com/Fluorohydride/ygopro"
,
"locales"
:
[
"zh-CN"
"zh-CN"
,
"en-US"
,
"ja-JP"
],
"actions"
:
{
"win32"
:
{
...
...
@@ -2073,20 +2055,30 @@
"win32"
:
"1.033.C-7"
,
"darwin"
:
"1.033.C-7"
},
"news"
:
[
"news"
:
{
"zh-CN"
:
[
{
"url"
:
"https://ygobbs.com"
,
"image"
:
"http://pic.4j4j.cn/upload/pic/20140327/af650cf463.jpg"
,
"title"
:
"News Title
"
,
"title"
:
"这是一个新闻
"
,
"text"
:
"喵喵喵喵"
},
{
"url"
:
"https://ygobbs.com/t/7%E6%9C%8825%E6%97%A5-MyCard%E5%B7%B2%E6%9B%B4%E6%96%B0INOV910%E7%AD%89%E6%96%B0%E5%8D%A1%EF%BC%8C1033A%E7%A8%8B%E5%BA%8F%E3%80%82%E5%86%85%E5%B8%A6%E6%89%8B%E5%8A%A8%E6%9B%B4%E6%96%B0%E4%BB%A5%E5%8F%8A%E6%8A%A5%E9%94%99%E8%A7%A3%E5%86%B3%E3%80%82/80143"
,
"image"
:
"http://image.tianjimedia.com/uploadImages/2012/159/1EF112986273.jpg"
,
"title"
:
"News Title2
"
,
"title"
:
"这是另一个新闻
"
,
"text"
:
"聚集的祈愿将成为新生的闪耀之星,化作光芒闪耀的道路吧!"
}
],
"en-US"
:
[
{
"url"
:
"https://ygobbs.com"
,
"image"
:
"http://pic.4j4j.cn/upload/pic/20140327/af650cf463.jpg"
,
"title"
:
"News Title"
,
"text"
:
"nyanyayna"
}
]
},
"conference"
:
"ygopro_china_north"
},
{
...
...
@@ -2111,9 +2103,6 @@
},
"author"
:
"Fluorohydride"
,
"homepage"
:
"https://github.com/Fluorohydride/ygopro"
,
"locales"
:
[
"zh-CN"
],
"actions"
:
{
"win32"
:
{
"main"
:
{
...
...
@@ -2138,7 +2127,8 @@
{
"id"
:
"ghost_trick"
,
"name"
:
{
"zh-CN"
:
"幽灵诡计"
"zh-CN"
:
"幽灵诡计"
,
"en-US"
:
"Ghost Trick"
},
"description"
:
{
"zh-CN"
:
"A script engine for
\"
yu-gi-oh!
\"
and sample gui."
...
...
@@ -2194,9 +2184,6 @@
},
{
"id"
:
"ghost_trick-lang-zh-CN"
,
"name"
:
{
"zh-CN"
:
"幽灵诡计 语言包 (简体中文)"
},
"description"
:
{
"zh-CN"
:
"A script engine for
\"
yu-gi-oh!
\"
and sample gui."
},
...
...
@@ -2250,7 +2237,8 @@
{
"id"
:
"directx"
,
"name"
:
{
"zh-CN"
:
"DirectX 最终用户运行时"
"zh-CN"
:
"DirectX 最终用户运行时"
,
"en-US"
:
"DirectX End-User Runtime"
},
"description"
:
{
"zh-CN"
:
"A script engine for
\"
yu-gi-oh!
\"
and sample gui."
...
...
@@ -2271,9 +2259,6 @@
},
"author"
:
"Fluorohydride"
,
"homepage"
:
"https://github.com/Fluorohydride/ygopro"
,
"locales"
:
[
"zh-CN"
],
"actions"
:
{
"win32"
:
{
"install"
:
{
...
...
@@ -2339,7 +2324,7 @@
{
"id"
:
"wine"
,
"name"
:
{
"zh-CN"
:
"
w
ine"
"zh-CN"
:
"
W
ine"
},
"description"
:
{
"zh-CN"
:
"wine"
...
...
locale/messages.en-US.xlf
View file @
95f65352
...
...
@@ -16,6 +16,36 @@
<source>
切换账号
</source>
<target>
Change Account
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"1761e51e36b01ae1e0012914bd58aa2a741d0401"
>
<source>
已安装
</source>
<target>
Installed
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"69f3fab778e92fcec3a8c38d53d771a36e6d5230"
>
<source>
推荐
</source>
<target>
Recommend
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"fc570ecca13755cb4a92e7513fbd55c2d412f23c"
>
<source>
迷之物体
</source>
<target>
Something
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"0873cd6df2d1f1016e02526aa9ba32415c1a11d8"
>
<source>
东方 Project
</source>
<target>
Touhou Project
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"785db32107cc0b47564b05381a1d782021d77c67"
>
<source>
东方旧作
</source>
<target>
Touhou old series
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"817376261844eb7eb0c035ed0e3fce744a96b6d9"
>
<source>
已安装的运行库
</source>
<target>
Installed Runtime Library
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"a8cae935472a05e1c8c9be436bb7b1bdea96a54a"
>
<source>
安装
</source>
...
...
@@ -26,11 +56,21 @@
<source>
导入
</source>
<target>
Import
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"8bb533b37ee18bf8d09df19b4d7234b38f134909"
>
<source>
正在下载
</source>
<target>
Downloading...
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"2fe99d94b20d6f8aba7814d8657037ec9d69d36c"
>
<source>
正在安装...
</source>
<target>
Installing...
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"bea72fe35b7b9933e126b6ee3a6828c307ccc3d4"
>
<source>
正在卸载...
</source>
<target>
UnInstalling...
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"e5ee7e692c816893b6fd2f9375e6d8303cd794cd"
>
<source>
等待安装...
</source>
...
...
@@ -103,12 +143,18 @@
</trans-unit>
<trans-unit
datatype=
"html"
id=
"4809edca33b1a07d7d6e8905287d3825e676f2c8"
>
<source>
安装
<x
id=
"INTERPOLATION"
/></source>
<target>
Install
<x
id=
"INTERPOLATION"
/></target>
<source>
安装
<x
id=
"INTERPOLATION"
/>
</source>
<target>
Install
<x
id=
"INTERPOLATION"
/>
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"f8e60167c7a0871ccf40ed2a0750311411dfd665"
>
<source>
即将开始安装
<x
id=
"INTERPOLATION"
/></source>
<source>
即将开始安装
<x
id=
"INTERPOLATION"
/>
</source>
<target>
Preparing Installation
<x
id=
"INTERPOLATION"
/>
</target>
...
...
@@ -138,11 +184,6 @@
<source>
创建桌面快捷方式
</source>
<target>
Create Desktop Shortcut
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"2af1068491573803bc4756c4f94a689155370d9c"
>
<source>
扩展内容
</source>
<target>
Expansion
</target>
</trans-unit>
<trans-unit
datatype=
"html"
id=
"2ba33dd61b1ac70666322680f248e5336b3ee69a"
>
<source>
依赖:
</source>
...
...
@@ -310,7 +351,10 @@
</trans-unit>
<trans-unit
datatype=
"html"
id=
"4baa1360b4d635000fc5e14a6e7376f46ace0bd9"
>
<source><x
id=
"INTERPOLATION"
/>
LP
</source>
<source>
<x
id=
"INTERPOLATION"
/>
LP
</source>
<target>
<x
id=
"INTERPOLATION"
/>
LP
...
...
@@ -318,7 +362,10 @@
</trans-unit>
<trans-unit
datatype=
"html"
id=
"1939517ea2b4ff337ce2847302fbcc6f1217d269"
>
<source><x
id=
"INTERPOLATION"
/>
初始
</source>
<source>
<x
id=
"INTERPOLATION"
/>
初始
</source>
<target>
<x
id=
"INTERPOLATION"
/>
Starting
...
...
@@ -326,7 +373,10 @@
</trans-unit>
<trans-unit
datatype=
"html"
id=
"a19d6d5a2c74d9df73936a17b5c71b2069051b49"
>
<source><x
id=
"INTERPOLATION"
/>
抽卡
</source>
<source>
<x
id=
"INTERPOLATION"
/>
抽卡
</source>
<target>
<x
id=
"INTERPOLATION"
/>
Draw
...
...
package.json
View file @
95f65352
{
"name"
:
"mycard"
,
"version"
:
"3.0.0-dev.1
4
"
,
"version"
:
"3.0.0-dev.1
7
"
,
"description"
:
"mycard"
,
"keywords"
:
[],
"author"
:
"zh99998 <zh99998@gmail.com>"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment