import { CrowdinApi, DownloadLink, PaginationOptions, PatchRequest, ResponseList, ResponseObject, Status } from '../core';
/**
 * Translators can work with entirely untranslated project or you can pre-translate the files to ease the translations process.
 *
 * Use API to pre-translate files via Machine Translation (MT) or Translation Memory (TM), upload your existing translations, and download translations correspondingly.
 * Pre-translate and build are asynchronous operations and shall be completed with sequence of API methods.
 */
export declare class Translations extends CrowdinApi {
    /**
     * @param projectId project identifier
     * @param options optional parameters for the request
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.pre-translations.getMany
     */
    listPreTranslations(projectId: number, options?: PaginationOptions): Promise<ResponseList<Status<TranslationsModel.PreTranslationStatusAttributes>>>;
    /**
     * @param projectId project identifier
     * @param preTranslationId pre translation identifier
     * @see https://developer.crowdin.com/api/v2/#tag/Translations/paths/~1projects~1{projectId}~1pre-translations~1{preTranslationId}/get
     */
    preTranslationStatus(projectId: number, preTranslationId: string): Promise<ResponseObject<Status<TranslationsModel.PreTranslationStatusAttributes>>>;
    /**
     * @param projectId project identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.pre-translations.post
     */
    applyPreTranslation(projectId: number, request: TranslationsModel.PreTranslateRequest | TranslationsModel.PreTranslateStringsRequest): Promise<ResponseObject<Status<TranslationsModel.PreTranslationStatusAttributes>>>;
    /**
     * @param projectId project identifier
     * @param preTranslationId pre translation identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.pre-translations.patch
     */
    editPreTranslation(projectId: number, preTranslationId: string, request: PatchRequest[]): Promise<ResponseObject<Status<TranslationsModel.PreTranslationStatusAttributes>>>;
    /**
     * @param projectId project identifier
     * @param directoryId directory identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.translations.builds.directories.post
     */
    buildProjectDirectoryTranslation(projectId: number, directoryId: number, request?: TranslationsModel.BuildProjectDirectoryTranslationRequest): Promise<ResponseObject<TranslationsModel.BuildProjectDirectoryTranslationResponse>>;
    /**
     * @param projectId project identifier
     * @param fileId file identifier
     * @param request request body
     * @param eTag 'If-None-Match' header
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.translations.builds.files.post
     */
    buildProjectFileTranslation(projectId: number, fileId: number, request: TranslationsModel.BuildProjectFileTranslationRequest, eTag?: string): Promise<ResponseObject<TranslationsModel.BuildProjectFileTranslationResponse>>;
    /**
     * @param projectId project identifier
     * @param options optional parameters for the request
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.translations.builds.getMany
     */
    listProjectBuilds(projectId: number, options?: TranslationsModel.ListProjectBuildsOptions): Promise<ResponseList<TranslationsModel.Build>>;
    /**
     * @param projectId project identifier
     * @param branchId branch identifier
     * @param limit maximum number of items to retrieve (default 25)
     * @param offset starting offset in the collection (default 0)
     * @deprecated optional parameters should be passed through an object
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.translations.builds.getMany
     */
    listProjectBuilds(projectId: number, branchId?: number, limit?: number, offset?: number): Promise<ResponseList<TranslationsModel.Build>>;
    /**
     * @param projectId project identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.translations.builds.post
     */
    buildProject(projectId: number, request?: TranslationsModel.BuildRequest | TranslationsModel.PseudoBuildRequest): Promise<ResponseObject<TranslationsModel.Build>>;
    /**
     * @param projectId project identifier
     * @param languageId language identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.translations.postOnLanguage
     */
    uploadTranslation(projectId: number, languageId: string, request: TranslationsModel.UploadTranslationRequest): Promise<ResponseObject<TranslationsModel.UploadTranslationResponse>>;
    uploadTranslationStrings(projectId: number, languageId: string, request: TranslationsModel.UploadTranslationStringsRequest): Promise<ResponseObject<TranslationsModel.UploadTranslationStringsResponse>>;
    /**
     * @param projectId project identifier
     * @param buildId build identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.translations.builds.download.download
     */
    downloadTranslations(projectId: number, buildId: number): Promise<ResponseObject<DownloadLink>>;
    /**
     * @param projectId project identifier
     * @param buildId build identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.translations.builds.get
     */
    checkBuildStatus(projectId: number, buildId: number): Promise<ResponseObject<TranslationsModel.Build>>;
    /**
     * @param projectId project identifier
     * @param buildId build identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.translations.builds.delete
     */
    cancelBuild(projectId: number, buildId: number): Promise<void>;
    /**
     * @param projectId project identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.translations.exports.post
     */
    exportProjectTranslation(projectId: number, request: TranslationsModel.ExportProjectTranslationRequest): Promise<ResponseObject<DownloadLink>>;
}
export declare namespace TranslationsModel {
    interface PreTranslateRequest {
        languageIds: string[];
        fileIds: number[];
        method?: Method;
        engineId?: number;
        aiPromptId?: number;
        autoApproveOption?: AutoApproveOption;
        duplicateTranslations?: boolean;
        skipApprovedTranslations?: boolean;
        translateUntranslatedOnly?: boolean;
        translateWithPerfectMatchOnly?: boolean;
        fallbackLanguages?: {
            languageId?: string[];
        };
        labelIds?: number[];
        excludeLabelIds?: number[];
    }
    interface PreTranslateStringsRequest {
        languageIds: string[];
        branchIds?: number[];
        method?: Method;
        engineId?: number;
        aiPromptId?: number;
        autoApproveOption?: AutoApproveOption;
        duplicateTranslations?: boolean;
        skipApprovedTranslations?: boolean;
        translateUntranslatedOnly?: boolean;
        translateWithPerfectMatchOnly?: boolean;
        fallbackLanguages?: {
            languageId: string[];
        };
        labelIds?: number[];
        excludeLabelIds?: number[];
    }
    interface BuildProjectDirectoryTranslationRequest {
        targetLanguageIds?: string[];
        skipUntranslatedStrings?: boolean;
        skipUntranslatedFiles?: boolean;
        preserveFolderHierarchy?: boolean;
        exportStringsThatPassedWorkflow?: boolean;
        exportWithMinApprovalsCount?: number;
        exportApprovedOnly?: boolean;
    }
    interface BuildProjectDirectoryTranslationResponse {
        id: number;
        projectId: number;
        status: BuildStatus;
        progress: number;
        createdAt: string;
        updatedAt: string;
        finishedAt: string;
    }
    type BuildStatus = 'created' | 'inProgress' | 'canceled' | 'failed' | 'finished';
    interface BuildProjectFileTranslationRequest {
        targetLanguageId: string;
        /**
         * @deprecated Use {@link Translations.exportProjectTranslation} instead
         */
        exportAsXliff?: boolean;
        skipUntranslatedStrings?: boolean;
        skipUntranslatedFiles?: boolean;
        exportApprovedOnly?: boolean;
        exportWithMinApprovalsCount?: number;
        exportStringsThatPassedWorkflow?: boolean;
    }
    interface BuildProjectFileTranslationResponse extends DownloadLink {
        etag: string;
    }
    interface PreTranslationStatusAttributes {
        languageIds: string[];
        fileIds: number[];
        branchIds: number[];
        method: Method;
        autoApproveOption: AutoApproveOption;
        duplicateTranslations: boolean;
        skipApprovedTranslations: boolean;
        translateUntranslatedOnly: boolean;
        translateWithPerfectMatchOnly: boolean;
    }
    type Method = 'tm' | 'mt' | 'ai';
    type AutoApproveOption = 'all' | 'exceptAutoSubstituted' | 'perfectMatchOnly' | 'none';
    type CharTransformation = 'asian' | 'european' | 'arabic' | 'cyrillic';
    interface Build {
        id: number;
        projectId: number;
        status: BuildStatus;
        progress: number;
        attributes: Attribute;
        createdAt: string;
        updatedAt: string;
        finishedAt: string;
    }
    interface Attribute {
        branchId: number;
        directoryId: number;
        targetLanguageIds: string[];
        skipUntranslatedStrings: boolean;
        skipUntranslatedFiles: boolean;
        exportApprovedOnly: boolean;
        exportWithMinApprovalsCount: number;
        exportStringsThatPassedWorkflow: boolean;
    }
    interface BuildRequest {
        branchId?: number;
        targetLanguageIds?: string[];
        skipUntranslatedStrings?: boolean;
        skipUntranslatedFiles?: boolean;
        exportApprovedOnly?: boolean;
        exportWithMinApprovalsCount?: number;
        exportStringsThatPassedWorkflow?: boolean;
    }
    interface PseudoBuildRequest {
        pseudo: boolean;
        branchId?: number;
        prefix?: string;
        suffix?: string;
        lengthTransformation?: number;
        charTransformation?: CharTransformation;
    }
    interface UploadTranslationRequest {
        storageId: number;
        fileId?: number;
        importEqSuggestions?: boolean;
        autoApproveImported?: boolean;
        translateHidden?: boolean;
        addToTm?: boolean;
    }
    interface UploadTranslationStringsRequest {
        storageId: number;
        branchId?: number;
        importEqSuggestions?: boolean;
        autoApproveImported?: boolean;
        translateHidden?: boolean;
        addToTm?: boolean;
    }
    interface UploadTranslationResponse {
        projectId: number;
        storageId: number;
        languageId: string;
        fileId: number;
    }
    interface UploadTranslationStringsResponse {
        projectId: number;
        storageId: number;
        languageId: string;
        branchId: number;
    }
    interface ExportProjectTranslationRequest {
        targetLanguageId: string;
        format?: string;
        labelIds?: number[];
        branchIds?: number[];
        directoryIds?: number[];
        fileIds?: number[];
        skipUntranslatedStrings?: boolean;
        skipUntranslatedFiles?: boolean;
        exportApprovedOnly?: boolean;
        exportWithMinApprovalsCount?: number;
        exportStringsThatPassedWorkflow?: boolean;
    }
    interface ListProjectBuildsOptions extends PaginationOptions {
        branchId?: number;
    }
}
