# generaltranslation: General Translation Core SDK: downloadFile URL: https://generaltranslation.com/en-US/docs/core/class/methods/translation/download-file.mdx --- title: downloadFile description: API reference for the downloadFile method to download source or translated files --- ## Overview The `downloadFile` method downloads the content of a single file as a UTF-8 string. Depending on whether a locale is specified, it will either download the source file or the corresponding translation. ```typescript const gt = new GT({ projectId: 'your-project-id', apiKey: 'your-api-key' }); // Download a translation const translatedContent = await gt.downloadFile({ fileId: 'file-123', branchId: 'branch-456', locale: 'es', versionId: 'version-789' }); // Download the source file (no locale specified) const sourceContent = await gt.downloadFile({ fileId: 'file-123', branchId: 'branch-456' }); ``` **Translation Status:** When downloading translations, this method only works with completed translations. Use [`queryFileData`](/docs/core/class/methods/translation/query-file-data) first to verify that translations are completed before attempting to download. ## Reference ### Parameters | Name | Type | Description | |------|------|-------------| | `file` | `FileInfo` | File information object specifying which file to download | | `options?` | `DownloadFileOptions` | Optional configuration for the download request | #### FileInfo Structure | Name | Type | Description | |------|------|-------------| | `fileId` | `string` | Unique identifier of the file to download | | `branchId?` | `string` | Branch ID to download from. If not provided, the default branch will be used | | `locale?` | `string` | Target locale of the translation to download. If not provided, the source file will be downloaded | | `versionId?` | `string` | Optional version ID for the file. If not provided, the latest version will be used | #### DownloadFileOptions | Name | Type | Description | |------|------|-------------| | `timeout?` | `number` | Request timeout in milliseconds | ### Returns `Promise` - The file content as a UTF-8 string. The returned string contains the file content in the same format as the original source file. For translations, all translatable text is converted to the target locale. --- ## Example ```typescript title="index.ts" copy // (1) Create a GT instance const targetLocales = ['es', 'fr', 'de']; const gt = new GT({ projectId: 'your-project-id', apiKey: 'your-api-key', }); // (2) Upload the file const fileUpload = { content: fileContents, fileName: filePath, fileFormat: 'JSON', locale: 'en', }; const files = [ { source: fileUpload } ]; const { uploadedFiles } = await gt.uploadSourceFiles( files, { sourceLocale: 'en' } ); // (3) Enqueue the file translation job const enqueueResult = await gt.enqueueFiles( uploadedFiles, { sourceLocale: 'en', targetLocales: targetLocales, } ); // (4) Wait for all translations to be completed const { fileId, versionId, branchId } = uploadedFiles[0]; const translatedFileQueries = targetLocales.map((locale) => ({ fileId, versionId, branchId, locale })); while (true) { const result = await gt.queryFileData({ translatedFiles: translatedFileQueries }); const allCompleted = result.translatedFiles?.every( (file) => file.status === 'completed' ); if (allCompleted) { break; } await new Promise(resolve => setTimeout(resolve, 1000)); } // (5) Download a single file const spanishContent = await gt.downloadFile({ fileId, branchId, locale: 'es' }); console.log('Spanish translation:', spanishContent); ``` --- ## Notes * Retrieves downloaded file as a UTF-8 string * When a locale is provided, the file must have a completed translation for that locale * When no locale is provided, the source file is returned * Will fail if file is not found ## Next steps * See [`queryFileData`](/docs/core/class/methods/translation/query-file-data) to verify translation status before downloading * See [`downloadFileBatch`](/docs/core/class/methods/translation/download-file-batch) to download multiple files efficiently * See [`uploadSourceFiles`](/docs/core/class/methods/translation/upload-source-files) for the file upload process * See [`enqueueFiles`](/docs/core/class/methods/translation/enqueue-files) to start translation jobs