Как вы реализуете мультикультурное веб-приложение
-
03-07-2019 - |
Вопрос
Я полагаю, что некоторые из нас уже работали над проектом, в котором не только пользовательский интерфейс, но и данные должны поддерживаться на разных языках.Например, возможность предоставить и сохранить перевод того, что я здесь пишу.
Более того, я также считаю, что у некоторых из нас есть некоторые события, запускаемые по времени (например, при истечении срока действия доступа к членству), когда местоположение пользователя должно приниматься во внимание для расчета, например, полуночи в соответствии с правильным часовым поясом.
Наконец, существует также необходимость поддерживать пользовательские интерфейсы справа налево в соответствии с определенными языками и использовать различные кодировки при чтении отправленных файлов данных (например, при анализе текста и данных Excel)
В настоящее время я сохраняю все свои переводы для всех своих сущностей в одной таблице (не так практично, поскольку очень сложно найти себя при выполнении sql-запросов для изучения проблемы), устанавливая переводы пользовательского интерфейса в основном на вспомогательных сборках и не поддерживая ни часовые пояса, ни дизайн справа налево.
Каков ваш опыт решения этих проблем?
[Править]
Я предполагаю, что большинство людей думают, что такой уровень требований к мультикультурности подобен созданию огромного проекта.На самом деле, если вы спросите об онлайн-опросе, где:
- Ответы будут собираться только до полуночи
- Определение анкеты и часть ответы взяты из текстового файла (на любом языке), а также переводы
- Вопросы и варианты ответов должны отображаться на нескольких языках, в зависимости от того, кто имеет к ним доступ
- Отчеты также должны быть показаны и созданы на нескольких разных языках
Как можно видеть, нам не нужно заходить слишком далеко в разработке приложения, чтобы предъявлять такого рода требования.
[Правка2]
Только что узнал, что мой вопрос является дубликатом
Первый ответ (при заказе голосованием) настолько понятен, что я должен когда-нибудь реализовать хотя бы его часть.
Решение
Будьте очень, очень осторожны.Из того, что вы говорите о функциях i18n, которые вы пытаетесь реализовать, я задаюсь вопросом, не перегибаете ли вы палку.
Обратите внимание , что большой мальчик (например ,eBay, amazon.com, yahoo, bbc) веб-приложения фактически предоставляют отдельные приложения на каждом языке, который они хотят поддерживать.Каждое из этих веб-приложений использует общий базовый набор сервисов.Не удивляйтесь, если бизнес-потребности двух разных стран, которые даже говорят на одном языке (напримерВеликобритания и США) настолько различны, что для каждого из них вам нужно отдельное приложение.
С другой стороны, вам, возможно, придется стать таким же, как следующий amazon.com.Трудно создать успешное веб-приложение на одном языке, а тем более на многих.Вам не следует бояться отдавать предпочтение одной группе пользователей (скажем, носителям вашего азиатского языка) перед другими, если это имеет смысл для бизнес-потребностей вашего веб-приложения.
Другие советы
Двигайся медленно.
Хорошенько все обдумайте, а затем еще раз по-настоящему подумайте о том, что вы делаете.Имейте в виду, что чем больше вы добавите (например, справа налево), тем длиннее будет ваш цикл контроля качества.
Основным элементом вашей головоломки будет широкое использование интерфейсов на стороне кода и либо одного источника данных, который передается через транслятор на те языки, которые необходимо поддерживать, либо отдельных источников данных для каждого языка.
Временные проблемы могут быть решены с помощью интерфейсов, потому что, по-видимому, вы захотите, чтобы все функционировало одинаково, но отличалось деталями реализации.В значительной степени аналогичный мыслительный процесс может быть применен к созданию интерфейса при настройке его для поддержки различных языков.Если разобраться, то скининг - это именно то, где скинируемый контент - это интерфейс, а внешний вид - это реализация.
Делайте то, что нужно вашим пользователям.Например, большинство программистов понимают английский, нет смысла переводить посты на этом сайте.Если многим вашим пользователям нужен перевод, добавьте новый столбец таблицы с идентификатором языка и еще один столбец, чтобы связать переведенную строку с оригиналом.Если ваша целевая аудитория состоит из пользователей с Ближнего Востока, перемещайте справа налево.Если точность определения времени критична с точностью до часа, добавьте столбец часового пояса в таблицу пользователей и так далее.
Если вы используете *NIX, используйте gettext - получить текст.Большинство языков, которые я использовал, имеют определенный уровень поддержки; PHP- это например, это довольно хорошо.
Я опишу, что было сделано в моем проекте (это была не моя оригинальная архитектура, но в любом случае она мне понравилась).
Предоставление поддержки в области перевода
Текст, который необходимо перевести, был разделен на три различные категории:
- Текст ошибки:Например, ошибки, которые происходят глубоко на бизнес-уровне приложения
- Текст пользовательского интерфейса:Текст, отображаемый в пользовательском интерфейсе (надписи, кнопки, заголовки таблиц, меню)
- Пользовательский текст:текст, который должен быть переведен в соответствии с предпочтениями конечного пользователя (то есть пользователь создает вопрос в опросе, и он также может создать переведенную версию этого опроса)
Для каждой отдельной категории схема, используемая для предоставления услуг перевода, отличается, так что у нас есть:
- Текст ошибки:Библиотека со статическими функциями, которые обращаются к файлам ресурсов
- Текст пользовательского интерфейса:Класс "Helper", который, связанный с механизмом просмотра, предоставляет переводы из удаленных сборок
- Пользовательский текст:Таблица в базе данных, которая предоставляет переводы (в соответствии с typeID переведенной сущности и идентификатором объекта) и связана с сущностью через отношение 1 x N
Однако я не обращал внимания на другие очевидные проблемы, такие как работа с часовыми поясами, различными макетами и переводом изображений (если это действительно необходимо).Кто-нибудь решал эту проблему по-другому?
Кто-нибудь когда-нибудь решал другие проблемы i18n?