Шаблоны дизайна для многоязычного сайта?

Допустим, я проектирую веб-сайт, на котором у нас есть английский, французский, испанский, немецкий и корейский языки (нет, но давайте представим, что я есть).

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

Каковы некоторые известные и простые способы предоставления контента на нескольких языках с помощью веб-сайта?

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

Есть ли какие-либо устоявшиеся практики для этого?

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-адреса кэшируется в зависимости от языковых заголовков пользователя (среди прочего).

надеюсь, это поможет

Другие вопросы по тегам