import { type PackFile } from "./packs"; import type { TranslationsFile } from "./types"; /** * 翻訳エントリを持つファイル 1 つ分(プロジェクトの translations.json、 * または依存パッケージの翻訳パック)。translate / status はこの配列を * 横断して処理する。 */ export interface TranslationSource { /** 表示用ラベル(project: "translations.json"、pack: パッケージ名) */ label: string; kind: "project" | "pack"; filePath: string; entries: TranslationsFile; /** kind === "pack" のときのメタデータ(書き戻しに使う) */ pack?: PackFile; /** applyTranslation で書き換えられたか(writeSources が書き出す対象) */ dirty?: boolean; } /** * プロジェクトの翻訳対象ファイル一式を読み込む。 * translations.json(存在すれば)+ packs/ 以下の全パック。 * packages を指定するとそのパックだけに絞る(プロジェクト分は含めない)。 */ export declare function loadProjectSources(projectDir: string, options?: { translationsPath?: string; packages?: string[]; }): TranslationSource[]; /** * パスの一覧から翻訳対象ファイルを読み込む(翻訳エンジン用)。 * 各ファイルはパック形式か素の translations.json 形式かを内容で判定する。 * 存在しないファイルは読み飛ばす。 */ export declare function loadSourcesAt(paths: string[]): TranslationSource[]; /** 翻訳待ちの 1 件(横断集計用)。symbol は最初に見つかったものを使う */ export interface PendingItem { hash: string; original: string; symbol?: string; } /** * 全ソースの翻訳待ちエントリをハッシュで重複排除して集める。 * 同じ原文がプロジェクトとパックの両方にある場合も翻訳は 1 回で済み、 * applyTranslation が両方へ書き戻す。 */ export declare function collectPending(sources: TranslationSource[], targetLang: string): PendingItem[]; /** * 訳文をハッシュの一致する全ソースへ書き込む(メモリ上)。 * 書き込んだソース数を返す(0 ならどこにも該当が無い)。 */ export declare function applyTranslation(sources: TranslationSource[], hash: string, translated: string, lang: string): number; /** applyTranslation で変更のあったソースだけをファイルへ書き出す */ export declare function writeSources(sources: TranslationSource[]): void;