Шаблоны дизайна для многоязычного сайта? - PullRequest
10 голосов
/ 06 октября 2010

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

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

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

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

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

Ответы [ 4 ]

14 голосов
/ 07 октября 2010

Широкая тема, о которой вы спрашиваете, называется «Интернационализация и локализация» (или I18N и L10N для краткости). Важно помнить, что это , а не только о переводе сообщений. Есть много других вещей, которые идут на интернационализацию веб-сайта.

Более очевидные вещи, которые вам понадобятся:

  • Кодировка символов, которая работает для символов на всех языках, а не только на английском (это означает, что все, что находится в базе данных, должно использовать кодировку UTF)
  • Некоторый способ представления языка пользователя (т. Е. языка Java * класса )
  • Общий шаблон для создания сообщения в локали этого пользователя (например: Spring's MessageSource

Другие вещи, которые вы должны учитывать:

  • Правильная сортировка строк на основе локали
  • Форматирование даты в зависимости от локали
  • Всегда показывает время в часовом поясе пользователя
  • Отображение измерений расстояния для локали пользователя (т. Е. Мили или километры?)
  • Размещение сайта справа налево для таких языков, как иврит
  • Подумайте, как вы преобразуете свои сообщения. String message = "Please fix the following error" + (errors.size() > 1 ? "s" : ""); просто не работает в интернационализированной программе.
  • Подумайте о том, как выложить свои веб-страницы, когда длина текста может сильно различаться ... и никогда не предполагайте, что символ более или менее имеет определенную ширину (один символ в кандзи может быть в 8 раз шире, чем нижний регистр 'i')

Лучший ресурс, который я могу найти для этого, - руководство пользователя библиотеки ICU . Если вы используете Java, это библиотека для использования.

Надеюсь, этот ответ будет полезным началом!

3 голосов
/ 15 марта 2014

Ознакомьтесь с рекомендациями Google для Многоязычных и многоязычных сайтов . Надеюсь, эта информация пригодится. Желаем удачи.

2 голосов
/ 29 июня 2015

Полностью согласен с @Michael D и другими разработчиками, которые разместили свои ответы.Хотя этот вопрос уже принят, но я думаю, что одна небольшая опция, такая как псевдокласс: lang (), может быть полезна и для создания многоязычных сайтов.Псевдокласс: lang () позволяет определять язык в различных документах.

Код CSS:



    q:lang(fr) {     /* Quotations for French */ 
     quotes: "\00AB" "\00BB"; 
    }

    q:lang(en) {
     quotes: "\201C" "\201D";    /* Quotations for English */ 
    }


Код HTML:

<code> <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>
 

И результат будет таким:

Quote in French language: << То être ou ne pas être >>.

Quote in English language: "То be or not to be".

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

1 голос
/ 07 октября 2010

У нас есть набор файлов на диске, которые содержат все строки в заданном виджете / модуле / что угодно, и отдельные файлы для каждого языка, т.е.:

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

Надеюсь, что поможет

...