Как добавить поддержку нескольких языков для ДАННЫХ?
От: avs99 Южная Корея  
Дата: 16.04.16 16:54
Оценка:
Добрый день.

Есть некое intranet web-приложение (C# MVC5, EF, knockout) для работы с продуктами — обновление спецификаций, картинки, то-сё. Используются все более-менее стандартные best practices Microsoft — MVC, DataAnnotation, никаких особых извращений не выявлено. Проект писался нами, примерно 6 чел/месяцев.

Сейчас заказчик захотел добавить возможность данные вводить не только на английском, но и на французском языках. В то же самое время интерфейс вполне себе остается английским. Т.е. если было

Product Name: [_______]
Product Image: [upload]

то теперь это надо как-то подружить и со вторым языком.

Итого вопросы:

  1. Как это сделать наиболее "мякгим" способом, не ломая существующий код/логику? Всё с нуля переделывать не хочется.

  2. Визуальная соствляющая — как наиболее интуитивно сделать переключалку между языками + индикацию наличия перевода (или устаревшего перевода)? Может кто видел что-то похожее на рынке?

  3. База — как грамотнее сделать базу? Мысли пока были следующие:
    (a) Хранить в product_name сериализованный xml/json со всеми языками/статусами — тогда вообще никаких изменений в базе не надо
    (b) Сделать копию структуры в новой базе DB_fr — и в неё писать уже только перевод. Плюсы — текущая база остается без измнеений
    (c) Сделать таблицы вида Product_fr, ProductModel_fr — и в них уже хранить, что надо.
    (d) Расширить существующие таблицы — Product { name, name_fr, name_translation_status ... }

лично я склоняюсь к варианту 3d вот примерно так:
  1. Все поля, которые надо переводить, в моделях EF пометить свои аттрибутом [Localizable]
  2. Написать автоматическую генерацию partial class по этим аттрибутам для расширения существующих моделей — {name_fr, name_translation_status, ... }
  3. Написать расширение маппера, что бы теперь и для моделей вьюх эти поля автоматические по аттрибутам генерились/подсасывались
  4. сделать свой Html.EditorFor — для корректной работы с [Localizable] полями

мне так кажется, это покроет процентов 80 всей работы. Ну и дальше уже руками допиливать оставшиеся моменты.

Я в том направлении мыслю? Или может есть какие-то устоявшиеся паттерны? Спасибо.
Re: Как добавить поддержку нескольких языков для ДАННЫХ?
От: xednay89 Россия  
Дата: 18.04.16 17:54
Оценка:
Здравствуйте, avs99, Вы писали:

A>Я в том направлении мыслю? Или может есть какие-то устоявшиеся паттерны? Спасибо.


Может быть сделать таблицу с локализуемыми ресурсами?
Вида {id, text, lang}
И где нужны локализуемые данные хранить id ресурса
Re: Как добавить поддержку нескольких языков для ДАННЫХ?
От: wildwind Россия  
Дата: 18.04.16 18:57
Оценка:
Здравствуйте, avs99, Вы писали:

A>Сейчас заказчик захотел добавить возможность данные вводить не только на английском, но и на французском языках. В то же самое время интерфейс вполне себе остается английским.


Это скорее всего ненадолго.

A> Визуальная соствляющая — как наиболее интуитивно сделать переключалку между языками


Обычный флажок чем не подходит? Это же веб-приложение.

A>+ индикацию наличия перевода (или устаревшего перевода)?


Предположу, что эта индикация нужна далеко не всем, а только сотруднику, ответственному за полноту перевода. Остальным же будет только мешать.

A> База — как грамотнее сделать базу? Мысли пока были следующие:

A>(a) Хранить в product_name сериализованный xml/json со всеми языками/статусами — тогда вообще никаких изменений в базе не надо
A>(b) Сделать копию структуры в новой базе DB_fr — и в неё писать уже только перевод. Плюсы — текущая база остается без измнеений
A>(c) Сделать таблицы вида Product_fr, ProductModel_fr — и в них уже хранить, что надо.
A>(d) Расширить существующие таблицы — Product { name, name_fr, name_translation_status ... }
A>[/list]

(e) Каждое локализуемое символьное поле заменить ссылкой на словарь (один для всех таблиц). Затем построить параметрические view. Для изменений — процедурный API.
Re: Как добавить поддержку нескольких языков для ДАННЫХ?
От: Ziaw Россия  
Дата: 28.04.16 06:10
Оценка:
Здравствуйте, avs99, Вы писали:

A>Product Name: [_______]

A>Product Image: [upload]

A>то теперь это надо как-то подружить и со вторым языком.


Сколько таких моделей/полей? Сколько доп. языков сейчас нужно? Сколько в перспективе? Какие запросы будут к локализованым данным? Много ли ситуаций, когда надо отображать несколько языков одновременно?
Re: Как добавить поддержку нескольких языков для ДАННЫХ?
От: AlexNek  
Дата: 28.05.16 21:33
Оценка:
Здравствуйте, avs99, Вы писали:

A>Сейчас заказчик захотел добавить возможность данные вводить не только на английском, но и на французском языках.

Что то не совсем врубаюсь, если читать только данную фразу, то для этого есть Юникод или аналоги. Если читать весь топик то получается нужно что то типа "локализации проги".
Но что тогда является элеметом ввода? Для локализации нужен то уже готовый "словарь" на одном языке.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.