Перевод Laravel в VueJS

В этой статье я хочу представить вам пакет, который поможет вам использовать функции перевода Laravel в VueJs.

Имя пакета — Laravel Vue Translation, который можно установить через composer.

Начало работы:

установить пакет через композитор

composer require tohidplus/laravel-vue-translation

Если версия Laravel 5.6+, вам не нужно регистрировать поставщика услуг.

В файле config/app.php добавьте поставщика услуг:

'providers' => [
   //
   Tohidplus\Translation\TranslationServiceProvider::class,
   //
 ];

Опубликуйте ресурсы пакета, выполнив команду:

php artisan vendor:publish --provider="Tohidplus\Translation\TranslationServiceProvider"

Это добавит файл Translation.js в каталог resources/js/VueTranslation.

Запустите ремесленную команду:

php artisan VueTranslation:generate

Это скомпилирует все файлы перевода из каталога resources/lang в файл resources/js/VueTranslation/translations.json.

Откройте файл resources/js/app.js и добавьте помощник перевода и добавьте метод перевода к объекту окна(если вы хотите получить доступ к методу из любого места за пределами компонентов Vue) или Vue (если вы хотите получить доступ к методу из компонентов Vue)

window.Vue = require('vue');
// If you want to add to window object
window.tranlate=require('./VueTranslation/Translation').default.translate;

// If you want to use it in your vue components
Vue.prototype.translate=require('./VueTranslation/Translation').default.translate;

Скомпилируйте ресурсы, выполнив команду:

npm run development
// or watch or production

Как переключать языки?

Это позволит получить текущий язык из атрибута документа lang.

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Document</title>
    </head>
    <body>
    
    </body>
</html>

Как пользоваться?

Представьте, что это структура каталога resources/lang.

|--en
   |--auth.php
   |--pagination.php
   |--passwords.php
   |--validation.php
   |--messages.php
|--fr
   |--auth.php
   |--pagination.php
   |--passwords.php
   |--validation.php
   |--messages.php

И файл messages.php выглядит примерно так:

return [
    'foo'=>[
        'bar'=>'Some message'
    ]
];

Вы можете получить значение, вызвав метод translate:

translate('messages.foo.bar');

Пример в компоненте Vue:

<template>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Example Component</div>
                    <div class="card-body">
                        {{translate('messages.foo.bar')}}
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
      
    }
</script>

Заменить атрибуты

Не рекомендуется использовать этот пакет для отображения ошибок проверки, но если вы хотите, вы можете заменить :attribute, :size и т. д., передав второй аргумент как объект.

translate('validation.required',{
    attribute:translate('validation.attributes.title')
});

Примечание: если ему не удалось найти значение для переданного вами ключа, он вернет точный ключ.