Локализация Laravel для крупных веб-сайтов

Возможно ли лучший способ хранения больших объемов текста для локализации в laravel? Было бы легко, если бы вся моя страница была просто чистым текстом, но некоторые из моих страниц имеют сложные макеты, и мне нужно добавить несколько строк, чтобы обернуть текст вокруг контента, такого как images/links/media.

Это боль, если мне когда-либо понадобится выделить курсивом/полужирным шрифтом или сделать любой HTML-код для текста, а также мне нужно разбить их на разделы, чтобы иметь возможность сделать это.

Пример того, что я использую:

return array(
    'exchange_rate' => array(
        'title' => 'Exchange Rate',
        'p1' => 'Disclaimer', 
        'p2' => 'Currency rate displayed is subject to change.',
        'p3' => 'View All Rates to Date'
    ),

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

return array(
'exchange_rate' => array(
    'title' => 'Exchange Rate',
    'p1' => 'Disclaimer', 
    'p2' => 'Currency rate displayed is subject to change.',
    'p3' => 'View All Rates to Date',
    'table1' => array(
        'title' => 'Currency Table',
        'row1' => array(
           'l1' => 'Current Rate'
        ),
        'row2' => array('etc')
    )
);

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

Любая помощь очень ценится, спасибо!

EDIT: Я также знаю, что вы можете добавлять заполнители внутри своих локализационных массивов, например:

'title' => ':title'

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

В настоящее время, кажется, есть два разных способа пойти сюда.

  • Продолжайте разбивать их на небольшие разделы, чтобы форматировать текст по-разному.
  • Вставьте текст страницы в один массив "content" на странице, используйте Waavi для передачи их в базу данных, а затем правильно отформатируйте их с помощью редактора WYSIWYG на самом веб-сайте, чтобы отформатировать запись в базе данных. (Хотя это также имеет проблемы, потому что тогда вы не можете использовать шаблоны blade-модулей, поскольку Lang:: get() возвращает только безопасный текст)

EDIT (10 февраля 2015 г.):

После многократного поиска я создал пакет, который соответствует моим потребностям. Он полностью устраняет необходимость в любых текстовых массивах в laravel. Он автоматически добавит текст в базу данных и переведет его в ваш локальный набор. Кроме того, вам не нужно управлять и расшифровывать точечные пути перевода.

https://github.com/stevebauman/translation

Ответы

Ответ 1

Я написал пакет для создания lang файлов для вас. Напишите свои шаблоны, контроллеры,... без скучных переводов. Когда вы закончите код, просто выполните php artisan localisation:missing, и он сгенерирует все необходимые файлы в ваших каталогах lang/*/.

Он будет синхронизировать переводы:

  • сохранить используемые в настоящее время переводы.
  • создать новые переводы
  • удалить или переместить нижние устаревшие переводы

Пакет доступен здесь: https://github.com/potsky/laravel-localization-helpers

В повседневном использовании это тот же рабочий процесс, что и файлы po. Дайте мне знать, если ваша жизнь стала проще теперь с переводами в Laravel awesome framework!

Ответ 2

Вы всегда можете использовать пакет перевод Ваави

Сохранение корректного обновления перевода проекта является громоздким. Обычно переводчики не имеют доступа к кодовой базе и даже когда им трудно отслеживать, какие переводы отсутствуют для на каждом языке или при обновлении исходного текста требуется, чтобы переводы будут пересмотрены.

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

Ответ 3

Я не думаю, что здесь идеальное решение, это зависит от размера проекта. Возможно, просто разные представления для каждого языка, а затем вызовите View:: make динамически - что-то вроде этого:

$view = 'pages.'.Lang::getLocale().'.mypage';
if (View::exists($view)) return View::make($page);
else App::abort(404);

Ответ 4

Хотя автор создал свой собственный пакет для перевода, я бы добавил еще один: laravel-gettext

Из мира CakePHP, где перевод обрабатывается с .po файлами в моих проектах laravel, я бы использовал расширение выше, потому что:

  • Я использовал синтаксис, для меня это естественный способ использовать его (у меня есть фрагменты кода для его создания)
  • GNU Gettext - это стандарт перевода и есть редакторы для перевода файлов (PoEdit)
  • легче поддерживать видение и добавлять новые метки в файл

Расширение не мое, и я пока не использовал его, но я буду в первом случае.

Ответ 5

Ну,

Большие веб-сайты, вероятно, используют какую-то CMS, позволяющую редактировать тексты для разных языков.

Я не уверен в том, что касается Laravel, но вы хотите, чтобы пользователь мог редактировать тексты. Там не так много решений, которые вам понадобятся:

  • интерфейс онлайн на вашем веб-сайте
  • или script для экспорта/импорта переводов офлайн.

Наиболее распространенный формат для этого - файлы .po, некоторые программные средства позволяют вам напрямую импортировать или экспортировать файлы, содержащие PHP-массив. Это не будет работать с вашим форматом, потому что ваши файлы являются многомерными массивами.

Если вы пройдете этот путь, этот класс PHP PoParser, который может читать и записывать файлы .po.