Шаблоны дизайна для многоязычного сайта?
Допустим, я проектирую веб-сайт, на котором у нас есть английский, французский, испанский, немецкий и корейский языки (нет, но давайте представим, что я есть).
Я не могу полагаться на такие сервисы, как гугл переводчик, так как характер сайта не для развлечений, а для бизнеса. Допустим, у меня есть доступ к профессиональным переводчикам, которые могут переводить что-то в контексте на другой язык, и дать мне этот текст.
Каковы некоторые известные и простые способы предоставления контента на нескольких языках с помощью веб-сайта?
Есть много вариантов, таких как отдельные страницы, использование базы данных и т. Д.... но я не могу действительно решить, что лучше, как масштабировать концепцию, что необходимо учитывать и как бороться с отсутствующими переводами?
Есть ли какие-либо устоявшиеся практики для этого?
4 ответа
Широкая тема, о которой вы спрашиваете, называется "Интернационализация и локализация" (или I18N и L10N для краткости). Важно помнить, что речь идет не только о переводе сообщений. Есть много других вещей, которые идут в интернационализацию веб-сайта.
Более очевидные вещи, которые вам понадобятся:
- Кодировка символов, которая работает для символов на всех языках, а не только на английском (это означает, что все, что находится в базе данных, должно использовать кодировку UTF)
- Некоторый способ представления Locale пользователя (то есть: класс Locale Java)
- Общий шаблон для создания сообщения в локали этого пользователя (то есть: источник сообщений Spring
Другие вещи, которые вы должны учитывать:
- Правильная сортировка строк на основе локали
- Форматирование даты на основе локали
- Всегда показывает время в часовом поясе пользователя
- Отображение измерений расстояния для локали пользователя (например: мили или километры?)
- Выкладываю сайт справа налево для таких языков как иврит
- Подумайте о том, как вы преобразуете свои сообщения.
String message = "Please fix the following error" + (errors.size() > 1 ? "s" : "");
просто не работает в интернационализированной программе. - Подумайте о том, как расположить свои веб-страницы, когда длина текста может сильно различаться... и никогда не предполагайте, что символ более или менее имеет определенную ширину (один символ в кандзи может быть в 8 раз шире, чем строчные буквы ') я')
Лучший ресурс, который я могу найти для этого, - руководство пользователя библиотеки ICU. Если вы используете Java, это библиотека для использования.
Надеюсь, этот ответ будет полезным началом!
Ознакомьтесь с рекомендациями Google по многоязычным и многоязычным сайтам. Надеюсь, что информация пригодится. Удачи.
Полностью согласен с @Michael D и другими разработчиками, которые разместили свои ответы. Хотя этот вопрос уже принят, но я думаю, что одна небольшая опция, такая как псевдокласс:lang(), может быть полезна и для создания многоязычных сайтов. Псевдокласс:lang() позволяет определять язык в различных документах.
Код CSS:
q: lang (fr) {/ * Цитаты для французского */ кавычки: "\00AB" "\00BB"; } q:lang(en) { цитаты: "\201C" "\201D"; /* Цитаты на английском */ }
HTML код:
<html>
<body>
<pre>
<p>Quote in French: <q lang="fr">То être ou ne pas être</q>.</p>
<p>Quote in English: <q lang="en">То be or not to be</q>.</p>
</pre>
</body>
</html>
И вывод будет таким:
Quote in French language: << То être ou ne pas être >>.
Quote in English language: "То be or not to be".
Обратите внимание, что речь идет о документах, а не о куске текста, поскольку они выполняют сложное форматирование.
У нас есть набор файлов на диске, которые содержат все строки в данном виджете / модуле / что угодно, и отдельные файлы для каждого языка, то есть:
foo.strings == generic (happens to be US english)
foo.fr.strings == french
foo.fr-CA.strings == canadian french
foo.en-CA.strings == canadian english
На основе заголовка Accept-Language клиента мы определяем, какой язык он хочет.
Когда запрашивается определенный язык, мы нажимаем на файловую систему, чтобы создать отображение больших строк для этого языка, а затем кешируем его в памяти. Если данная строка не определена в fr-CA, мы перепрыгнем через стек до fr, а затем в общем
Страницы генерируются динамически, и сгенерированная версия каждого URL-адреса кэшируется в зависимости от языковых заголовков пользователя (среди прочего).
надеюсь, это поможет