Skip to content

Commit a44c7c2

Browse files
committed
ローカライズの実装おわり
1 parent 6c0ba82 commit a44c7c2

File tree

10 files changed

+154
-58
lines changed

10 files changed

+154
-58
lines changed

package.nls.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
"commands.qiita.makePublic.title": "投稿を公開にする",
2727
"commands.qiita.makePublic.success": "公開範囲を公開に変更しました",
28-
"commands.qiita.makePublic.confirm.title": "投稿を削除してもよろしいですか? 一度公開にしてしまうと非公開に戻すことは出来ません。",
28+
"commands.qiita.makePublic.confirm.title": "公開範囲を公開にしてもよろしいですか? 一度公開にしてしまうと非公開に戻すことは出来ません。",
2929
"commands.qiita.makePublic.confirm.next": "公開にする",
3030
"commands.qiita.makePublic.confirm.cancel": "キャンセル",
3131
"commands.qiita.makePublic.failure.alredyPublic": "この投稿は既に公開されています。",

src/commands/compose.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
import { CreateItemOptions } from 'qiita-js-2';
22
import { commands, Uri, window, workspace } from 'vscode';
3+
import * as nls from 'vscode-nls';
34
import { client } from '../client';
45
import { configuration } from '../configuration';
56
import { tagQuickPickCreator } from '../quickpicks/tagQuickPickCreator';
67
import { titleInputBoxCreator } from '../quickpicks/titleInputBoxCreator';
7-
import { visibilityQuickPickCreator } from '../quickpicks/visibilityQuickPickCreator';
8+
import { privateLabel, visibilityQuickPickCreator } from '../quickpicks/visibilityQuickPickCreator';
89
import { createMultiStepInput } from '../utils/createMultiStepInput';
10+
import { handleErrorMessage } from '../utils/errorHandler';
11+
12+
const localize = nls.loadMessageBundle();
913

1014
/**
1115
* パスからファイル名を取得
@@ -58,19 +62,32 @@ export function compose (arg: object & { path: string }): void {
5862

5963
// visibilityQuickPick終了時に公開状態を代入してQiita.createItemを呼び出し
6064
visibilityQuickPick.onDidAccept(async () => {
61-
options.private = visibilityQuickPick.selectedItems[0].label === '限定公開';
62-
const openInBrowswer = 'ブラウザで確認';
65+
options.private = visibilityQuickPick.selectedItems[0].label === privateLabel;
6366

6467
try {
6568
visibilityQuickPick.hide();
6669
const item = await client.createItem(options);
67-
const result = await window.showInformationMessage('投稿を公開しました', openInBrowswer);
6870

69-
if (result === openInBrowswer) {
71+
const openInBrowser = localize(
72+
'commands.qiita.compose.openInBrowser',
73+
'ブラウザで確認',
74+
);
75+
76+
const result = await window.showInformationMessage(
77+
localize(
78+
'commands.qiita.compose.success',
79+
'投稿を公開しました',
80+
),
81+
openInBrowser,
82+
);
83+
84+
if (result === openInBrowser) {
7085
commands.executeCommand('vscode.open', Uri.parse(item.url));
7186
}
87+
88+
return;
7289
} catch (error) {
73-
window.showErrorMessage(error.toString());
90+
return handleErrorMessage(error);
7491
}
7592
});
7693

src/commands/deleteItem.ts

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,44 @@ import { Item } from 'qiita-js-2';
22
import { window } from 'vscode';
33
import * as nls from 'vscode-nls';
44
import { client } from '../client';
5+
import { handleErrorMessage } from '../utils/errorHandler';
56

67
const localize = nls.loadMessageBundle();
78

8-
const messages = {
9-
next: localize('commads.qiita.deleteItem.confirm.continue', '削除する'),
10-
cancel: localize('commads.qiita.deleteItem.confirm.cancel', 'キャンセル'),
11-
confirmation: localize('commads.qiita.deleteItem.confirm', '投稿を削除してもよろしいですか?'),
12-
success: localize('commads.qiita.deleteItem.success', '投稿を削除しました'),
13-
};
14-
159
/**
1610
* コマンド `qiita.deleteItem` のハンドラーで、Qiitaの投稿を削除します。
1711
* @param arg Commandで渡される引数。qiitaItemsビューから発行されるので `item` キーに投稿が入っています。
1812
*/
1913
export async function deleteItem (arg: object & { item: Item }) {
20-
const result = await window.showInformationMessage(messages.confirmation, messages.next, messages.cancel);
14+
const next = localize(
15+
'commands.qiita.deleteItem.confirm.next',
16+
'削除する',
17+
);
18+
19+
const result = await window.showInformationMessage(
20+
localize(
21+
'commands.qiita.deleteItem.confirm.title',
22+
'投稿を削除してもよろしいですか?',
23+
),
24+
next,
25+
localize(
26+
'commands.qiita.deleteItem.confirm.cancel',
27+
'キャンセル',
28+
),
29+
);
2130

22-
if (result !== messages.next) {
31+
if (result !== next) {
2332
return;
2433
}
2534

2635
try {
2736
await client.deleteItem(arg.item.id);
28-
return window.showInformationMessage(messages.success);
37+
38+
return window.showInformationMessage(localize(
39+
'commands.qiita.deleteItem.success',
40+
'投稿を削除しました',
41+
));
2942
} catch (error) {
30-
switch (error.name) {
31-
case 'QiitaUnauthorizedError':
32-
case 'QiitaForbiddenError':
33-
return window.showErrorMessage('削除に失敗しました。投稿の所有権を確認してもう一度お試しください。');
34-
case 'QiitaNotFoundError':
35-
return window.showErrorMessage('削除に失敗しました。この投稿は既に削除されている可能性があります。');
36-
case 'QiitaRateLimitError':
37-
return window.showErrorMessage('APIのレートリミットに到達しました。時間をおいてもう一度お試しください。');
38-
case 'QiitaInternalServerError':
39-
return window.showErrorMessage('削除に失敗しました。Qiitaのサーバーがダウンしている可能性があります。');
40-
default:
41-
return window.showErrorMessage('ご迷惑をお掛けしてしまい申し訳ございませんが、エラーが発生しました。 バグの可能性がある場合は開発者にご報告いただけると幸いです。\nhttps://github.com/neet/vscode-qiita/issues');
42-
}
43+
return handleErrorMessage(error);
4344
}
4445
}

src/commands/editTags.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import { Item } from 'qiita-js-2';
22
import { QuickPickItem, window } from 'vscode';
3+
import * as nls from 'vscode-nls';
34
import { client } from '../client';
45
import { makeQuickPickItemFromTag, tagQuickPickCreator } from '../quickpicks/tagQuickPickCreator';
6+
import { handleErrorMessage } from '../utils/errorHandler';
7+
8+
const localize = nls.loadMessageBundle();
59

610
export const updater = async (item: Item, selectedItems: ReadonlyArray<QuickPickItem>) => {
711
const taggings = selectedItems.map((item) => ({
@@ -16,6 +20,10 @@ export const updater = async (item: Item, selectedItems: ReadonlyArray<QuickPick
1620
});
1721
};
1822

23+
/**
24+
* タグを編集するためのquickPickを作成
25+
* @param arg コマンドから渡される引数
26+
*/
1927
export async function editTags (arg: object & { item: Item }) {
2028
const { item } = arg;
2129
const { tags: taggings } = arg.item;
@@ -31,11 +39,15 @@ export async function editTags (arg: object & { item: Item }) {
3139

3240
input.onDidAccept(async () => {
3341
try {
34-
await updater(item, input.selectedItems);
35-
window.showInformationMessage('タグを編集しました');
3642
input.hide();
43+
await updater(item, input.selectedItems);
44+
45+
return window.showInformationMessage(localize(
46+
'commands.qiita.editTags.success',
47+
'タグを編集しました',
48+
));
3749
} catch (error) {
38-
window.showErrorMessage(error.toString());
50+
return handleErrorMessage(error);
3951
}
4052
});
4153
}

src/commands/makePublic.ts

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,41 @@
11
import { Item } from 'qiita-js-2';
22
import { window } from 'vscode';
3+
import * as nls from 'vscode-nls';
34
import { client } from '../client';
5+
import { handleErrorMessage } from '../utils/errorHandler';
46

7+
const localize = nls.loadMessageBundle();
8+
9+
/**
10+
* 公開状態を変更するか確認するダイアログを表示して、公開状態を変更します
11+
* @param arg コマンドから渡される引数
12+
*/
513
export async function makePublic (arg: object & { item: Item }) {
614
if (!arg.item.private) {
7-
return window.showInformationMessage('この投稿は既に公開されています。');
15+
return window.showInformationMessage(localize(
16+
'commands.qiita.makePublic.failure.alredyPublic',
17+
'この投稿は既に公開されています。',
18+
));
819
}
920

10-
const _continue = '公開にする';
11-
const cancel = 'キャンセル';
21+
const next = localize(
22+
'commands.qiita.makePublic.confirm.next',
23+
'公開にする',
24+
);
1225

13-
const result = await window.showInformationMessage('投稿を削除してもよろしいですか? 一度公開にしてしまうと非公開に戻すことは出来ません。', _continue, cancel);
26+
const result = await window.showInformationMessage(
27+
localize(
28+
'commands.qiita.makePublic.confirm.title',
29+
'公開範囲を公開にしてもよろしいですか? 一度公開にしてしまうと非公開に戻すことは出来ません。',
30+
),
31+
next,
32+
localize(
33+
'commands.qiita.makePublic.confirm.cancel',
34+
'キャンセル',
35+
),
36+
);
1437

15-
if (result !== _continue) {
38+
if (result !== next) {
1639
return;
1740
}
1841

@@ -24,8 +47,11 @@ export async function makePublic (arg: object & { item: Item }) {
2447
private: false,
2548
});
2649

27-
return window.showInformationMessage(`公開範囲を公開に変更しました`);
50+
return window.showInformationMessage(localize(
51+
'commands.qiita.makePublic.success',
52+
'公開範囲を公開に変更しました',
53+
));
2854
} catch (error) {
29-
return window.showErrorMessage(error.toString());
55+
return handleErrorMessage(error);
3056
}
3157
}

src/explorer/qiitaItems.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,7 @@ export class QiitaItem extends TreeItem {
5252
super(item.title, collapsibleState);
5353
}
5454

55-
// public iconPath = this.collapsibleState === TreeItemCollapsibleState.Expanded
56-
// ? path.join(__filename, '..', '..', '..', 'resources', 'dark', 'file_focused.svg')
57-
// : path.join(__filename, '..', '..', '..', 'resources', 'dark', 'file.svg');
58-
59-
public resourceUri = Uri.parse('text.md');
55+
public resourceUri = Uri.parse('file:///text.md');
6056

6157
public contextValue = 'qiitaItems';
6258
}

src/quickpicks/tagQuickPickCreator.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import { SearchTagResult } from 'qiita-js-2';
22
import { QuickPickItem, window } from 'vscode';
3+
import * as nls from 'vscode-nls';
34
import { client } from '../client';
45

6+
const localize = nls.loadMessageBundle();
7+
58
/**
69
* Tagの情報を基にQuickPickItemを作成します
710
* @param id タグのID
@@ -10,7 +13,11 @@ import { client } from '../client';
1013
*/
1114
export const makeQuickPickItemFromTag = (id: string, followersCount: number) => ({
1215
label: id,
13-
description: `${followersCount}件の投稿`,
16+
description: localize(
17+
'quickpicks.tagQuickPick.item.description',
18+
'{0}件の投稿',
19+
followersCount,
20+
),
1421
});
1522

1623
/**
@@ -44,6 +51,7 @@ export const insertInputRaw = (value: string, suggestions: SearchTagResult[]) =>
4451
export async function suggestTags (value: string): Promise<QuickPickItem[]> {
4552
const results = (await client.searchTags(value)).slice(0, 9);
4653
const formattedResults = insertInputRaw(value, results);
54+
4755
return formattedResults.map((tag) => makeQuickPickItemFromTag(tag.name, tag.follower_count));
4856
}
4957

@@ -58,8 +66,8 @@ export function tagQuickPickCreator (selectedItems?: QuickPickItem[]) {
5866
quickPick.canSelectMany = true;
5967
quickPick.items = selectedItems || [];
6068
quickPick.selectedItems = selectedItems || [];
61-
quickPick.title = '投稿に登録するタグを入力してください';
62-
quickPick.placeholder = '例) Rails React Mastodon';
69+
quickPick.title = localize('quickpicks.tagQuickPick.title', '投稿に登録するタグを入力してください');
70+
quickPick.placeholder = localize('quickpicks.tagQuickPick.title', '例) Rails React Mastodon');
6371

6472
quickPick.onDidChangeValue(async (value: string) => {
6573
quickPick.busy = true;

src/quickpicks/titleInputBoxCreator.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import { window } from 'vscode';
2+
import * as nls from 'vscode-nls';
3+
4+
const localize = nls.loadMessageBundle();
25

36
/**
47
* タイトルを指定させるInputBoxを作成
@@ -8,13 +11,24 @@ import { window } from 'vscode';
811
export function titleInputBoxCreator (defaultValue?: string) {
912
const inputBox = window.createInputBox();
1013

11-
inputBox.value = defaultValue || '';
12-
inputBox.title = '投稿のタイトルを入力してください';
13-
inputBox.placeholder = '例) サルでもわかる!Rails入門';
14+
inputBox.value = defaultValue || '';
15+
16+
inputBox.title = localize(
17+
'quickpicks.titleInputBox.title',
18+
'投稿のタイトルを入力してください',
19+
);
20+
21+
inputBox.placeholder = localize(
22+
'quickpicks.titleInputBox.placeholder',
23+
'例) サルでもわかる!Rails入門',
24+
);
1425

1526
inputBox.onDidChangeValue(() => {
1627
if (inputBox.value.length > 255) {
17-
inputBox.validationMessage = 'タイトルは255文字まで有効です';
28+
inputBox.validationMessage = localize(
29+
'quickpicks.titleInputBox.validationMessage',
30+
'タイトルは255文字まで有効です',
31+
);
1832
}
1933
});
2034

src/quickpicks/visibilityQuickPickCreator.ts

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,37 @@
11
import { window } from 'vscode';
2+
import * as nls from 'vscode-nls';
3+
4+
const localize = nls.loadMessageBundle();
5+
6+
// 外のコンポーネントから結果値を利用するためエクスポート
7+
export const publicLabel = localize('quickpicks.visibilityQuickPick.public.label', '公開');
8+
export const privateLabel = localize('quickpicks.visibilityQuickPick.private.label', '限定公開');
29

310
/**
411
* 公開範囲を指定させるQuickPickを作成
512
* @return QuickPick
613
*/
714
export function visibilityQuickPickCreator () {
815
const quickPick = window.createQuickPick();
9-
quickPick.title = '投稿の公開範囲を選択してください';
16+
quickPick.title = localize(
17+
'quickpicks.visibilityQuickPick.title',
18+
'投稿の公開範囲を選択してください',
19+
);
20+
1021
quickPick.items = [
1122
{
12-
label: '公開',
13-
description: '誰でも投稿を閲覧できます',
23+
label: publicLabel,
24+
description: localize(
25+
'quickpicks.visibilityQuickPick.public.description',
26+
'誰でも投稿を閲覧できます',
27+
),
1428
},
1529
{
16-
label: '限定公開',
17-
description: '投稿のURLを知っている人だけが投稿を閲覧できます',
30+
label: privateLabel,
31+
description: localize(
32+
'quickpicks.visibilityQuickPick.private.description',
33+
'投稿のURLを知っている人だけが投稿を閲覧できます',
34+
),
1835
},
1936
];
2037

src/utils/errorHandler.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1+
import { QiitaError } from 'qiita-js-2';
12
import { window } from 'vscode';
23
import * as nls from 'vscode-nls';
34

45
const localize = nls.loadMessageBundle();
56

6-
export function handleErrorMessage (error: Error) {
7+
/**
8+
* QiitaErrorオブジェクトの内容に応じてshowErrorMessageに適切なメッセージを表示します。
9+
* @param error QiitaErrorを継承しているエラー
10+
*/
11+
export function handleErrorMessage <T extends QiitaError> (error: T) {
712
switch (error.name) {
813
case 'QiitaUnauthorizedError':
914
return window.showErrorMessage(localize('general.failure.unauhtorized', 'リクエストに失敗しました。Qiitaアカウントを認証しているかお確かめの上もう一度お試しください'));

0 commit comments

Comments
 (0)