/** 字段翻译模式：direct=本表行；ref=冗余列走源表 pack */
export type DataI18nFieldMode = 'direct' | 'ref';
export type DataI18nFieldConfig = {
    tableName: string;
    fieldName: string;
    pkField: string;
    enabled: boolean;
    mode: DataI18nFieldMode;
    /** ref：源表名（如 game_skin） */
    sourceTable?: string;
    sourcePkField?: string;
    sourceField?: string;
    /** ref：当前表关联列（如 steamId） */
    joinField?: string;
    /** ref：源表关联列（默认同 joinField） */
    sourceJoinField?: string;
};
export type DataI18nPackMap = Record<string, Record<string, string>>;
export type DataI18nApplyContext = {
    langCode: string;
    tenantId: number;
    tableName: string;
    fields: DataI18nFieldConfig[];
    loadPack: (tableName: string) => Promise<DataI18nPackMap | null>;
    /** ref：批量解析 join 值 → 源表 pk */
    resolveSourcePk?: (input: {
        sourceTable: string;
        sourcePkField: string;
        sourceJoinField: string;
        joinValues: unknown[];
    }) => Promise<Map<string, string>>;
};
export type DataI18nApplier = (rows: unknown, ctx: {
    langCode: string;
    tenantId: number;
    tableName: string;
    fields: DataI18nFieldConfig[];
}) => Promise<unknown>;
export declare function registerDataI18nApplier(fn: DataI18nApplier | null): void;
export declare function registerDataI18nFieldLoader(fn: ((tableName: string) => Promise<DataI18nFieldConfig[]>) | null): void;
export declare function shouldApplyDataI18n(langCode?: string): boolean;
/** 默认内存替换（宿主可 registerDataI18nApplier 覆盖） */
export declare function applyDataI18nDefault(rows: unknown, ctx: DataI18nApplyContext): Promise<unknown>;
export declare function applyDataI18n(rows: unknown, tableName: string, langCode?: string): Promise<unknown>;
