Глобальный поиск в многоязычном приложении - PullRequest
0 голосов
/ 03 мая 2020

Мы глобализируем только наше приложение Engli sh. Мы интернационализировали большинство экранов и перевели их на французский. У меня есть некоторые трудности при разработке дизайна для «Глобального поиска», поддерживающего несколько языков. Я предоставил некоторую информацию ниже.

Engli sh язык: В качестве примера я рассмотрел сам экран создания пользователя. Это может быть любой другой экран (например, создание заказа, создание потенциального клиента и т. Д. c, в котором есть хотя бы один раскрывающийся список). Предположение: пользователь находится в стране, говорящей на английском языке Engli sh, и использует клавиатуру Engli sh.

Экран создания пользователя - Engli sh

На приведенном выше экране все метки отображаются в Engli sh. Также значения в раскрывающемся списке отображаются на английском языке Engli sh, потому что мы знаем, что такое культура, основываясь на предпочтениях локали вошедшего в систему пользователя. Когда мы сохраняем эту форму, мы сохраняем всю текстовую информацию как есть. Для выпадающих списков мы сохраняем значения, а также текст в БД. Когда мы снова получим эту запись, мы можем отобразить «По умолчанию» в качестве раскрывающегося значения (или) любого другого раскрывающегося текста на основе языка…, поскольку у нас есть AccountId. Запись может быть сохранена таким образом в БД, и кодирование-декодирование уже обработано.

   {
       UserName: Ranganath.english
       FirstName: Ranganath
       …….
       AccountType: {
        AccountId: 123
        Name: Default
    }
    }

Экран создания пользователя на французском языке:

Экран создания пользователя - французский

Все хорошо с этикетками. Мы можем видеть раскрывающиеся значения на французском языке. Мы сохраняем значение в БД.

Таким образом, запись может храниться следующим образом:

{
   UserName: gabriel.a
   FirstName: Gabriel 
   …….
   AccountType: {
    AccountId: 123
              Name: Défaut
}
}

Глобальный поиск или поиск по списку:

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

Учитывая, что я хочу выполнить поиск 1) 'Gabriel.a' - он дает мне французского пользователя (потому что имя пользователя хранится как есть) 2) 'ranganath.english' - даст мне английский sh user

Теперь я хочу найти «Default», он должен дать мне обоих пользователей, но мы сохранили «Default» для одного и «Défaut» для другого.

Или даже если французский пользователь ищет «Défaut», он должен предоставить обоим пользователям.

Мы можем использовать поиск для объединения с таблицами, связанными с управляемыми данными, но мы не делаем знать, что пользователь ищет ?.

Здесь речь идет только об а) одном раскрывающемся списке б) только с одним значением и c) об одном объекте. И на самом деле было бы много сущностей, много выпадающих списков и много значений

Каков оптимальный способ построения поиска?
До сих пор, поскольку это было приложение ТОЛЬКО АНГЛИ SH, мы использовали Elasti c поиск в pu sh всех записей и выполнение некоторых поисковых запросов на основе текста Engli sh.

Решение 1. Для каждой сохраненной записи сохраните отображаемые имена ВСЕХ применимых языков. Запись становится

{
   UserName: Ranganath.english
   FirstName: Ranganath
   …….
   AccountType: {
    AccountId: 123
    Name: {
        en-US: Default
        fr-FR: Défaut
}
}
}

Это приведет к дополнительным расходам при сохранении, а также при извлечении ненужных данных в формы. Но поиск проще.

Решение 2. Создайте индексы в Elasti c, которые объединяют основные записи с таблицами локализованных управляемых данных.

Пожалуйста, предложите, если есть шаблон проектирования для этого и если решение 1 или 2 выше - это путь к go? Я мог бы пропустить стандартную модель здесь.

...