Коли слід використовувати узгодження мови

Питання

Коли потрібно, а коли не потрібно використовувати узгодження мови?

Language negotiation (узгодження мови) - функція HTTP протоколу, яка дозволяє серверу вибирати між кількома мовними версіями сторінки, що основана на URL та на інформації про уподобання користувачів, які надсилаються браузером (зокрема, в Accept-Language заголовку). Це відрізняється від вибору сторінки, що оснований на IP адресі браузера або від ручного вибору користувачем на сторінці вибору мови. Якщо уподобання користувачів, які виражаються браузером та мови, які доступні на сервері відрізняються, то показується сторінка вибору мов або обслуговується мова встановлений за замовчанням.

У багатьох випадках, початкова установка клієнтського додатку для мовних уподобань є підходящою. Наприклад, якщо у вас є Японська версія браузера, то браузер зазвичай припускає, що ви віддаєте перевагу сторінкам на Японській мові, і відправляє цю інформацію на сервер. Основні браузери дозволяють змінювати ці мовні уподобання. Для отримання додаткової інформації дивіться в статті Налаштування мовних уподобань в браузері.

У даній статті розглядається питання, коли на сервері необхідно (чи коли не потрібно) налаштовувати узгодження мови.

Відповідь

Коротка відповідь: завжди.

Трохи більш докладна відповідь: майже завжди, але не наодинці.

Узгодження мови не завжди працює за призначенням; є методи які використовуються, щоб компенсувати недоліки; слід також передбачити гнучкість навігації.

Недоліки узгодження мови

Очевидно, що узгодження мови це корисна річ, але до її реалізації в усіх напрямках, важливо зрозуміти її межі. Щоб проілюструвати це ми використаємо сайт www.example.be, який пропонує свій контент на Фламандській, Французькій та Німецькій мовах, тут приміняється узгодження мови, і Фламандська мова встановлюється за замовчуванням для всіх сторінок. Наш гість, Сільвія, розмовлятиме на Італійській мові, але зможе мати справу й з Німецькою мовою. Тут можуть виникнути декілька ситуацій:

  1. Браузер Сільвії налаштований правильно і виражає вподобання користувачів наступним чином: спочатку Італійська мова, а потім Німецька мова. Коли Італійська буде не доступна на сайті www.example.be, сторінки будуть показуватися на Німецькій мові, відвідувачі будуть задоволені, тобто все буде добре. Це те для чого потрібне узгодження мови!
  2. Сільвія не має технічних навичок, вона ніколи не чула про HTTP узгодження мови і ніколи не потребувала змінювати налаштування свого браузера. Італійська версія браузера налаштована (правильно) на встановлення Італійської мови в якості уподобання користувачів. Натискаючи на www.example.be ми бачимо: Італійська мова не доступна і тому відображається Фламандська мова, що на цьому сайті є мовою за замовчуванню, хоча й доступна Німецька мова. А це погано.
  3. Сільвія не використовує свій власний браузер, вона сидить в інтернет кафе в Москві. Браузер тут налаштований на (або за замовчуванням використовує) Російську мову. Вона знову отримує Фламандську мову. А це погано.

Сподіваємося, що тепер вам зрозуміло: узгодження мови, не завжди дає бажаний результат.

Крім того, навіть узгодження мови не є важливим тоді, коли сторінки не є рівноцінними, тобто по суті різний контент на різних мовах. Стаття Одномовні чи багатомовні Веб сайти трохи проясняє цю ситуацію, зокрема, дивіться підрозділи "Багатомовний однаковий контент" та "Багатомовний змінений контент" . Проте, зауважимо, що певна культурна адаптація (наприклад, зміна валюти) не обов'язково зробить сторінки нерівноцінними; обмеження нерівноцінності контенту щодо узгодження мови дійсно існує тоді, коли сайт адаптований таким чином, що сторінки на різних мовах більше не відповідають одна одній.

Упорядкування недоліків

Незважаючи на свою обмеженість, узгодження мови є корисною функцією, і її бажано, реалізовувати на багатомовних сайтах. Але потрібно прибрати недоліки. Коротше кажучи, важливо забезпечити відвідувачів значеннями для того, щоб перевизначити автоматичний вибір мови тоді, коли цей вибір невірний. Ці значення вставляють деякі елементи інтерфейсу на сторінку (тут ми їх називаємо language controls (керуючі значення мови)), що посилається на інші доступні мови. Звичайно, ці керуючі значення, повинні бути добре помітними і зрозумілими для відвідувача, який не знайомий з мовою, яка в даний час відображається на сторінці.

Виникає одне запитання: чи узгодження мови та ручні керуючі значення мови повинні бути реалізовані для всіх сторінок, чи тільки для домашньої сторінки? Найкраща відповідь "для всіх сторінок", за винятком тих, наборів сторінок, які не є достатньо рівноцінними. Узгодження мови добре, тому що, коли Яап відправляє П'єру посилання по електронній пошті всередині сайту www.example.be, то П'єр буде радий отримати Французьку версію посилання, хоча й Яап прочитав його на Фламандській мові. Language controls (керуючі значення мови) повинні надаватися незалежно від того, чи реалізоване було узгодження мови чи ні. Якщо узгодження мови відсутнє, то П'єру знадобляться керуючі значення для того, щоб отримати Французьку версію посилання, надісланого Яапом; навіть якщо узгодження мови присутнє, в вищезазначених ситуаціях 2 і 3 Сільвії все одно потрібно буде переключитися на Німецьку мову вручну.

До речі, коли серед доступних мов немає тих, яким користувач віддає перевагу, деякі сайти вибирають для відображення сторінку спеціального призначення для вибору мови (сайт www.example.be міг би зробити це замість відображення сторінки на Фламандській мові). Корисно прояснити ситуацію і не надавати пріоритет жодній мові над іншими, оскільки це може мати політичний характер. На жаль, деякі сайти завжди відображають цю спеціальну сторінку (для домашньої сторінки) замість того, щоб реалізувати узгодження мови. Це змушує усіх відвідувачів завжди потрапляти на цю сторінку , яка не містить жодної явної користі для відвідувача. Поганий дизайн - це суто людський фактор.

Навігація

Припустимо, що Сільвія відвідує сайт www.example.be і бачить сторінки на Фламандській мові (ситуація 2 або 3). Потім вона натискає на перемикач і далі читає вже сторінку на Німецькій мові, тобто ніякої реальної проблеми немає. Але потім вона натискає на посилання, щоб зайти на цікаву сторінку, що знаходиться на сайті. На жаль вона знову побачить сторінку на Фламандській мові! На щастя там досі є перемикач, щоб включити Німецьку мову , але стає зрозуміло, що після декількох таких переходів вона розчарується. А хіба сайт www.example.be не може запам'ятати, що вона не може читати Фламандською мовою? Що ж тут необхідно - це деяка гнучкість очевидного вибору мови.

Є декілька способів, якими сайт www.example.be може забезпечити цю гнучкість. Який з них вибрати, залежить від основної доступної на сервері технології і від зусиль, які можуть бути примінені.

Якщо сайт реалізує механізм session (сесії) (наприклад, з використанням cookies), то досить просто організувати те, щоб мова була частиною сесії. Після того, як Сільвія натисне на перемикач і включить Німецьку мову, ця дія збережеться (або в cookie, або на сервері, і прикріпляється до номеру сесії в cookie) і після того при перегляді сторінок на сайті Сільвія буде бачити їх на Німецькій мові. Cookie навіть може бути постійним (хоча це загострює питання особистої недоторканності), так що Сільвія автоматично побачить сторінки на Німецькій мові наступного разу, коли вона повернеться на сайт www.example.be. Сайти, які забезпечують механізм login (логін) можуть зберігати мовні уподобань в рамках профіля кожного користувача, і відповідно до цього обслуговувати сторінки. Тоді узгодження мови використовується тільки для користувачів, які ще не увійшли в систему.

Ще один із способів зменшити розчарування відвідувачів - зробити всі внутрішні посилання всередині сайту language-specific (на відповідних до тексту сторінок мовах). На Німецькій домашній сторінці: посилання на глибші сторінки будуть мати вигляд: href="company/about.de.html" (замість company/about.html, що було б language-generic) (загальним мовним посиланням)*. Навігація тоді змушена буде залишатися на Німецькій мові доти, поки не буде перевизначена спеціальними керуючими значеннями мови. Однак, це має декілька недоліків. Один із них - те, що всі внутрішні посилання потрібно буде перекладати, що в свою чергу збільшує вартість перекладу і ймовірність появи помилок. Інший недолік - якщо Яап відправляє посилання П'єру, URL (взятий з адресного рядка браузера) буде language-specific (на конкретній мові); П'єр тоді отримає сторінку на Фламандській мові. Жоден з цих недоліків не є жахливим, однак, використання посилань language-specific (на конкретній мові), ймовірно, є шляхом яким треба піти, якщо гнучкість не можна забезпечити шляхом використання сесій або профільного механізму.

Зверніть увагу, що тут показані особливі форми language-specific (на конкретній мові) та language-generic URLs (загальні мовні посилання) (company/about.de.html чи company/about.html), що залежить від технології, яка використовується на сервері для того, щоб реалізувати узгодження мови. Використовуючи Apache MultiViews, одна людина хотіла би бачити: company/about.html.de та company/about.html або повну відмову від .html розширення: company/about.de та company/about.

Доречі

HTTP Accept-Language заголовок не є єдиним доступним джерелом інформації про мову. Всі браузери також надсилають User-Agent заголовок при цьому виявляючи браузер, номер його версії, а в деяких випадках ще й мову. Він може використовуватися для того, щоб вгадати мову, якій користувач віддає перевагу у випадку, коли відсутній Accept-Language заголовок, але він менш надійний і більш обмежений (тільки одна мова) ніж Accept-Language заголовок. Використовуйте його з максимальною обережністю.

Узгодження мови - тільки один з аспектів HTTP узгодження контенту. Інші аспекти, які можуть бути узгоджені автоматично це: media type (медіа тип) (тобто формат: HTML, PDF або, наприклад, простий текст), кодування символів та передача кодування (зашифрована, стиснута, і т.д.). Узгодження мови є найбільш корисним і найбільш часто використовуваним.