Всім привіт. Сьогодні поговоримо про те, як правильно локалізувати БД.
Нехай наш сайт буде підтримувати три мови: Українська, Англійська та Російська. Користувач Іван публікує нову новину на сайті. Проблема полягає в тому, щоб дану новину перекласти на різні мови, причому ідентифікатор новини(ID) повинен бути єдиним для кожної локалізації.
Дехто для відображення новин використовує дві таблиці, news_eng та news_ru. Це не зовсім правильно, оскільки якщо потрібно буде додати ще 10 мов, створювати ще 10 таблиць??? Як таким чином можна зробити так, щоб одну і туж новину можна було прочитати на різних мовах, просто переключившись з однієї локалізації на іншу???
Для того, щоб краще було зрозуміло проблему, перейдемо в Пісочницю на даному сайті та відкриємо першу новину.
І так, ми хочемо прочитати її на анлійській мові. По ідеї мав би бути перевикач локалізації в хедері. Нема. Для того щоб прочитати цю новину на англійській мові, змінимо url адресу з https://www.devbattles.com/ru/sand/post-807 на https://www.devbattles.com/en/sand/post-807. Мала б відкритися та сама стаття англійською, проте результат наступний.
Зовсім не те, чого ми чекали))))
Дехто вважає, що зробити локалізацію новин з однією ID для кожної мови дуже важко і затратно по ресурсах, у цьому ж пості я покажу вам, як це зробити дуже просто.
Не буде публікувати якість вихідні коди, просто опишу ідею.
Почнемо з бази даних.
Створимо 3 таблиці
- Languages
- News
- NewsLang
Таблиця Languages буде зберігати мови, які підтримує сайт. В таблиці news будуть міститися дані, які не потребують перекладу(ID,DateTime,Author,Image і тд.). Таблиця NewsLang звязана з News відношенням 1 до *. У ній будуть зберігатися поля новин, які потебують переводу, такі як Назва, Короткий текст, Текст новини…
Створимо новину на українській мові.
Тепер клікаємо по кнопці перекласти, та переводимо новину на англійську. Трохи потрібно попрацювати, щоб написати зручний інтерфейс для перекладу, проте воно цього варте.
Для того щоб перекласти дану новину на анлійську, просто внесіть дані у форму зправа(ліва форма оригінал).
Саме важче в локалізації, це побудувати зручну форму. Проте тепер немає значення, скільки мов підтримує сайт Дуже просто локалізувати одну і ту саму новину. Правда?
Тепер поглянемо, як воно виглядає на сайті. На жаль, показати в реальному часі роботу сайту не вийде, він ще на localhost, проте демонструю скріни. Переходимо по посиланні http://easytest.com.ua/news/all. Бачимо щойно опубліковану новину на українській мові.
Тепер просто переключимо мову інтерфейсу на англійську. ID одне і те саме. Новина одна і та сама. Чого і варто очікувати.
Просто, зручно, красиво…