Локализация 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.