PHP code example of codewiser / multilingual

1. Go to this page and download the library: Download codewiser/multilingual library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

codewiser / multilingual example snippets


$user->name;
// Michael

app()->setLocale('es');

$user->name = 'Miguel';

$user->name;
// Miguel

app()->setLocale('en');

$user->name;
// Michael

use Illuminate\Database\Eloquent\Model;
use Codewiser\Multilingual\Casts\Multilingual;
use Codewiser\Multilingual\Casts\AsMultilingual;
use Codewiser\Multilingual\Traits\HasMultilingual;

/**
 * @property null|string $name
 */
class User extends Model
{
    use HasMultilingual;

    protected function casts(): array
    {
        return [
            'name' => AsMultilingual::class
        ];
    }
}

// Set value in current locale
$user->name = 'Michael';

// Set value with explicit locale
$user->withLocale('en', fn() => $user->name = 'Michael');
$user->withLocale('es', fn() => $user->name = 'Miguel');

// Set values as array (or Arrayable) to replace all values
$user->name = [
    'en' => 'Michael',
    'es' => 'Miguel',
];

// Get value in current locale
$name = $user->name;

// Get value in given locale
$nameInEn = $user->withLocale('en', fn() => $user->name);
$nameInEs = $user->withLocale('es', fn() => $user->name);

// One attribute
$user->multilingual('name');
// Multilingual<string>

// Several attributes at once
$user->multilingual(fn() => [$user->name, $user->description]);

// From outside the model
Multilingual::of(fn() => $user->name);

$user->multilingual('name')->get();
// 'Michael'

$user->multilingual('name')['es'];
// 'Miguel'

$user->multilingual('name')->missing(['en', 'es', 'it']);
// ['it']

$user->multilingual('name')->toArray();
// ['en' => 'Michael', 'es' => 'Miguel']

$user->multilingual('name')->isEmpty();
// false

$user->toArray();
// ['id' => 1, 'name' => 'Michael']

$user->multilingual(fn() => $user->toArray());
// ['id' => 1, 'name' => ['en' => 'Michael', 'es' => 'Miguel']]

$user->name = [
    'en'    => 'Michael',
    'en_US' => 'Mike',
];

$user->multilingual('name')['en'];
// Michael
$user->multilingual('name')['en_GB'];
// Michael
$user->multilingual('name')['en-US'];
// Mike
$user->multilingual('name')['it'];
// null

$user->name = [
    'en' => 'Michael',
    'es' => 'Miguel'
];

$user->withLocale('it', fn() => $user->name);
// Michael (using fallback locale)

use Illuminate\Database\Eloquent\Model;
use Codewiser\Multilingual\Casts\Multilingual;
use Codewiser\Multilingual\Casts\AsMultilingual;
use Codewiser\Multilingual\Traits\HasMultilingual;

/**
 * @property null|float $score
 */
class User extends Model
{
    use HasMultilingual;

    protected function casts(): array
    {
        return [
            'score' => AsMultilingual::strict()
        ];
    }
}

$user->score = [
    'en' => 1.0,
    'es' => 1.1
];

$user->withLocale('en', fn() => $user->score);
// 1

$user->withLocale('it', fn() => $user->score);
// null (exact value, no fallback)

use Illuminate\Database\Eloquent\Model;
use Codewiser\Multilingual\Casts\Multilingual;
use Codewiser\Multilingual\Casts\AsMultilingual;
use Codewiser\Multilingual\Traits\HasMultilingual;

/**
 * @property null|array $keywords
 */
class User extends Model
{
    use HasMultilingual;

    protected function casts(): array
    {
        return [
            'keywords' => AsMultilingual::class
        ];
    }
}

$user->keywords = [
    'en' => ['one', 'two'],
    'es' => ['uno', 'dos'],
];

$user->withLocale('en', fn() => $user->keywords);
// ['one', 'two']

$user->withLocale('es', fn() => $user->keywords);
// ['uno', 'dos']

$user->multilingual('keywords')['es'][0];
// 'uno'

$user->multilingual('keywords')->toArray();
// ['en' => ['one', 'two'], 'es' => ['uno', 'dos']]

use Illuminate\Database\Eloquent\Model;
use Codewiser\Multilingual\Casts\Multilingual;
use Codewiser\Multilingual\Casts\AsMultilingual;
use Codewiser\Multilingual\Traits\HasMultilingual;

/**
 * @property null|Username $name
 */
class User extends Model
{
    use HasMultilingual;

    protected function casts(): array
    {
        return [
            'name' => AsMultilingual::using(Username::class)
        ];
    }
}

$user->name = [
    'en' => ['first_name' => 'John', 'last_name' => 'Smith'],
    'es' => ['first_name' => 'Juan', 'last_name' => 'Herrera'],
];

$user->withLocale('en', fn() => $user->name);
// Username(['first_name' => 'John', 'last_name' => 'Smith'])

$user->withLocale('es', fn() => $user->name);
// Username(['first_name' => 'Juan', 'last_name' => 'Herrera'])

$user->name->first_name = 'Johnny';

$user->name->first_name;
// Johnny, the change was not thrown away by the next read

$user->isDirty('name');
// true

$user->multilingual('name')->toArray();
// ['en' => ['first_name' => 'Johnny', ...], 'es' => ['first_name' => 'Juan', ...]]

$user->save();
// the change is in the database

$hydrated = $user->name;

$user->name = ['en' => ['first_name' => 'Jane', 'last_name' => 'Doe']];

$hydrated->first_name = 'Nobody';
// does not touch the attribute anymore

use Illuminate\Database\Eloquent\Model;
use Codewiser\Multilingual\Casts\AsMultilingual;
use Codewiser\Multilingual\Traits\HasMultilingual;
use Illuminate\Support\Collection;

/**
 * @property null|Collection<int, Username> $names
 */
class User extends Model
{
    use HasMultilingual;

    protected function casts(): array
    {
        return [
            'names' => AsMultilingual::collect(Username::class, strict: true),
        ];
    }
}

$user->names = [
    ['en' => ['first_name' => 'John', 'last_name' => 'Smith']],
    ['en' => ['first_name' => 'Gregory', 'last_name' => 'Johnson']],
];

$user->names->first();
// Username(['first_name' => 'John', 'last_name' => 'Smith'])

$user->multilingual('names')->first();
// Multilingual<Username> holding the very same object

$user->names->first()->first_name = 'Johnny';
// changes the attribute, just like a mapped attribute does

use Illuminate\Database\Eloquent\Model;
use Codewiser\Multilingual\Casts\Multilingual;
use Codewiser\Multilingual\Traits\HasMultilingual;
use Illuminate\Support\Collection;
use Illuminate\Database\Eloquent\Casts\AsCollection;

/**
 * @property null|Collection<int, Multilingual<string>> $keywords
 */
class User extends Model
{
    use HasMultilingual;

    protected function casts(): array
    {
        return [
            'keywords' => AsCollection::of(Multilingual::class)
        ];
    }
}

$user->keywords = [
    ['en' => 'one', 'es' => 'uno'],
    ['en' => 'two', 'es' => 'dos'],
];

$user->keywords->first()->get();
// one

$user->withLocale('es', fn() => $user->keywords->first()->get());
// uno