PHPackages                             rkwebsolution/translation-services - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Localization &amp; i18n](/categories/localization)
4. /
5. rkwebsolution/translation-services

ActiveLibrary[Localization &amp; i18n](/categories/localization)

rkwebsolution/translation-services
==================================

Multi-service translation package for Laravel. Supports Google, Azure, DeepL, Yandex, Amazon, and OpenAI through a unified manager, service provider, and facade

1.0.0(7mo ago)012↓100%MITPHPPHP ^8.1|^8.2|^8.3

Since Oct 5Pushed 7mo agoCompare

[ Source](https://github.com/rehankausar/laravel-translation-suite)[ Packagist](https://packagist.org/packages/rkwebsolution/translation-services)[ RSS](/packages/rkwebsolution-translation-services/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (4)Versions (2)Used By (0)

Translation Services Package
============================

[](#translation-services-package)

A comprehensive Laravel package for multi-service translation with support for Google Translate, Azure Translator, DeepL, OpenAI, Yandex Translate, and Amazon Translate.

Features
--------

[](#features)

- **Multiple Translation Services**: Supports 6 major translation APIs
- **Unified Interface**: Single API for all services
- **Spatie Translatable Integration**: Works seamlessly with `spatie/laravel-translatable`
- **Plug-and-Play**: Easy service switching via configuration
- **Batch Translation**: Translate multiple texts efficiently
- **Model Translation**: Auto-translate model fields
- **Error Handling**: Robust error handling with standardized responses
- **Caching Support**: Reduce API calls and costs
- **Fallback Support**: Automatic fallback to alternative services

Installation
------------

[](#installation)

### 1. Add to composer.json

[](#1-add-to-composerjson)

Since this is a local package, add it to your main project's `composer.json`:

```
{
    "repositories": [
        {
            "type": "path",
            "url": "./packages/translation-services"
        }
    ],
    "require": {
        "fastnet/translation-services": "*"
    }
}
```

### 2. Install the package

[](#2-install-the-package)

```
composer update fastnet/translation-services
```

### 3. Publish configuration

[](#3-publish-configuration)

```
php artisan vendor:publish --tag=translation-services-config
```

### 4. Configure services

[](#4-configure-services)

Edit `config/translation-services.php` or add to your `.env`:

```
# Default service
TRANSLATION_SERVICE=google

# Google Translate
GOOGLE_TRANSLATE_ENABLED=true
GOOGLE_TRANSLATE_API_KEY=your-api-key

# DeepL
DEEPL_ENABLED=true
DEEPL_API_KEY=your-api-key
DEEPL_PRO=false

# Azure Translator
AZURE_TRANSLATE_ENABLED=true
AZURE_TRANSLATE_API_KEY=your-api-key
AZURE_TRANSLATE_REGION=global

# OpenAI
OPENAI_TRANSLATE_ENABLED=true
OPENAI_API_KEY=your-api-key
OPENAI_MODEL=gpt-3.5-turbo

# Yandex Translate
YANDEX_TRANSLATE_ENABLED=true
YANDEX_TRANSLATE_API_KEY=your-api-key
YANDEX_FOLDER_ID=your-folder-id

# Amazon Translate
AMAZON_TRANSLATE_ENABLED=true
AWS_ACCESS_KEY_ID=your-access-key
AWS_SECRET_ACCESS_KEY=your-secret-key
AWS_DEFAULT_REGION=us-east-1
```

Usage
-----

[](#usage)

### Basic Translation

[](#basic-translation)

```
use Fastnet\TranslationServices\Facades\Translator;

// Translate text
$result = Translator::translate('Hello World', 'ar');

if ($result['success']) {
    echo $result['translated_text']; // مرحبا بالعالم
}
```

### Using Specific Service

[](#using-specific-service)

```
// Use Google Translate
$result = Translator::useService('google')
    ->translate('Hello World', 'es');

// Use DeepL
$result = Translator::useService('deepl')
    ->translate('Hello World', 'de');

// Use OpenAI
$result = Translator::useService('openai')
    ->translate('Hello World', 'fr');
```

### Batch Translation

[](#batch-translation)

```
$texts = [
    'Hello World',
    'Good Morning',
    'Thank You'
];

$results = Translator::translateBatch($texts, 'ar');

foreach ($results as $result) {
    if ($result['success']) {
        echo $result['translated_text'] . "\n";
    }
}
```

### Model Translation (Spatie Translatable)

[](#model-translation-spatie-translatable)

```
use Spatie\Translatable\HasTranslations;

class Product extends Model
{
    use HasTranslations;

    public array $translatable = ['name', 'description'];
}

// Translate model fields
$product = Product::find(1);

$results = Translator::translateModel(
    model: $product,
    fields: ['name', 'description'],
    targetLanguage: 'ar',
    sourceLanguage: 'en',
    save: true
);

// Check results
foreach ($results as $field => $result) {
    if ($result['success']) {
        echo "{$field}: {$result['translated_text']}\n";
    }
}
```

### Advanced Model Translation

[](#advanced-model-translation)

```
// Translate to multiple languages
$product = Product::find(1);
$languages = ['ar', 'es', 'fr', 'de'];

foreach ($languages as $lang) {
    Translator::translateModel(
        $product,
        ['name', 'description'],
        $lang,
        'en'
    );
}

// Now you can use:
$product->getTranslation('name', 'ar');
$product->getTranslation('description', 'es');
```

### Using Without Facade

[](#using-without-facade)

```
use Fastnet\TranslationServices\TranslationManager;

$translator = new TranslationManager();

$result = $translator->translate('Hello World', 'ar');
```

### Dependency Injection

[](#dependency-injection)

```
use Fastnet\TranslationServices\TranslationManager;

class TranslationService
{
    public function __construct(
        private TranslationManager $translator
    ) {}

    public function translateProduct(Product $product, string $language)
    {
        return $this->translator->translateModel(
            $product,
            ['name', 'description'],
            $language
        );
    }
}
```

### Response Format

[](#response-format)

All translation methods return a standardized response:

```
[
    'success' => true,
    'translated_text' => 'مرحبا بالعالم',
    'source_language' => 'en',
    'target_language' => 'ar',
    'service' => 'google',
    'metadata' => [
        'model' => 'nmt',
        'confidence' => 0.99
    ],
    'error' => null
]
```

### Error Response

[](#error-response)

```
[
    'success' => false,
    'translated_text' => null,
    'source_language' => 'en',
    'target_language' => 'ar',
    'service' => 'google',
    'metadata' => [],
    'error' => [
        'message' => 'API key invalid',
        'code' => 401
    ]
]
```

### Check Available Services

[](#check-available-services)

```
$services = Translator::getAvailableServices();

foreach ($services as $service) {
    echo "{$service['display_name']}: " .
         ($service['configured'] ? 'Ready' : 'Not configured') . "\n";
}
```

### Check Specific Service

[](#check-specific-service)

```
if (Translator::hasService('deepl')) {
    $result = Translator::useService('deepl')
        ->translate('Hello', 'de');
}
```

Real-World Example
------------------

[](#real-world-example)

### Translating Product Catalog

[](#translating-product-catalog)

```
use App\Models\Product;
use Fastnet\TranslationServices\Facades\Translator;

class ProductTranslationService
{
    public function translateAllProducts(string $targetLanguage)
    {
        $products = Product::all();
        $results = [];

        foreach ($products as $product) {
            try {
                $result = Translator::useService('deepl')
                    ->translateModel(
                        $product,
                        ['name', 'description', 'features'],
                        $targetLanguage,
                        'en',
                        true
                    );

                $results[] = [
                    'product_id' => $product->id,
                    'success' => !empty(array_filter($result, fn($r) => $r['success'])),
                    'details' => $result
                ];
            } catch (\Exception $e) {
                $results[] = [
                    'product_id' => $product->id,
                    'success' => false,
                    'error' => $e->getMessage()
                ];
            }
        }

        return $results;
    }
}
```

### Command to Translate Models

[](#command-to-translate-models)

```
use Illuminate\Console\Command;
use Fastnet\TranslationServices\Facades\Translator;

class TranslateProductsCommand extends Command
{
    protected $signature = 'products:translate {language}';
    protected $description = 'Translate all products to specified language';

    public function handle()
    {
        $language = $this->argument('language');
        $products = Product::all();

        $this->withProgressBar($products, function ($product) use ($language) {
            Translator::translateModel(
                $product,
                ['name', 'description'],
                $language,
                'en'
            );
        });

        $this->info("\nTranslation completed!");
    }
}
```

Service-Specific Features
-------------------------

[](#service-specific-features)

### Google Translate

[](#google-translate)

- Auto language detection
- Wide language support
- Fast and reliable

### DeepL

[](#deepl)

- High-quality translations
- Free and Pro tiers
- Excellent for European languages

### Azure Translator

[](#azure-translator)

- Microsoft's translation service
- Regional deployment
- High accuracy

### OpenAI (ChatGPT)

[](#openai-chatgpt)

- Context-aware translations
- Natural language understanding
- Flexible model selection (GPT-3.5/GPT-4)

### Yandex Translate

[](#yandex-translate)

- Good for Russian and Eastern European languages
- Cloud-based service

### Amazon Translate

[](#amazon-translate)

- AWS integration
- Custom terminology support
- Scalable

Language Codes
--------------

[](#language-codes)

Common language codes supported by most services:

- `en` - English
- `ar` - Arabic
- `es` - Spanish
- `fr` - French
- `de` - German
- `it` - Italian
- `pt` - Portuguese
- `ru` - Russian
- `zh` - Chinese
- `ja` - Japanese
- `ko` - Korean
- `hi` - Hindi
- `ur` - Urdu

Error Handling
--------------

[](#error-handling)

```
$result = Translator::translate('Hello', 'ar');

if (!$result['success']) {
    Log::error('Translation failed', [
        'service' => $result['service'],
        'error' => $result['error']['message']
    ]);

    // Use fallback text
    $translatedText = $originalText;
} else {
    $translatedText = $result['translated_text'];
}
```

Testing
-------

[](#testing)

The package includes robust error handling and logging. To test:

```
// Test service configuration
$service = Translator::driver('google');
if ($service->isConfigured()) {
    echo "Service is configured correctly\n";
}

// Test translation
$result = Translator::translate('Test', 'ar');
dd($result);
```

Cost Optimization
-----------------

[](#cost-optimization)

1. **Enable Caching**: Cache translations to avoid repeated API calls
2. **Batch Translations**: Use `translateBatch()` when translating multiple texts
3. **Choose Right Service**: Different services have different pricing models
4. **Use Free Tiers**: DeepL offers free tier, OpenAI has lower costs for GPT-3.5

Extending the Package
---------------------

[](#extending-the-package)

### Adding a New Service

[](#adding-a-new-service)

1. Create service class in `src/Services/`
2. Implement `TranslationServiceInterface`
3. Extend `BaseTranslationService`
4. Add to `TranslationManager::driver()` method
5. Add configuration in `config/translation-services.php`

License
-------

[](#license)

MIT License

Support
-------

[](#support)

For issues and feature requests, please contact the development team.

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance63

Regular maintenance activity

Popularity7

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

225d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/72bb0b0cb22105b0b77d60d27e20f1757d8c4e58c8d655620bb948836d0ec2f3?d=identicon)[rehankausar](/maintainers/rehankausar)

---

Top Contributors

[![rehankausar](https://avatars.githubusercontent.com/u/44466120?v=4)](https://github.com/rehankausar "rehankausar (5 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/rkwebsolution-translation-services/health.svg)

```
[![Health](https://phpackages.com/badges/rkwebsolution-translation-services/health.svg)](https://phpackages.com/packages/rkwebsolution-translation-services)
```

###  Alternatives

[vemcogroup/laravel-translation

Translation package for Laravel to scan for localisations and up/download to poeditor

135304.0k2](/packages/vemcogroup-laravel-translation)[outerweb/filament-translatable-fields

Filament integration for spatie/laravel-translatable

3582.9k8](/packages/outerweb-filament-translatable-fields)[mage-os/module-automatic-translation

Automatic AI content translation for Mage-OS.

277.1k](/packages/mage-os-module-automatic-translation)[acclaro/translations

Easily launch and manage multilingual Craft websites without having to copy/paste content or manually track updates.

1229.5k](/packages/acclaro-translations)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
