fix: localize remaining action labels

Change-Id: I4ac6db14c4aede9a106e8023effac3c99d3c037a
This commit is contained in:
wujunchen 2026-04-29 13:54:53 +08:00
parent 2d39a91aed
commit 5304ed3a48
5 changed files with 25 additions and 5 deletions

View file

@ -328,7 +328,13 @@ class ParallelReaderPlugin extends Plugin {
}
confirmRegenerateEditedCards(): Promise<boolean> {
return confirmRegenerateEditedCards(this.app, this.t('displayName'), this.t('confirmRegenerateEditedCards'));
return confirmRegenerateEditedCards(
this.app,
this.t('displayName'),
this.t('confirmRegenerateEditedCards'),
this.t('confirmRegenerateCancel'),
this.t('confirmRegenerateProceed'),
);
}
addFileMenuItems(menu: ObsidianMenu, file: unknown) {

View file

@ -60,6 +60,8 @@ export const STRINGS: Record<string, Record<string, string>> = {
noActiveCard: '当前没有可跳转的摘要卡片',
viewOpenFailed: '无法打开对照笔记面板',
confirmRegenerateEditedCards: '这篇笔记的对照卡片已被手动编辑。重新生成会覆盖这些修改,是否继续?',
confirmRegenerateCancel: '取消',
confirmRegenerateProceed: '重新生成',
regenerateCancelled: '已取消重新生成',
cardDeleted: '已删除此卡片',
cardSaved: '已保存此卡片',
@ -132,6 +134,7 @@ export const STRINGS: Record<string, Record<string, string>> = {
settingCustomPromptDesc: '可选。支持变量:{minCards}、{maxCards}、{languageInstruction}、{schema}、{example}',
settingCustomPromptPlaceholder: '留空使用内置 prompt',
settingTestBackendName: '测试当前后端',
settingTestBackendButton: '测试',
settingTestBackendDescApi: '会发起一次最小 LLM 请求验证 API 设置',
settingTestBackendDescCli: '调用 `<cli> --version` 验证 spawn 能找到二进制',
backendTestFailed: '✗ 后端测试失败:{error}',
@ -221,6 +224,8 @@ export const STRINGS: Record<string, Record<string, string>> = {
viewOpenFailed: 'Could not open the Parallel Reader pane',
confirmRegenerateEditedCards:
'These parallel-reader cards were edited manually. Regenerating will overwrite those edits. Continue?',
confirmRegenerateCancel: 'Cancel',
confirmRegenerateProceed: 'Regenerate',
regenerateCancelled: 'Regeneration cancelled',
cardDeleted: 'Deleted this card',
cardSaved: 'Saved this card',
@ -296,6 +301,7 @@ export const STRINGS: Record<string, Record<string, string>> = {
settingCustomPromptDesc: 'Optional. Variables: {minCards}, {maxCards}, {languageInstruction}, {schema}, {example}',
settingCustomPromptPlaceholder: 'Leave blank to use built-in prompt',
settingTestBackendName: 'Test current backend',
settingTestBackendButton: 'Test',
settingTestBackendDescApi: 'Sends a minimal LLM request to validate API settings.',
settingTestBackendDescCli: 'Runs `<cli> --version` to verify the binary can be spawned.',
backendTestFailed: '✗ Backend test failed: {error}',

View file

@ -4,7 +4,13 @@ import { type App, Modal } from 'obsidian';
import type { CardPatch, PluginHost, ResolvedCard } from './types';
import { addTextButton } from './ui-helpers';
export function confirmRegenerateEditedCards(app: App, title: string, message: string): Promise<boolean> {
export function confirmRegenerateEditedCards(
app: App,
title: string,
message: string,
cancelText: string,
confirmText: string,
): Promise<boolean> {
return new Promise<boolean>((resolve) => {
let settled = false;
const settle = (value: boolean) => {
@ -16,11 +22,11 @@ export function confirmRegenerateEditedCards(app: App, title: string, message: s
modal.titleEl.setText(title);
modal.contentEl.createEl('p', { text: message });
const btnRow = modal.contentEl.createDiv({ cls: 'modal-button-container' });
btnRow.createEl('button', { text: 'Cancel' }).addEventListener('click', () => {
btnRow.createEl('button', { text: cancelText }).addEventListener('click', () => {
modal.close();
settle(false);
});
btnRow.createEl('button', { text: 'OK', cls: 'mod-cta' }).addEventListener('click', () => {
btnRow.createEl('button', { text: confirmText, cls: 'mod-cta' }).addEventListener('click', () => {
modal.close();
settle(true);
});

View file

@ -342,7 +342,7 @@ export class ParallelReaderSettingTab extends PluginSettingTab {
.setName(this.tr('settingTestBackendName'))
.setDesc(isCliBacked ? this.tr('settingTestBackendDescCli') : this.tr('settingTestBackendDescApi'))
.addButton((b) =>
b.setButtonText('Test').onClick(async () => {
b.setButtonText(this.tr('settingTestBackendButton')).onClick(async () => {
try {
const result = await testBackend(this.plugin.settings);
new Notice(`${result.slice(0, 180)}`, 8000);

View file

@ -25,5 +25,7 @@ assert.strictEqual(
);
assert.strictEqual(t.translate({ uiLanguage: 'zh' }, 'appTitle'), '对照阅读笔记', 'zh translation for appTitle');
assert.strictEqual(t.translate({ uiLanguage: 'en' }, '__no_such_key__'), '__no_such_key__', 'missing key returns key');
assert.strictEqual(t.translate({ uiLanguage: 'zh' }, 'settingTestBackendButton'), '测试');
assert.strictEqual(t.translate({ uiLanguage: 'en' }, 'confirmRegenerateProceed'), 'Regenerate');
console.log('i18n tests passed');