• Время чтения ~18 мин
  • 22.06.2022

Любой разработчик, который хотя бы раз сталкивался с проблемой локализации, скажет вам, что это утомительная работа. Я думаю, мы можем согласиться с тем, что заботиться о нескольких языковых версиях не так весело, как вводить новые функции в продукт, который вы любите. И мы говорим не только об интернационализации, но и об управлении переводчиками, обработке различных версий, переводе пинг-понга и бесчисленных пересмотрах. Вот почему локализацией часто пренебрегают и закапывают глубоко в отставание.

Что, если бы мы сказали вам, что вы можете полностью автоматизировать процесс локализации с помощью Localazy и GitHub Actions? И под полностью мы подразумеваем полностью.

Что такое Localazy? Localazy - это полный пакет локализации, созданный с учетом потребностей разработчиков. Localazy позволяет полностью автоматизировать локализацию ваших проектов Laravel. Установите его один раз и забудьте о хлопотах навсегда.

Вы узнаете, как: 

  • установите Laravel Framework и запустите свое первое приложение,
  • настройте репозиторий Git,
  • подготовить свой проект Laravel к локализации,
  • соединить его с Localazy и перевести на несколько языков,
  • автоматизируйте загрузку строк и перевод с помощью действий GitHub.

Установка фреймворка

Laravel Есть несколько способов установки Laravel (выберите тот, который подходит вам и вашей ОС). Как правило, вы, вероятно, используете composer для установки фреймворка. Но поскольку я использую macOS и хочу, чтобы мой ноутбук был как можно более чистым, я решил установить Laravel через curl, который загружает контейнерное приложение.

Это огромное преимущество, если вы разрабатываете на Mac и имеете Docker Desktop в рабочем состоянии - и мы знаем преимущества докеризованных приложений (для всех заинтересованных я рекомендую прочитать Docker Deep Dive: Zero to Docker в одной книге).

Давайте установим приложение. Я ввел laravel-i18n-gh-actions-example имя своего приложения.

curl -s "https://laravel.build/laravel-i18n-gh-actions-example" | bash

Установка Laravel через curl

Приложение поставляется с Laravel Sail, который был представлен с Laravel 8. Это интерфейс командной строки для взаимодействия со средой разработки Docker Laravel по умолчанию. Sail предоставляет способ создания приложения Laravel без предварительного опыта работы в Docker.


Запуск приложения

Laravel Хорошо, проект создан. Пришло время запустить приложение. Перейдите в каталог приложения и запустите Laravel Sail.

cd laravel-i18n-gh-actions-example && ./vendor/bin/sail up

Running the Laravel Sail

Этот процесс запускает приложение. Это может занять некоторое время в первый раз, так как контейнеры приложений должны быть построены, поэтому будьте терпеливы. Приятно отметить- если вы являетесь экспертом Docker - все о Sail можно настроить с помощью файла, docker-compose.yml входящего в состав Laravel.

После запуска контейнеров Docker приложения вы можете получить доступ к приложению в веб-браузере по адресу: http://localhost. Вы должны увидеть экран, похожий на тот, что ниже.

Приложение Laravel наладилось и запустило


Setup Git - чего мы хотим достичь?

В следующих шагах мы подготовим наш репозиторий git для рабочего процесса, который мы настроим позже. Как вы можете себе представить, существуют десятки рабочих процессов, подходящих для разных типов приложений - все зависит от ваших потребностей.

Я хотел бы показать вам относительно простой пример, чтобы вы могли понять действия GitHub. Следующие шаги не будут иметь большого смысла, если вы не знаете, чего я хочу достичь. Так что же это такое?

Представьте себе этот рабочий процесс:

  • У нас есть два основных филиала, develop и master,
  • затем, для каждой задачи, над которой мы работаем, мы создаем новую ветвь (в зависимости от названия задачи - назовите ее foo для нашей простой задачи),
  • в ветви foo мы определяем новые исходные ключи по мере работы над задачей,
  • когда он будет готов, мы создадим запрос на вытягивание в develop,
  • на этом этапе мы хотим, чтобы исходные ключи были загружены и синхронизированы с Localazy для перевода,
  • между тем, переводчики могут работать над переводами,
  • затем, когда придет время выпускать приложение, мы создадим запрос на извлечение из develop master,
  • теперь, когда мы принимаем PR и, следовательно, push to branch, мы хотим скачать переводы (в файлах локализации) и отправить их в мастер с кодом, и, скорее всего, запустить некоторые другие задачи (например, протестировать master приложение, собрать / отправить приложение, ...) - в зависимости от ваших потребностей,
  • тогда все готово.

Создание и инициализация репозитория

Git Теперь нам нужно настроить Git. Перейдите на GitHub и создайте пустой репозиторий. Скопируйте удаленный адрес и инициализируйте git в нашем проекте Laravel.

git init

Then, add a new remote and paste the copied address.

git remote add origin [email protected]:localazy/laravel-i18n-gh-actions-example.git

Let's push the project to master branch. I use VSCode, so I've done it all in the user interface as it's more convenient, at least for me.

Затем создайте ветку develop и переключитесь на нее. Опубликуйте ветвь на удаленном сайте.

git switch -c develop

Now, create a foo branch and switch there. Our Laravel-related code things will be happening here. We'll get there in a moment.

git switch -c foo

Prepare Blade templates & source translation file(s)

Мы в веткеfoo, пришло время подготовить шаблон Blade к локализации. Существует два основных подхода к локализации приложений Laravel. Один использует файлы PHP, а второй использует файлы JSON. Вы также можете объединить их вместе, что также может быть вариантом использования в вашем проекте.

В любом случае, в этом примере мы будем использовать php файлы. Файлы перевода находятся в каталоге lang в корне приложения. Поскольку нашим исходным языком является английский, создайте новый файл в каталоге с en именем welcome.php.

return [
    'laravel' => 'Laravel',
    'home' => 'Home',
    'log_in' => 'Log in',
    'register' => 'Register',
    'documentation' => 'Documentation',
    'documentation_text' => 'Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end.',
    'laracasts' => 'Laracasts',
    'laracasts_text' => 'Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.',
    'laravel_news' => 'Laravel News',
    'laravel_news_text' => 'Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials.',
    'vibrant_ecosystem' => 'Vibrant Ecosystem',
    'vibrant_ecosystem_text' => 'Laravel\'s robust library of first-party tools and libraries, such as <a href="https://forge.laravel.com" class="underline">Forge</a>, <a href="https://vapor.laravel.com" class="underline">Vapor</a>, <a href="https://nova.laravel.com" class="underline">Nova</a>, and <a href="https://envoyer.io" class="underline">Envoyer</a> help you take your projects to the next level. Pair them with powerful open source libraries like <a href="https://laravel.com/docs/billing" class="underline">Cashier</a>, <a href="https://laravel.com/docs/dusk" class="underline">Dusk</a>, <a href="https://laravel.com/docs/broadcasting" class="underline">Echo</a>, <a href="https://laravel.com/docs/horizon" class="underline">Horizon</a>, <a href="https://laravel.com/docs/sanctum" class="underline">Sanctum</a>, <a href="https://laravel.com/docs/telescope" class="underline">Telescope</a>, and more.',
    'shop' => 'Shop',
    'sponsor' => 'Sponsor',
    'laravel_version' => 'Laravel v:version',
    'php_version' => '(PHP v:version)',
];

lang/en/welcome.php

Ради конкретики мы можем игнорировать json файлы перевода, поэтому создайте их .gitignore в каталогеlang.

# ignore json files
*.json

lang/.gitignore

Как вы можете welcome.php заметить, файл теперь содержит ключевые тексты из welcome.blade.php шаблона. Теперь замените строки в шаблоне для ключей, которые мы только что определили. Позвольте мне привести пару примеров:

  • <title>Laravel</title>-><title>{{ __('welcome.laravel') }},
  • <div ...><a ...>Documentation</a></div>-><div ...><a ...{{ __('welcome.documentation') }}</a></div>,
  • <div ...>Laravel's robust library of...</div>-> <div ...>{!! __('welcome.vibrant_ecosystem_text') !!}</div>,
  • <div ...>Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</div>-> <div ...>{ __('welcome.laravel_version', ['version' => Illuminate\Foundation\Application::VERSION]) }} {{ __('welcome.php_version', ['version' => PHP_VERSION]) }}</div>.

Первые два примера довольно просты; это стандартный синтаксис для отображения строки перевода.

В третьем примере мы должны сказать Blade, чтобы он не избегал данных. Хотя вы должны быть осторожны при повторении неэкранированного содержимого, так как ваше приложение может быть уязвимо для XSS-атак.

Четвертый пример заменяет заполнители, которые мы используем в исходном языковом welcome.php файле (:version). Чтобы заменить заполнитель в шаблоне Blade, передайте функции массив замен в качестве второго аргумента__.

Вы можете найти еще больше примеров, включая множественное число, создание переключателя языка (и более подробное объяснение) в отличной статье отом, как создать многоязычное приложение PHP с Localazy и Laravel, написаннойФранциско Мело, которая была моей отправной точкой и вдохновением для написания этого поста.

Просто чтобы проверить это, если мы обновим нашу страницу сейчас - она должна выглядеть точно так же, как и до экстернализации.

Подключение приложения Laravel к проекту

Localazy Перейдите на страницу регистрации Localazy и создайте бесплатную учетную запись или войдите в систему (если вы уже присоединились к нашему сообществу). Затем присвойте организации имя и создайте новый проект.

Выберите английский в качестве исходного языка. Кроме того, вы можете включить опцию Использовать переводы сообщества (ShareTM), чтобы некоторые строки автоматически переводились Localazy.

На странице интеграции выберите Интеграция Laravel. Скопируйте фрагмент кода в буфер обмена.

Localazy.com - Laravel integration page

В корневом каталоге проекта создайте файл с именем localazy.json. Этот файл служит конфигурационным файлом для Localazy CLI. Приведенный выше пример (который мы изменим в соответствии с нашими потребностями) является одной из простейших форм конфигурации. Существует множество способов, как настроить файл под localazy.json свои нужды, все подробно описано в нашей документации.

Вставьте код в .localazy.json Этот файл должен быть отправлен в репозиторий Git. Хотя, не стоит раздвигать секреты вроде writeKey и readKey. Чем мы занимаемся? Создайте еще один файл в корне проекта с именемlocalazy.keys.json, затем вырежьте и вставьте в него ключи. После этого добавьте последний файл в .gitignore, также расположенный в корне проекта.

# other .gitignore contents...

# Localazy keys
localazy.keys.json

.gitignore

Обновите файл localazy.json в соответствии с нашим приложением

Далее мы должны немного настроить localazy.json файл, чтобы все работало правильно. Это последний взгляд:

{
    "upload": {
      "type": "php",
      "files": "lang/en/**.php"
    },
    "download": {
      "files": "lang/${lang}/${file}"
    }
}

localazy.json

Позвольте мне объяснить: Как я уже упоминал, я переместил и readKey в writeKey отдельный файл, так что его больше нет здесь. Свойство, которое вызываетсяupload.files, изменилось. Значение говорит, что мы хотим загрузить все файлы из lang/en каталогаphp. Файлы служат исходными языковыми файлами. Подробное объяснение можно найти в ссылке Загрузка.

Аналогичное изменение есть и download.files в разделе. Значение этого свойства указывает CLI загружать файлы с тем же именем, что и у загруженного файла (заполнитель${file}). Также файлы должны быть сгруппированы в папки по языку (заполнителю${lang}). Все возможные варианты, подробно описанные в справочнике по скачиванию.

Хорошо, возьмите на себя обязательства и подтолкните наш прогресс; пришло время для следующего шага.

Необязательно: локальная

загрузка тестов Просто напоминаем - мы хотим автоматизировать наш рабочий процесс с помощью GitHub Actions. Если вы не хотите тестировать его локально, перейдите к следующему разделу. Но иногда разработчики хотели бы протестировать переводы во время разработки (я также хотел убедиться, что я настроил все правильно, прежде чем переходить к действиям GitHub). Итак, если вам интересно, я покажу вам, как это сделать.

Существует множество способов установки интерфейса командной строки Localazy (в зависимости от нескольких факторов). Я хотел использовать образ Docker для его тестирования, но, к сожалению, чипы Apple Silicon пока не поддерживаются, поэтому я использовал установку через NPM.

Localazy советует установить пакет в систему глобально, хотя я установил его в папку проекта.

npm install @localazy/cli

After that, to test the upload, use:

npx localazy upload -s

The parameter -s stands for simulate. It won't actually upload the strings to Localazy, but CLI will certainly tell you if anything possibly went wrong. All good, everything is set up correctly! We can proceed to GitHub Actions.

Добавляйте секреты в наш репозиторий   

Чтобы GitHub Actions работал, нам нужно создать секреты в нашем репозитории. Почему? Позже, когда мы будем использовать действия Localazy Upload и Localazy Download, нам нужно, чтобы они читались writeKey и readKey откуда-то (чтобы правильно получить доступ к нашему проекту Localazy). И поскольку мы не хотим, чтобы они были помещены в репозиторий (причины, описанные ранее в статье), мы добавим их как секреты.

В репозитории перейдите к Settings -> Secrets -> Actions. Я назвал секреты LOCALAZY_READ_KEY и LOCALAZY_WRITE_KEY соответственно. Назначьте оба егоreadKey/writeKeyзначения, наша конфигурация должна выглядеть так.

laravel-i18n-gh-actions-example секреты

репозиторияАвтоматизация загрузки с помощью действий

GitHub В нашей среде .github/workflows/upload.yml IDE создайте файл. Кроме того, вы можете сделать все это из репозитория, перейдя в Actions -> New workflow -> Setup a workflow yourself. Присвойте ему upload.ymlимя, добавьте код рабочего процесса ниже и просто отправьте его.

Вот как должен выглядеть код:

name: Localazy Upload

on:
  push:
    branches: [ develop ]
    paths: [ lang/en/**.php ]

  pull_request:
    branches: [ develop ]
    paths: [ lang/en/**.php ]

  workflow_dispatch:

jobs:
  localazy-upload:
    name: Upload source language strings to Localazy
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - uses: localazy/upload@v1
        with:
          read_key: ${{ secrets.LOCALAZY_READ_KEY }}
          write_key: ${{ secrets.LOCALAZY_WRITE_KEY }}

.github/workflows/upload.yml

Давайте углубимся в файл и объясним его. Напомним, что общая цель этого действия — загрузить новые строки исходного языка в localazy on push или pull_request in(to) develop branch.

Данные:

  • Мы присвоили действию удобочитаемое имя Localazy Upload,
  • элементы on управления при запуске рабочего процесса,
  • мы хотим запустить рабочий процесс на push или pull_request в ветвь develop (задается branches: [ develop ]),
  • в то же время мы хотим запустить рабочий процесс только в том случае, если какой-либо из файлов исходного языка изменен (заданный paths: [ lang/en/**.php ]),
  • мы также хотели бы разрешить запуск рабочего процесса вручную с вкладки Действия (workflow_dispatch:),
  • мы определили один job (запуск рабочего процесса состоит из одного или нескольких заданий, которые могут выполняться последовательно или параллельно),
  • это job называется localazy-upload и имеет его удобочитаемое имя Загрузка строк исходного языка в Localazy (которое затем отображается в рабочем процессе действий GitHub),
  • Мы указали, что тип бегуна, на котором будет выполняться задание, — ,ubuntu-latest
  • jobсостоит из двух шагов - последовательности задач, которые будут выполняться как часть задания,
  • Первый шаг actions/checkout@v3 извлекает ваш репозиторий в $GITHUB_WORKSPACE, чтобы ваша работа могла получить к нему доступ (документация здесь)
  • Второй шаг localazy/upload@v1 считывает конфигурацию localazy.json и обрабатывает загрузку with с помощью read_key и write_key,
  • read_keyи write_key значения считываются из secrets.LOCALAZY_READ_KEY переменных и secrets.LOCALAZY_WRITE_KEY переменных соответственно.

Давайте протестируем рабочий процесс. В нашей foo ветви зафиксируйте и отправьте все изменения, которые мы сделали. Перейдите на GitHub и сделайте запрос на извлечение в develop.

Create pull request develop <- foo

Как только запрос на вытягивание создан, запускается наш рабочий процесс. Вы можете сказать по некоторым проверкам, которые еще не завершены. Кроме того, рядом с рабочим процессом Localazy Upload есть оранжевый круг, что означает, что он запущен.

Pull request with running workflow

Нажав на Details, мы можем отобразить подробную информацию о шагах рабочего процесса, который в настоящее время выполняется.

Upload workflow result

Все обработано правильно! Вы также можете щелкнуть стрелку рядом с каждым шагом, чтобы увидеть его детали. Например, если мы нажмем на Run localazy/upload@v1 вывод действия.

Localazy CLI, v1.6.0
Command-line tool for the Localazy platform.

Read more information at https://localazy.com/docs/cli

Parameters:
  - deprecate missing: no
  - import as new: false
  - force current: false
  - filter source: true
  - app version: 0
  - groups: (default only)
  - folder: .

Processing files...

lang/en/welcome.php
(file: welcome.php, lang: inherited, type: php)

lang/en/validation.php
(file: validation.php, lang: inherited, type: php)

lang/en/auth.php
(file: auth.php, lang: inherited, type: php)

lang/en/passwords.php
(file: passwords.php, lang: inherited, type: php)

lang/en/pagination.php
(file: pagination.php, lang: inherited, type: php)

Verifying...

Validating...

Uploading 3 kB...

Upload results: 126 added, 0 updated, 0 deprecated
Using 397 out of 45000 source keys

Your app on Localazy: https://localazy.com/p/laravel-i18n-gh-action-example

Done.

localazy/upload@v1 action output

Отлично, давайте перейдем к приложению в Localazy и проверим раздел Управление файлами. Как мы могли видеть, все файлы доступны там.

Localazy - File management

Переводите тексты на язык Localazy

Теперь добавьте пару языков и переведите и утвердите некоторые фразы.

Localazy предлагает три подхода на выбор и комбинировать для перевода вашего проекта:

  1. 💪🏻 Translate on your own or invite contributors - You can start translating on your own and use our built-in suggestion system. Suggestions are drawn from the most popular machine translation engines and the ShareTM mentioned above. To get some additional help as your project grows, you can invite volunteers or translators you already know.
  2. 🦾 Translate everything in bulk via machine translation - With the Localazy Autopilot plan, you can translate whole files instantly by running a machine translation over the content. This is great for the first iteration and localization testing.
  3. 🚩 Fully automate the translation process with the Continuous Localization services - Once your Localazy integration is set up, you can order translations from our vetted translators and get your project translated by professionals automatically. The service is also proactive, so you don't have to micromanage translators, and you can visit Localazy only once in a while to check the progress.

Для наших целей я перевел welcome.php его на чешский, немецкий и испанский языки. Вы можете увидеть все это на следующих двух скриншотах.

Localazy - Список языков

Localazy - Список

языковых фраз Подводя итог, отныне, по каждому запросу на вытягивание или push-уведомлению для разработки, все новые или обновленные исходные ключи будут загружаться в Localazy готовыми к переводу.

Теперь мы можем объединить запрос на извлечение и закрыть ветвьfoo. Затем в нашей среде IDE вернитесь к ветвлениям develop и pull обновлениям.

git switch develop && git pull

Automate Download with GitHub Actions

Аналогично загрузке, нам нужно создать другой рабочий процесс. Перейдите в среду IDE проекта и создайте download.yml файл в .github/workflows каталоге.

name: Localazy Download
on:
  push:
    branches: [ master ]

  workflow_dispatch:

jobs:
  localazy-download:
    name: Download strings from Localazy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: localazy/download@v1
        with:
          read_key: ${{ secrets.LOCALAZY_READ_KEY }}
          write_key: ${{ secrets.LOCALAZY_WRITE_KEY }}
      - run: |
          ls lang/**/**.php
      - run: |
          git config --local user.email "[email protected]"
          git config --local user.name "david-vaclavek[bot]"
          git add lang
          git commit -m "Add locale files" -a
      - uses: ad-m/github-push-action@master
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          branch: master

.github/workflows/download.yml

Чтобы рабочие процессы были у нас в крови, давайте еще раз пройдемся по файлу:

  • Мы присвоили действию удобочитаемое имя Localazy Download,
  • элементы on управления при запуске рабочего процесса,
  • мы хотим запустить рабочий процесс на push master ветвь (задается branches: [ master ]),
  • мы хотим разрешить запускать рабочий процесс вручную с вкладки Действия (workflow_dispatch:),
  • мы определили один job (запуск рабочего процесса состоит из одного или нескольких заданий, которые могут выполняться последовательно или параллельно),
  • он job называется localazy-download и имеет свое удобочитаемое имя Загрузка строк из Localazy (которое затем отображается в рабочем процессе действий GitHub),
  • Мы указали, что тип бегуна, на котором будет выполняться задание, — ,ubuntu-latest
  • jobсостоит из пяти шагов – последовательности задач, которые будут выполняться как часть задания,
  • Первый шаг actions/checkout@v3 извлекает ваш репозиторий в $GITHUB_WORKSPACE, чтобы ваша работа могла получить к нему доступ (документация здесь)
  • поскольку мы будем отправлять в другой репозиторий, нам нужно использовать его with fetch-depth: 0 для предотвращения ошибок при отправке ссылок в целевой репозиторий (более подробную информацию об этом можно найти в документации по действиям GitHub Push),
  • На втором шаге localazy/download@v1 считывается download конфигурация и localazy.json обрабатывается загрузка из Localazy with с помощью read_key и write_key,
  • read_keyи write_key значения считываются из secrets.LOCALAZY_READ_KEY переменных и secrets.LOCALAZY_WRITE_KEY соответственно,
  • третий шаг можно пропустить, но я просто хотел показать вам список файлов, которые были загружены (ls lang/**/.php команда),
  • На четвертом шаге настраивается конфигурация git (user.email, user.name),
  • он также добавляет все (новые) файлы из lang репозитория в промежуточную область (git add lang),
  • затем он фиксирует все добавленные файлы,
  • пятый шаг использует действие под названием ad-m/github-push-action@master, которое я нашел, просматривая GitHub Actions Marketplace и задокументировано здесь,
  • это действие отправляет ранее зафиксированные файлы в ветвь master с помощью secrets.GITHUB_TOKEN переменной (подробнее о GITHUB_TOKEN секрете).

Вообще говоря, GITHUB_TOKEN секрет здесь по соображениям безопасности и создается в начале каждого рабочего процесса, выполняемого GitHub. Его можно использовать для проверки подлинности во время выполнения рабочего процесса. job Когда он заканчивается, срок его действия истекает.

Хорошо, теперь пришло время протестировать наш рабочий процесс. Сначала отправьте вновь созданный файл на удаленный компьютерdownload.yml. Давайте создадим еще один запрос на извлечение, на этот раз в master. На этот раз при создании запроса на вытягивание не выполняется рабочий процесс - это именно то, что мы хотели.

Но как только мы объединим запрос pull, наш рабочий процесс будет запущен. Когда он закончится, мы можем пройти через детали каждого шага. Например, мы можем видеть, какие файлы мы загрузили действиемlocalazy/download@v1.

Download workflow result

Когда мы проверяем наш репозиторий, мы видим, что master ветвь была обновлена новыми файлами локализации, оставив develop ветвь без них. И это именно то, что мы хотели сделать в этом примере.

lang папка вглавной ветви Большинство шагов, касающихся действий GitHub, были сделаны из статьи Automated Localization: GitHub Actions ❤ Localazy, сделаннойВацлавом Ходеком - спасибо за вдохновение.

Последний шаг - посмотрите наше переведенное приложение

Мы подошли к концу этой статьи. Но это не будет завершено без показа вам результата. Нам нужно немного настроить веб-маршрутизацию Laravel, чтобы она учитывала пройденный язык. Обычно вы работаете в отдельной ветви (может бытьfoo2?), объединяете ее, developтестируете, а затем объединяете в master или около того... Но для наших целей давайте просто быстро протестируем его.

Давайте перейдем к master вашей IDE и git pull изменениям.. Перейдите в раздел routes/web.php. В этом файле можно зарегистрировать веб-маршруты для приложения. Обновите код:

<?php
 
use Illuminate\Support\Facades\Route;
 
Route::get('/{locale?}', function ($locale = null) {
    if (isset($locale)) {
        app()->setLocale($locale);
    }
 
    return view('welcome');
});

routes/web.php

с помощью приведенного выше кода мы говорим приложению задать свой языковой стандарт, если в пути есть locale параметр. Вот и все, остальное делается автоматически. Попробуйте некоторые из этих URL-адресов:    

Наше приложение на английском языке, языке оригинала

Наше приложение на испанский язык, переведенное Localazy

Наше приложение на немецком языке, переведенное Localazy

Наше приложение на чешский язык, переведенное Localazy

  • localhost/pl- ой, есть запасной вариант к английскому языку, который установлен в качестве языка по умолчанию (подробнее об этом здесь)

Чтобы узнать, отсутствуют ли некоторые переводы, не посещая Localazy, вы можете использовать Laravel Translation Checker. Таким образом, вы можете удобно спрятаться в своей среде IDE и полностью сосредоточиться на создании своего проекта Laravel. Но мы надеемся, что вы поздороваетесь и увидите, что нового внутри Localazy время от времени.

Исходный код

Исходный код этого демонстрационного проекта доступен на GitHub. Не забудьте изучить содержимое папки.github/workflows!

Получите скидку 25% на планы

Localazy Поздравляем с тем, что сделали это так далеко! Вы должны по-настоящему любить Laravel! Мы это делаем, поэтому мы хотели бы предложить скидку 25% всем, кто читает это.

🏷️ Используйте код "laravelnews" для покупки плана Localazy и получите скидку 25% на любой план Localazy на 1 год. ⭐

Локализуйте свой проект Laravel и получайте вознаграждение!

Если вы искали способ окончательно локализовать свой проект Laravel и вдохновились этой статьей, мы хотели бы услышать вашу историю и представить ваш продукт в нашем блоге. Добавьте эту статью в закладки и заполните форму собеседования, как только вы начнете работать с Localazy.

💰 Баунти-предложение: Если вы считаете, что могли бы найти лучший способ интеграции Localazy с Laravel Framework и хотели бы разработать свою собственную интеграцию, библиотеку или утилиту, сообщите нам об этом!

Заключение

Мы надеемся, что вам понравилась эта статья, показывающая возможности Localazy и GitHub Actions для локализации Laravel. Мы считаем, что все, что может быть автоматизировано, должно быть автоматизировано, и локализация является одной из таких вещей.

Не стесняйтесь обращаться к нам на [email protected], если у вас есть какие-либо вопросы относительно этого учебника или Localazy в целом.

Вы также можете присоединиться к Localazy Discord, чтобы узнать, чем занимаются другие разработчики, использующие Localazy, или принять наше приглашение в сообщество Localazy на GitHub, где вы найдете больше ресурсов сообщества для ваших проектов Laravel, в которые вы можете внести свой вклад. С нетерпением ждем встречи с вами там!

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297