import type { ExtractedComment } from "./extract"; import type { TranslationEntry, TranslationsFile } from "./types"; /** translations.json の既定の相対パス */ export declare const TRANSLATIONS_RELATIVE_PATH: string; /** * translations.json のパスを解決する(全コマンド・全エンジン共通)。 * outPath 未指定なら projectDir/.yakudoc/translations.json。 */ export declare function resolveTranslationsPath(projectDir: string, outPath?: string): string; /** * エントリが「翻訳待ち」かを判定する(status・翻訳エンジン共通)。 * 訳文が空、または訳文の言語が現在の翻訳先と異なる場合に翻訳待ちとなる。 * lang が無いエントリは現在の翻訳先の訳とみなす(既存ファイルの互換のため)。 */ export declare function needsTranslation(entry: TranslationEntry, targetLang: string): boolean; /** translations.json を読み込む。存在しなければ undefined */ export declare function readTranslations(filePath: string): TranslationsFile | undefined; export interface MergeStats { /** 訳文を保持できたエントリ数 */ translated: number; /** 翻訳待ちのエントリ数 */ untranslated: number; /** 今回の抽出に現れなかった既存エントリ数 */ stale: number; } /** * 抽出結果を既存ファイルへマージする。 * * - ハッシュが一致する既存エントリの訳文は保持する(差分翻訳) * - 新規の原文は translated: "" の「翻訳待ち」として追加する * - ソースから消えた原文は既定では残す(抽出漏れで訳を失わないため)。 * prune: true で削除する */ export declare function mergeTranslations(existing: TranslationsFile, extracted: ExtractedComment[], options: { prune: boolean; }): { merged: TranslationsFile; stats: MergeStats; }; /** symbol → original の順で整列して書き出す(diff を安定させるため) */ export declare function writeTranslations(filePath: string, data: TranslationsFile): void;