nsPerfect\GlobalLink\GlobalLinkClient;
use TransPerfect\GlobalLink\Request\CreateSubmissionRequest;
use TransPerfect\GlobalLink\Request\UploadSourceFileRequest;
use TransPerfect\GlobalLink\Request\SaveSubmissionRequest;
use TransPerfect\GlobalLink\Request\GetTargetsRequest;
use TransPerfect\GlobalLink\Model\BatchInfo;
use TransPerfect\GlobalLink\Model\CreateSubmissionTargetLanguageInfo;
// Initialize the client
$client = new GlobalLinkClient(
getenv('GLE_API_URL'),
getenv('GLE_USERNAME'),
getenv('GLE_PASSWORD'),
getenv('GLE_OAUTH_CLIENT'),
getenv('GLE_OAUTH_SECRET')
);
// List projects
$projects = $client->getProjects();
foreach ($projects as $project) {
echo "Project: {$project->name} ({$project->shortCode})\n";
}
// Get project details
$projectInfo = $client->getProject($projects[0]->projectId);
// Create a submission
$batch = new BatchInfo(
name: 'Batch 1',
targetFormat: 'TXLF',
targetLanguageInfos: [
new CreateSubmissionTargetLanguageInfo('de-DE'),
new CreateSubmissionTargetLanguageInfo('fr-FR'),
]
);
$request = new CreateSubmissionRequest(
name: 'My Translation Job',
dueDate: strtotime('+7 days') * 1000, // Unix milliseconds
projectId: $projectInfo->projectId,
sourceLanguage: 'en-US',
batchInfos: [$batch],
claimScope: 'LANGUAGE'
);
$createResponse = $client->createSubmission($request);
$submissionId = $createResponse->submissionId;
echo "Created submission: {$submissionId}\n";
// Upload a source file
$uploadRequest = new UploadSourceFileRequest(
batchName: 'Batch 1',
file: '/path/to/source-file.xml',
fileFormatName: 'Default XML'
);
$client->uploadSubmissionSourceFile($submissionId, $uploadRequest);
// Save and start the submission
$saveRequest = new SaveSubmissionRequest(autoStart: true);
$client->saveSubmission($submissionId, $saveRequest);
// Poll for processed targets
$targetsRequest = new GetTargetsRequest('PROCESSED', submissionIds: [$submissionId]);
$targets = $client->getTargets($targetsRequest);
foreach ($targets as $target) {
echo "Target {$target->targetId} ({$target->targetLanguage}): {$target->status}\n";
// Download the translated file
$content = $client->downloadTargetDeliverable($submissionId, $target->targetId);
file_put_contents("translated_{$target->targetLanguage}.xml", $content);
// Confirm delivery
$client->confirmTargetDelivery($submissionId, [$target->targetId]);
}
// Check if token is expired
if ($client->isTokenExpired()) {
echo "Token needs refresh\n";
}
// Check if the GlobalLink instance is healthy (no authentication ho "Instance is healthy: {$health->message}\n";
} else {
echo "Instance is down!\n";
}
use TransPerfect\GlobalLink\Request\ListProjectsRequest;
// List all projects
$projects = $client->getProjects();
// List projects with filters
$request = new ListProjectsRequest(
projectName: 'Marketing',
pageSize: 50,
pageNumber: 0
);
$projects = $client->getProjects($request);
// Get project details
$project = $client->getProject($projectId);
// Get project configuration
$fileFormats = $client->getProjectFileFormats($projectId);
$workflows = $client->getProjectWorkflows($projectId);
$customAttributes = $client->getProjectCustomAttributes($projectId);
$languageDirections = $client->getProjectLanguageDirections($projectId);
$users = $client->getProjectOrgUsers($projectId);
// Get MSLA (priority) levels
$mslaLevels = $client->getProjectMslaLevels($projectId);
foreach ($mslaLevels as $level) {
echo "{$level->name} [{$level->priority}]\n";
}
use TransPerfect\GlobalLink\Request\GetSubmissionsRequest;
use TransPerfect\GlobalLink\Request\UploadReferenceFileRequest;
use TransPerfect\GlobalLink\Model\TechTracking;
use TransPerfect\GlobalLink\Request\CancelSubmissionRequest;
// Create submission
$response = $client->createSubmission($request);
// Get submissions
$submissions = $client->getSubmissions();
// Get submissions with filters
$request = new GetSubmissionsRequest(
statuses: ['IN_PROCESS', 'PROCESSED'],
projectName: 'Marketing',
pageSize: 50,
pageNumber: 0
);
$submissions = $client->getSubmissions($request);
// Get single submission
$submission = $client->getSubmission($submissionId);
// Get submission wordcount (with leverage breakdown)
$wordcount = $client->getSubmissionWordcount($submissionId);
echo "Total words: {$wordcount->totalWordCount}\n";
echo "100% match: {$wordcount->match100}\n";
echo "No match: {$wordcount->noMatch}\n";
// Update submission (JSON Patch)
$submission = $client->patchSubmission($submissionId, 'replace', '/name', 'New Name');
// Upload source file
$uploadRequest = new UploadSourceFileRequest(
batchName: 'Batch 1',
fileContents: file_get_contents('/path/to/source.xml'),
fileName: 'source.xml'
);
$client->uploadSubmissionSourceFile($submissionId, $uploadRequest);
// Upload reference file (glossaries, style guides, etc.)
// Option 1: From file path
$refRequest = new UploadReferenceFileRequest(
file: '/path/to/glossary.txt',
submissionLevel: true
);
$client->uploadSubmissionReferenceFile($submissionId, $refRequest);
// Option 2: From string contents
$refRequest = new UploadReferenceFileRequest(
fileContents: file_get_contents('/path/to/glossary.txt'),
fileName: 'glossary.txt',
submissionLevel: true
);
$client->uploadSubmissionReferenceFile($submissionId, $refRequest);
// Set tech tracking (for analytics)
$techTracking = new TechTracking(
adaptorName: 'GlobalLink Drupal Adaptor',
adaptorVersion: '1.0.0',
clientVersion: '11',
technologyProduct: 'GLE'
);
$client->putSubmissionTechTracking($submissionId, $techTracking);
// Save submission (optionally auto-start)
$client->saveSubmission($submissionId, new SaveSubmissionRequest(autoStart: true));
// Cancel submission (cancel specific targets or documents)
$client->cancelSubmission($submissionId, new CancelSubmissionRequest(
targetIds: [123, 456] // or documentIds: [1, 2]
));
use TransPerfect\GlobalLink\Request\GetTargetsRequest;
// Get targets by status with pagination
// Note: pageSize must be between 20 and 200 (API gets = $client->getTargets($request);
// Get cancelled targets
$cancelledRequest = new GetTargetsRequest(
targetStatus: 'CANCELLED',
projectIds: [$projectId]
);
$cancelledTargets = $client->getTargets($cancelledRequest);
// Download single target deliverable
$content = $client->downloadTargetDeliverable($submissionId, $targetId);
file_put_contents('translated.xml', $content);
// Download all deliverables (ZIP)
$zipContent = $client->downloadSubmissionDeliverables($submissionId, $response->failedToDeliverTargets) . "\n";