Commit 95f65352 authored by wudizhanche1000's avatar wudizhanche1000

Merge remote-tracking branch 'origin/v3' into v3

# Conflicts:
#	app/apps.service.ts
#	index.js
parents 05e831bd 783a2327
...@@ -8,10 +8,10 @@ ...@@ -8,10 +8,10 @@
<!--应用变更中--> <!--应用变更中-->
<div class="actions" *ngIf="currentApp.isInstalled() && !currentApp.isReady()"> <div class="actions" *ngIf="currentApp.isInstalled() && !currentApp.isReady()">
<div> <div>
<span *ngIf="currentApp.isDownloading()">正在下载</span> <span i18n *ngIf="currentApp.isDownloading()">正在下载</span>
<span *ngIf="currentApp.isInstalling()">正在安装...</span> <span i18n *ngIf="currentApp.isInstalling()">正在安装...</span>
<span *ngIf="currentApp.isUninstalling()">正在卸载...</span> <span i18n *ngIf="currentApp.isUninstalling()">正在卸载...</span>
<span *ngIf="currentApp.isWaiting()">等待安装...</span> <span i18n *ngIf="currentApp.isWaiting()">等待安装...</span>
<span *ngIf="currentApp.status.total">{{(currentApp.status.progress/currentApp.status.total * 100).toFixed()}}%</span> <span *ngIf="currentApp.status.total">{{(currentApp.status.progress/currentApp.status.total * 100).toFixed()}}%</span>
<span>{{currentApp.progressMessage()}}</span> <span>{{currentApp.progressMessage()}}</span>
</div> </div>
......
...@@ -74,7 +74,7 @@ export class AppDetailComponent implements OnInit { ...@@ -74,7 +74,7 @@ export class AppDetailComponent implements OnInit {
async installMod(mod: App) { 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, {}); await this.install(mod, option, {});
} }
......
...@@ -52,7 +52,7 @@ export class App { ...@@ -52,7 +52,7 @@ export class App {
author: string; // English Only author: string; // English Only
homepage: string; homepage: string;
category: Category; category: Category;
parent: App; parent?: App;
get download(): string { get download(): string {
let downloadUrl = "https://thief.mycard.moe/metalinks/"; let downloadUrl = "https://thief.mycard.moe/metalinks/";
......
import {Injectable, ApplicationRef, EventEmitter} from "@angular/core"; import {Injectable, ApplicationRef, EventEmitter} from "@angular/core";
import {Http} from "@angular/http"; import {Http} from "@angular/http";
import {App, AppStatus, Action} from "./app"; import {App, AppStatus, Action, Category} from "./app";
import {SettingsService} from "./settings.sevices"; import {SettingsService} from "./settings.sevices";
import * as fs from "fs"; import * as fs from "fs";
import * as path from "path"; import * as path from "path";
...@@ -54,14 +54,37 @@ export class AppsService { ...@@ -54,14 +54,37 @@ export class AppsService {
private downloadService: DownloadService) { private downloadService: DownloadService) {
} }
loadApps() { async loadApps() {
return this.http.get('./apps.json') let data = await this.http.get('./apps.json').map((response) => response.json()).toPromise();
.toPromise()
.then((response) => {
let data = response.json();
this.apps = this.loadAppsList(data); this.apps = this.loadAppsList(data);
return this.apps; 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> => { loadAppsList = (data: any): Map<string,App> => {
...@@ -84,13 +107,15 @@ export class AppsService { ...@@ -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]; let value = app[key][locale];
if (!value) { if (!value) {
value = app[key]["zh-CN"]; value = app[key]["zh-CN"];
} }
app[key] = value; app[key] = value;
} }
}
// 去除平台无关的内容 // 去除平台无关的内容
for (let key of ['actions', 'dependencies', 'references', 'version']) { for (let key of ['actions', 'dependencies', 'references', 'version']) {
...@@ -108,8 +133,9 @@ export class AppsService { ...@@ -108,8 +133,9 @@ export class AppsService {
} }
// 设置App关系 // 设置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>(); let map = new Map<string,any>();
for (let action of Object.keys(temp)) { for (let action of Object.keys(temp)) {
let openId = temp[action]["open"]; let openId = temp[action]["open"];
...@@ -118,10 +144,9 @@ export class AppsService { ...@@ -118,10 +144,9 @@ export class AppsService {
} }
map.set(action, temp[action]); map.set(action, temp[action]);
} }
apps.get(id)!.actions = map; app.actions = map;
for (let key of ['dependencies', 'references', 'parent']) { for (let key of ['dependencies', 'references', 'parent']) {
let app = apps.get(id)!;
let value = app[key]; let value = app[key];
if (value) { if (value) {
if (Array.isArray(value)) { if (Array.isArray(value)) {
...@@ -135,6 +160,26 @@ export class AppsService { ...@@ -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; return apps;
}; };
...@@ -332,18 +377,9 @@ export class AppsService { ...@@ -332,18 +377,9 @@ export class AppsService {
remote.getCurrentWindow().minimize(); remote.getCurrentWindow().minimize();
} }
// 如果有actions.main.execuate, 定位那个execuate的顶层路径
// 如果没有,定位目录里面任意一个顶级文件
browse(app: App) { browse(app: App) {
if (app.local) { if (app.local) {
let appPath = app.local.path; remote.shell.showItemInFolder(app.local.path + "/.");
fs.readdir(appPath, (err, files) => {
if (!err) {
remote.shell.showItemInFolder(appPath + "/.");
} else {
Logger.error("Browser Window Error:", appPath, err);
}
});
} }
} }
...@@ -371,7 +407,6 @@ export class AppsService { ...@@ -371,7 +407,6 @@ export class AppsService {
if (connection) { if (connection) {
connection.connection.close(); connection.connection.close();
} }
console.log(server.url);
connection = {connection: new WebSocket(server.url), address: null}; connection = {connection: new WebSocket(server.url), address: null};
let id: Timer | null; let id: Timer | null;
this.connections.set(app, connection); this.connections.set(app, connection);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div id="main"> <div id="main">
<div id="apps" *ngIf="apps"> <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"> <ul *ngIf="grouped_apps.installed" class="nav nav-sidebar">
<li *ngFor="let app of grouped_apps.installed" [class.active]="app===currentApp"> <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> <i *ngIf="!app.isReady() && !app.status.total" class="spin fa fa-circle-o-notch fa-spin fa-fw"></i>
...@@ -17,13 +17,13 @@ ...@@ -17,13 +17,13 @@
</li> </li>
</ul> </ul>
<span *ngIf="grouped_apps.recommend">推荐</span> <span i18n *ngIf="grouped_apps.recommend">推荐</span>
<ul *ngIf="grouped_apps.recommend" class="nav nav-sidebar"> <ul *ngIf="grouped_apps.recommend" class="nav nav-sidebar">
<li *ngFor="let app of grouped_apps.recommend" [class.active]="app===currentApp"> <li *ngFor="let app of grouped_apps.recommend" [class.active]="app===currentApp">
<a (click)="chooseApp(app)" href="#">{{app.name}}</a> <a (click)="chooseApp(app)" href="#">{{app.name}}</a>
</li> </li>
</ul> </ul>
<span *ngIf="grouped_apps.mysterious">迷之物体</span> <span i18n *ngIf="grouped_apps.mysterious">迷之物体</span>
<ul *ngIf="grouped_apps.mysterious" class="nav nav-sidebar"> <ul *ngIf="grouped_apps.mysterious" class="nav nav-sidebar">
<li *ngFor="let app of grouped_apps.mysterious" [class.active]="app===currentApp"> <li *ngFor="let app of grouped_apps.mysterious" [class.active]="app===currentApp">
<a (click)="chooseApp(app)" href="#">{{app.name}}</a> <a (click)="chooseApp(app)" href="#">{{app.name}}</a>
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
max="{{app.status.total}}"></progress> max="{{app.status.total}}"></progress>
</li> </li>
</ul> </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"> <ul *ngIf="grouped_apps.touhou" class="nav nav-sidebar">
<li *ngFor="let app of grouped_apps.touhou" [class.active]="app===currentApp"> <li *ngFor="let app of grouped_apps.touhou" [class.active]="app===currentApp">
<a (click)="chooseApp(app)" href="#">{{app.name}}</a> <a (click)="chooseApp(app)" href="#">{{app.name}}</a>
...@@ -43,13 +43,13 @@ ...@@ -43,13 +43,13 @@
max="{{app.status.total}}"></progress> max="{{app.status.total}}"></progress>
</li> </li>
</ul> </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"> <ul *ngIf="grouped_apps.touhou_pc98" class="nav nav-sidebar">
<li *ngFor="let app of grouped_apps.touhou_pc98" [class.active]="app===currentApp"> <li *ngFor="let app of grouped_apps.touhou_pc98" [class.active]="app===currentApp">
<a (click)="chooseApp(app)" href="#">{{app.name}}</a> <a (click)="chooseApp(app)" href="#">{{app.name}}</a>
</li> </li>
</ul> </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"> <ul *ngIf="grouped_apps.runtime_installed" class="nav nav-sidebar">
<li *ngFor="let app of grouped_apps.runtime_installed" [class.active]="app===currentApp"> <li *ngFor="let app of grouped_apps.runtime_installed" [class.active]="app===currentApp">
<a (click)="chooseApp(app)" href="#">{{app.name}}</a> <a (click)="chooseApp(app)" href="#">{{app.name}}</a>
......
...@@ -29,6 +29,7 @@ export class LobbyComponent implements OnInit { ...@@ -29,6 +29,7 @@ export class LobbyComponent implements OnInit {
async ngOnInit() { async ngOnInit() {
this.apps = await this.appsService.loadApps(); 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")!); this.chooseApp(Array.from(this.apps.values()).find(app => app.isInstalled()) || this.apps.get("ygopro")!);
// 初始化聊天室 // 初始化聊天室
......
...@@ -14,7 +14,7 @@ declare const $: any; ...@@ -14,7 +14,7 @@ declare const $: any;
export class MyCardComponent implements OnInit { export class MyCardComponent implements OnInit {
currentPage: string = "lobby"; currentPage: string = "lobby";
update_status: string | undefined; update_status: string | undefined = remote.getGlobal('update_status');
update_error: string | undefined; update_error: string | undefined;
currentWindow = remote.getCurrentWindow(); currentWindow = remote.getCurrentWindow();
window = window; window = window;
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
* Created by zh99998 on 16/9/2. * Created by zh99998 on 16/9/2.
*/ */
import {Component, OnInit, ChangeDetectorRef, Input} from "@angular/core"; import {Component, OnInit, ChangeDetectorRef, Input} from "@angular/core";
import {AppsService} from "./apps.service";
import * as fs from "fs"; import * as fs from "fs";
import * as path from "path"; import * as path from "path";
import * as crypto from "crypto"; import * as crypto from "crypto";
...@@ -15,7 +14,7 @@ import {App} from "./app"; ...@@ -15,7 +14,7 @@ import {App} from "./app";
import {Http, Headers, URLSearchParams} from "@angular/http"; import {Http, Headers, URLSearchParams} from "@angular/http";
import "rxjs/Rx"; import "rxjs/Rx";
import {ISubscription} from "rxjs/Subscription"; import {ISubscription} from "rxjs/Subscription";
import {AppLocal} from "./app-local"; import {SettingsService} from "./settings.sevices";
declare const $: any; declare const $: any;
...@@ -109,7 +108,7 @@ export class YGOProComponent implements OnInit { ...@@ -109,7 +108,7 @@ export class YGOProComponent implements OnInit {
connections: WebSocket[] = []; connections: WebSocket[] = [];
constructor(private http: Http, private appsService: AppsService, private loginService: LoginService, private ref: ChangeDetectorRef) { constructor(private http: Http, private settingsService: SettingsService, private loginService: LoginService, private ref: ChangeDetectorRef) {
switch (process.platform) { switch (process.platform) {
case 'darwin': case 'darwin':
this.numfont = ['/System/Library/Fonts/SFNSTextCondensed-Bold.otf']; this.numfont = ['/System/Library/Fonts/SFNSTextCondensed-Bold.otf'];
...@@ -117,7 +116,7 @@ export class YGOProComponent implements OnInit { ...@@ -117,7 +116,7 @@ export class YGOProComponent implements OnInit {
break; break;
case 'win32': case 'win32':
this.numfont = [path.join(process.env['SystemRoot'], 'Fonts', 'arialbd.ttf')]; 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; break;
} }
} }
...@@ -208,7 +207,7 @@ export class YGOProComponent implements OnInit { ...@@ -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); let font = await this.get_font(this.textfont);
if (font) { if (font) {
data['textfont'] = `${font} 14` data['textfont'] = `${font} 14`
...@@ -258,10 +257,51 @@ export class YGOProComponent implements OnInit { ...@@ -258,10 +257,51 @@ export class YGOProComponent implements OnInit {
return this.join('AI#' + name, this.servers[0]) return this.join('AI#' + name, this.servers[0])
} }
start_game(args: string[]) { async start_game(args: string[]) {
let win = remote.getCurrentWindow(); let win = remote.getCurrentWindow();
win.minimize(); 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) => { return new Promise((resolve, reject) => {
let child = child_process.spawn(path.join(this.app.local!.path, this.app.actions.get('main')!.execute), args, { let child = child_process.spawn(path.join(this.app.local!.path, this.app.actions.get('main')!.execute), args, {
cwd: this.app.local!.path, cwd: this.app.local!.path,
......
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
{ {
"id": "th06", "id": "th06",
"name": { "name": {
"zh-CN": "东方红魔乡" "zh-CN": "东方红魔乡",
"en-US": "The Embodiment of Scarlet Devil"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -28,7 +29,7 @@ ...@@ -28,7 +29,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -74,9 +75,6 @@ ...@@ -74,9 +75,6 @@
}, },
{ {
"id": "th06-lang-zh-TW", "id": "th06-lang-zh-TW",
"name": {
"zh-CN": "东方红魔乡 语言包 (繁体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -101,7 +99,7 @@ ...@@ -101,7 +99,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "zh-TW"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -145,7 +143,8 @@ ...@@ -145,7 +143,8 @@
{ {
"id": "th07", "id": "th07",
"name": { "name": {
"zh-CN": "东方妖妖梦" "zh-CN": "东方妖妖梦",
"en-US": "Perfect Cherry Blossom"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -171,7 +170,7 @@ ...@@ -171,7 +170,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -215,9 +214,6 @@ ...@@ -215,9 +214,6 @@
}, },
{ {
"id": "th07-lang-zh-TW", "id": "th07-lang-zh-TW",
"name": {
"zh-CN": "东方妖妖梦 语言包 (繁体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -242,7 +238,7 @@ ...@@ -242,7 +238,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "zh-TW"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -286,7 +282,8 @@ ...@@ -286,7 +282,8 @@
{ {
"id": "th075", "id": "th075",
"name": { "name": {
"zh-CN": "东方萃梦想" "zh-CN": "东方萃梦想",
"en-US": "Immaterial and Missing Power"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -312,7 +309,7 @@ ...@@ -312,7 +309,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -356,9 +353,6 @@ ...@@ -356,9 +353,6 @@
}, },
{ {
"id": "th075-lang-zh-TW", "id": "th075-lang-zh-TW",
"name": {
"zh-CN": "东方萃梦想 语言包 (繁体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -383,7 +377,7 @@ ...@@ -383,7 +377,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "zh-TW"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -428,7 +422,8 @@ ...@@ -428,7 +422,8 @@
{ {
"id": "th08", "id": "th08",
"name": { "name": {
"zh-CN": "东方永夜抄" "zh-CN": "东方永夜抄",
"en-US": "Imperishable Night"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -454,7 +449,7 @@ ...@@ -454,7 +449,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -498,9 +493,6 @@ ...@@ -498,9 +493,6 @@
}, },
{ {
"id": "th08-lang-zh-CN", "id": "th08-lang-zh-CN",
"name": {
"zh-CN": "东方永夜抄 语言包 (简体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -569,7 +561,8 @@ ...@@ -569,7 +561,8 @@
{ {
"id": "th09", "id": "th09",
"name": { "name": {
"zh-CN": "东方花映冢" "zh-CN": "东方花映冢",
"en-US": "Phantasmagoria of Flower View"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -595,7 +588,7 @@ ...@@ -595,7 +588,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -639,9 +632,6 @@ ...@@ -639,9 +632,6 @@
}, },
{ {
"id": "th09-lang-zh-TW", "id": "th09-lang-zh-TW",
"name": {
"zh-CN": "东方花映冢 语言包 (繁体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -666,7 +656,7 @@ ...@@ -666,7 +656,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "zh-TW"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -710,7 +700,8 @@ ...@@ -710,7 +700,8 @@
{ {
"id": "th095", "id": "th095",
"name": { "name": {
"zh-CN": "东方文花帖" "zh-CN": "东方文花帖",
"en-US": "Shoot the Bullet"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -736,7 +727,7 @@ ...@@ -736,7 +727,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -780,9 +771,6 @@ ...@@ -780,9 +771,6 @@
}, },
{ {
"id": "th095-lang-zh-TW", "id": "th095-lang-zh-TW",
"name": {
"zh-CN": "东方文花帖 语言包 (繁体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -807,7 +795,7 @@ ...@@ -807,7 +795,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "zh-TW"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -851,7 +839,8 @@ ...@@ -851,7 +839,8 @@
{ {
"id": "th10", "id": "th10",
"name": { "name": {
"zh-CN": "东方风神录" "zh-CN": "东方风神录",
"en-US": "Mountain of Faith"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -861,7 +850,9 @@ ...@@ -861,7 +850,9 @@
"touhou" "touhou"
], ],
"dependencies": { "dependencies": {
"win32": ["directx"], "win32": [
"directx"
],
"darwin": [ "darwin": [
"wine" "wine"
] ]
...@@ -877,7 +868,7 @@ ...@@ -877,7 +868,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -921,9 +912,6 @@ ...@@ -921,9 +912,6 @@
}, },
{ {
"id": "th10-lang-zh-CN-zh-TW", "id": "th10-lang-zh-CN-zh-TW",
"name": {
"zh-CN": "东方风神录 语言包 (简体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -948,7 +936,8 @@ ...@@ -948,7 +936,8 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "zh-CN",
"zh-TW"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -992,7 +981,8 @@ ...@@ -992,7 +981,8 @@
{ {
"id": "th105", "id": "th105",
"name": { "name": {
"zh-CN": "东方绯想天" "zh-CN": "东方绯想天",
"en-US": "Scarlet Weather Rhapsody"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -1002,7 +992,9 @@ ...@@ -1002,7 +992,9 @@
"touhou" "touhou"
], ],
"dependencies": { "dependencies": {
"win32": ["directx"], "win32": [
"directx"
],
"darwin": [ "darwin": [
"wine" "wine"
] ]
...@@ -1018,7 +1010,7 @@ ...@@ -1018,7 +1010,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1058,9 +1050,6 @@ ...@@ -1058,9 +1050,6 @@
}, },
{ {
"id": "th105-lang-zh-CN", "id": "th105-lang-zh-CN",
"name": {
"zh-CN": "东方绯想天 语言包 (简体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -1115,7 +1104,8 @@ ...@@ -1115,7 +1104,8 @@
{ {
"id": "th11", "id": "th11",
"name": { "name": {
"zh-CN": "东方地灵殿" "zh-CN": "东方地灵殿",
"en-US": "Subterranean Animism"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -1125,7 +1115,9 @@ ...@@ -1125,7 +1115,9 @@
"touhou" "touhou"
], ],
"dependencies": { "dependencies": {
"win32": ["directx"], "win32": [
"directx"
],
"darwin": [ "darwin": [
"wine" "wine"
] ]
...@@ -1141,7 +1133,7 @@ ...@@ -1141,7 +1133,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1185,9 +1177,6 @@ ...@@ -1185,9 +1177,6 @@
}, },
{ {
"id": "th11-lang-zh-TW", "id": "th11-lang-zh-TW",
"name": {
"zh-CN": "东方地灵殿 语言包 (繁体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -1212,7 +1201,7 @@ ...@@ -1212,7 +1201,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "zh-TW"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1256,7 +1245,8 @@ ...@@ -1256,7 +1245,8 @@
{ {
"id": "th12", "id": "th12",
"name": { "name": {
"zh-CN": "东方星莲船" "zh-CN": "东方星莲船",
"en-US": "Undefined Fantastic Object"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -1266,7 +1256,9 @@ ...@@ -1266,7 +1256,9 @@
"touhou" "touhou"
], ],
"dependencies": { "dependencies": {
"win32": ["directx"], "win32": [
"directx"
],
"darwin": [ "darwin": [
"wine" "wine"
] ]
...@@ -1282,7 +1274,7 @@ ...@@ -1282,7 +1274,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1326,9 +1318,6 @@ ...@@ -1326,9 +1318,6 @@
}, },
{ {
"id": "th12-lang-zh-TW", "id": "th12-lang-zh-TW",
"name": {
"zh-CN": "东方星莲船 语言包 (繁体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -1353,7 +1342,7 @@ ...@@ -1353,7 +1342,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "zh-TW"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1397,7 +1386,8 @@ ...@@ -1397,7 +1386,8 @@
{ {
"id": "th123", "id": "th123",
"name": { "name": {
"zh-CN": "东方非想天则" "zh-CN": "东方非想天则",
"en-US": "Touhou Hisōtensoku"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -1427,7 +1417,7 @@ ...@@ -1427,7 +1417,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1468,9 +1458,6 @@ ...@@ -1468,9 +1458,6 @@
}, },
{ {
"id": "th123-lang-zh-CN", "id": "th123-lang-zh-CN",
"name": {
"zh-CN": "东方非想天则 语言包 (简体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -1525,7 +1512,8 @@ ...@@ -1525,7 +1512,8 @@
{ {
"id": "th1", "id": "th1",
"name": { "name": {
"zh-CN": "东方灵异传" "zh-CN": "东方灵异传",
"en-US": "Highly Responsive to Prayers"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -1551,7 +1539,7 @@ ...@@ -1551,7 +1539,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1582,7 +1570,8 @@ ...@@ -1582,7 +1570,8 @@
{ {
"id": "th2", "id": "th2",
"name": { "name": {
"zh-CN": "东方封魔录" "zh-CN": "东方封魔录",
"en-US": "Story of Eastern Wonderland"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -1610,7 +1599,7 @@ ...@@ -1610,7 +1599,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1638,9 +1627,6 @@ ...@@ -1638,9 +1627,6 @@
}, },
{ {
"id": "th2-lang-zh-TW", "id": "th2-lang-zh-TW",
"name": {
"zh-CN": "东方封魔录 语言包 (繁体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -1664,7 +1650,7 @@ ...@@ -1664,7 +1650,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "zh-TW"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1693,7 +1679,8 @@ ...@@ -1693,7 +1679,8 @@
{ {
"id": "th3", "id": "th3",
"name": { "name": {
"zh-CN": "东方梦时空" "zh-CN": "东方梦时空",
"en-US": "Phantasmagoria of Dim. Dream"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -1721,7 +1708,7 @@ ...@@ -1721,7 +1708,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1750,9 +1737,6 @@ ...@@ -1750,9 +1737,6 @@
}, },
{ {
"id": "th3-lang-zh-TW", "id": "th3-lang-zh-TW",
"name": {
"zh-CN": "东方梦时空 语言包 (繁体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -1776,7 +1760,7 @@ ...@@ -1776,7 +1760,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "zh-TW"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1805,7 +1789,8 @@ ...@@ -1805,7 +1789,8 @@
{ {
"id": "th4", "id": "th4",
"name": { "name": {
"zh-CN": "东方幻想乡" "zh-CN": "东方幻想乡",
"en-US": "Lotus Land Story"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -1833,7 +1818,7 @@ ...@@ -1833,7 +1818,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1862,9 +1847,6 @@ ...@@ -1862,9 +1847,6 @@
}, },
{ {
"id": "th4-lang-zh-TW", "id": "th4-lang-zh-TW",
"name": {
"zh-CN": "东方幻想乡 语言包 (繁体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -1888,7 +1870,7 @@ ...@@ -1888,7 +1870,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "zh-TW"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1917,7 +1899,8 @@ ...@@ -1917,7 +1899,8 @@
{ {
"id": "th5", "id": "th5",
"name": { "name": {
"zh-CN": "东方怪绮谈" "zh-CN": "东方怪绮谈",
"en-US": "Mystic Square"
}, },
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
...@@ -1945,7 +1928,7 @@ ...@@ -1945,7 +1928,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -1975,9 +1958,6 @@ ...@@ -1975,9 +1958,6 @@
}, },
{ {
"id": "th5-lang-zh-TW", "id": "th5-lang-zh-TW",
"name": {
"zh-CN": "东方怪绮谈 语言包 (繁体中文)"
},
"description": { "description": {
"zh-CN": "fxt desc" "zh-CN": "fxt desc"
}, },
...@@ -2001,7 +1981,7 @@ ...@@ -2001,7 +1981,7 @@
"author": "ZUN", "author": "ZUN",
"homepage": "http://www.myacg.cc", "homepage": "http://www.myacg.cc",
"locales": [ "locales": [
"zh-CN" "zh-TW"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -2051,7 +2031,9 @@ ...@@ -2051,7 +2031,9 @@
"author": "Fluorohydride", "author": "Fluorohydride",
"homepage": "https://github.com/Fluorohydride/ygopro", "homepage": "https://github.com/Fluorohydride/ygopro",
"locales": [ "locales": [
"zh-CN" "zh-CN",
"en-US",
"ja-JP"
], ],
"actions": { "actions": {
"win32": { "win32": {
...@@ -2073,20 +2055,30 @@ ...@@ -2073,20 +2055,30 @@
"win32": "1.033.C-7", "win32": "1.033.C-7",
"darwin": "1.033.C-7" "darwin": "1.033.C-7"
}, },
"news": [ "news": {
"zh-CN": [
{ {
"url": "https://ygobbs.com", "url": "https://ygobbs.com",
"image": "http://pic.4j4j.cn/upload/pic/20140327/af650cf463.jpg", "image": "http://pic.4j4j.cn/upload/pic/20140327/af650cf463.jpg",
"title": "News Title", "title": "这是一个新闻",
"text": "喵喵喵喵" "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", "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", "image": "http://image.tianjimedia.com/uploadImages/2012/159/1EF112986273.jpg",
"title": "News Title2", "title": "这是另一个新闻",
"text": "聚集的祈愿将成为新生的闪耀之星,化作光芒闪耀的道路吧!" "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" "conference": "ygopro_china_north"
}, },
{ {
...@@ -2111,9 +2103,6 @@ ...@@ -2111,9 +2103,6 @@
}, },
"author": "Fluorohydride", "author": "Fluorohydride",
"homepage": "https://github.com/Fluorohydride/ygopro", "homepage": "https://github.com/Fluorohydride/ygopro",
"locales": [
"zh-CN"
],
"actions": { "actions": {
"win32": { "win32": {
"main": { "main": {
...@@ -2138,7 +2127,8 @@ ...@@ -2138,7 +2127,8 @@
{ {
"id": "ghost_trick", "id": "ghost_trick",
"name": { "name": {
"zh-CN": "幽灵诡计" "zh-CN": "幽灵诡计",
"en-US": "Ghost Trick"
}, },
"description": { "description": {
"zh-CN": "A script engine for \"yu-gi-oh!\" and sample gui." "zh-CN": "A script engine for \"yu-gi-oh!\" and sample gui."
...@@ -2194,9 +2184,6 @@ ...@@ -2194,9 +2184,6 @@
}, },
{ {
"id": "ghost_trick-lang-zh-CN", "id": "ghost_trick-lang-zh-CN",
"name": {
"zh-CN": "幽灵诡计 语言包 (简体中文)"
},
"description": { "description": {
"zh-CN": "A script engine for \"yu-gi-oh!\" and sample gui." "zh-CN": "A script engine for \"yu-gi-oh!\" and sample gui."
}, },
...@@ -2250,7 +2237,8 @@ ...@@ -2250,7 +2237,8 @@
{ {
"id": "directx", "id": "directx",
"name": { "name": {
"zh-CN": "DirectX 最终用户运行时" "zh-CN": "DirectX 最终用户运行时",
"en-US": "DirectX End-User Runtime"
}, },
"description": { "description": {
"zh-CN": "A script engine for \"yu-gi-oh!\" and sample gui." "zh-CN": "A script engine for \"yu-gi-oh!\" and sample gui."
...@@ -2271,9 +2259,6 @@ ...@@ -2271,9 +2259,6 @@
}, },
"author": "Fluorohydride", "author": "Fluorohydride",
"homepage": "https://github.com/Fluorohydride/ygopro", "homepage": "https://github.com/Fluorohydride/ygopro",
"locales": [
"zh-CN"
],
"actions": { "actions": {
"win32": { "win32": {
"install": { "install": {
...@@ -2339,7 +2324,7 @@ ...@@ -2339,7 +2324,7 @@
{ {
"id": "wine", "id": "wine",
"name": { "name": {
"zh-CN": "wine" "zh-CN": "Wine"
}, },
"description": { "description": {
"zh-CN": "wine" "zh-CN": "wine"
......
...@@ -16,6 +16,36 @@ ...@@ -16,6 +16,36 @@
<source>切换账号</source> <source>切换账号</source>
<target>Change Account</target> <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>
<trans-unit datatype="html" id="a8cae935472a05e1c8c9be436bb7b1bdea96a54a"> <trans-unit datatype="html" id="a8cae935472a05e1c8c9be436bb7b1bdea96a54a">
<source>安装</source> <source>安装</source>
...@@ -26,11 +56,21 @@ ...@@ -26,11 +56,21 @@
<source>导入</source> <source>导入</source>
<target>Import</target> <target>Import</target>
</trans-unit>
<trans-unit datatype="html" id="8bb533b37ee18bf8d09df19b4d7234b38f134909">
<source>正在下载</source>
<target>Downloading...</target>
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="2fe99d94b20d6f8aba7814d8657037ec9d69d36c"> <trans-unit datatype="html" id="2fe99d94b20d6f8aba7814d8657037ec9d69d36c">
<source>正在安装...</source> <source>正在安装...</source>
<target>Installing...</target> <target>Installing...</target>
</trans-unit>
<trans-unit datatype="html" id="bea72fe35b7b9933e126b6ee3a6828c307ccc3d4">
<source>正在卸载...</source>
<target>UnInstalling...</target>
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="e5ee7e692c816893b6fd2f9375e6d8303cd794cd"> <trans-unit datatype="html" id="e5ee7e692c816893b6fd2f9375e6d8303cd794cd">
<source>等待安装...</source> <source>等待安装...</source>
...@@ -103,12 +143,18 @@ ...@@ -103,12 +143,18 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="4809edca33b1a07d7d6e8905287d3825e676f2c8"> <trans-unit datatype="html" id="4809edca33b1a07d7d6e8905287d3825e676f2c8">
<source>安装 <x id="INTERPOLATION"/></source> <source>安装
<target>Install <x id="INTERPOLATION"/></target> <x id="INTERPOLATION"/>
</source>
<target>Install
<x id="INTERPOLATION"/>
</target>
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="f8e60167c7a0871ccf40ed2a0750311411dfd665"> <trans-unit datatype="html" id="f8e60167c7a0871ccf40ed2a0750311411dfd665">
<source>即将开始安装 <x id="INTERPOLATION"/></source> <source>即将开始安装
<x id="INTERPOLATION"/>
</source>
<target>Preparing Installation <target>Preparing Installation
<x id="INTERPOLATION"/> <x id="INTERPOLATION"/>
</target> </target>
...@@ -138,11 +184,6 @@ ...@@ -138,11 +184,6 @@
<source>创建桌面快捷方式</source> <source>创建桌面快捷方式</source>
<target>Create Desktop Shortcut</target> <target>Create Desktop Shortcut</target>
</trans-unit>
<trans-unit datatype="html" id="2af1068491573803bc4756c4f94a689155370d9c">
<source>扩展内容</source>
<target>Expansion</target>
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="2ba33dd61b1ac70666322680f248e5336b3ee69a"> <trans-unit datatype="html" id="2ba33dd61b1ac70666322680f248e5336b3ee69a">
<source>依赖:</source> <source>依赖:</source>
...@@ -310,7 +351,10 @@ ...@@ -310,7 +351,10 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="4baa1360b4d635000fc5e14a6e7376f46ace0bd9"> <trans-unit datatype="html" id="4baa1360b4d635000fc5e14a6e7376f46ace0bd9">
<source><x id="INTERPOLATION"/> LP</source> <source>
<x id="INTERPOLATION"/>
LP
</source>
<target> <target>
<x id="INTERPOLATION"/> <x id="INTERPOLATION"/>
LP LP
...@@ -318,7 +362,10 @@ ...@@ -318,7 +362,10 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="1939517ea2b4ff337ce2847302fbcc6f1217d269"> <trans-unit datatype="html" id="1939517ea2b4ff337ce2847302fbcc6f1217d269">
<source><x id="INTERPOLATION"/> 初始</source> <source>
<x id="INTERPOLATION"/>
初始
</source>
<target> <target>
<x id="INTERPOLATION"/> <x id="INTERPOLATION"/>
Starting Starting
...@@ -326,7 +373,10 @@ ...@@ -326,7 +373,10 @@
</trans-unit> </trans-unit>
<trans-unit datatype="html" id="a19d6d5a2c74d9df73936a17b5c71b2069051b49"> <trans-unit datatype="html" id="a19d6d5a2c74d9df73936a17b5c71b2069051b49">
<source><x id="INTERPOLATION"/> 抽卡</source> <source>
<x id="INTERPOLATION"/>
抽卡
</source>
<target> <target>
<x id="INTERPOLATION"/> <x id="INTERPOLATION"/>
Draw Draw
......
{ {
"name": "mycard", "name": "mycard",
"version": "3.0.0-dev.14", "version": "3.0.0-dev.17",
"description": "mycard", "description": "mycard",
"keywords": [], "keywords": [],
"author": "zh99998 <zh99998@gmail.com>", "author": "zh99998 <zh99998@gmail.com>",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment