Как организовать структуру мультиязычного сайта?
Есть онлайн игра, реализованная на веб-сайте. Есть несколько сопровождающих игрока подсказок, описаний, подписей и т.п. Как правильно организовать мультиязычность на сайте? Как это делают в большинстве случаев?
Ответы (1 шт):
Вы не уточнили фреймворк и/или используемые библиотеки, поэтому рассмотрим общий случай.
Локализация — это, конечно, больше, чем просто перевод текстов (это и даты, и — иногда — размещение элементов, и даже адаптация содержимого под определённую культуру). Однако пойдём от простого.
Я бы советовал применять GNU GetText.
Плюсы:
- Простота добавления и обновления переводов (.PO-файлы для переводчика, .MO-файлы для машинной обработки — первые легко держать в системе контроля версий, вторые генерируются одной простой командой);
- Значительно более читаемый и легко поддерживаемый код (это спорно, но за 10 лет работы в локализации я ничего удобнее не видел):
_('Please input your name:')вместо какого-нибудь$messages['pleaseInputName']или чего-то похожего. Поменялось сообщение — меняем английский оригинал, регенерируем POT-каталог, обновляем переводы (или сразу отдаём каталог переводчикам, в зависимости от их квалификации) — и всё, никакой головной боли; - При небольшой донастройке правильная плюрализация, то есть употребление форм множественного числа («1 книга, 2 книги, 5 книг» для русского языка, «1 book, 2 books, 5 books» для английского, а в арабском этих форм не то пять, не то шесть для разного количества объектов);
- Чёткая структура папок с локализованными файлами, никакого зоопарка местоположений и форматов.
Поддержка в PHP осуществляется с помощью расширения GetText. Оно вроде как опционально, но я, честно говоря, уже давно почти нигде не видел сборок без него.