GoLocal!
Открыть панель управления
Руководство для разработчиков BubbleБесплатная среда выполнения 4.1.23

Безопасный многоязычный поиск с помощью GoLocal Query

Руководство для начинающих по основному элементу GoLocal, дополнительный элемент GoLocal Query, элементы управления автоматическим поиском Bubble и самый безопасный способ сохранить переведенные интерфейсы отдельно от логики базы данных.

Основная концепция

Приложение Bubble обычно имеет один канонический язык , на котором были созданы метки базы данных, отображаемые значения Option Set и жестко закодированные текстовые условия. GoLocal может отображать эти значения на другом языке, но логика Bubble по-прежнему может ожидать канонического значения.

Источник Project

Английский

Сохраненная категория: Новости

Посетитель видит

Французский

Видимая метка: Актуальные данные

Поиск Bubble

Новости

Нормализованное исходное значение

Правило безопасности: видимый ввод остается значением, ориентированным на пользователя и сохраняемым. Отдельный normalized_query используется только там, где Bubble явно требуется текст на исходном языке.

Какой элемент GoLocal мне следует использовать?

Плагин содержит два разных невизуальных элемента Bubble. Они решают разные проблемы. Большинству страниц нужен элемент main GoLocal! ; требуется только страницам с определенной проблемой текстового поиска. GoLocal Query.

Наличие плагина: отдельный GoLocal Query элемент включен в плагин Bubble Free/API-key и работает с активным проектом GoLocal SaaS.

Требуется переводчик

GoLocal!

Это основной механизм перевода. Он загружает ваш проект, переводит содержимое страницы, отображает языковой виджет и публикует текущий язык и события перевода.

  • Обычно помещает один экземпляр в многоразовый заголовок или другой элемент, общий для страницы.
  • Используйте его поля для ключа API, виджета, исключенных идентификаторов/селекторов и поведения источника/цели.
  • Используйте его состояния и события, когда Bubble должен знать выбранный язык или статус перевода.

Дополнительный логический помощник

GoLocal Query

Это не переводит страницу и не отображает виджет. Он преобразует одну поисковую фразу, введенную посетителем, в каноническую фразу на исходном языке вашего приложения для логики Bubble.

  • Добавляйте ее только тогда, когда обычный ввод должен искать или сравнивать текст, хранящийся на исходном языке проекта.
  • Используйте один элемент Query для каждого независимого поискового ввода.
  • Никогда не используйте normalized_query для сохранения созданных пользователем имен, заголовков, описаний или сообщения.
Элемент или задача BubbleЧто использовать
Текст, кнопка, группа, многоразовый пользовательский интерфейсТолько GoLocal!
Ввод, который экономит пользователя dataИсходное входное значение
Обычный ввод, фильтрующий текстовое поле на английском языкеОдин GoLocal Query
Bubble SearchBox или раскрывающийся списокАвтоматически
Устаревший или Select2 MultiDropdownАвтоматически
Многострочный ввод, Quill, contenteditableИсходное значение редактора
Повторяющееся групповое ограничениеThing/Option Set/ID во-первых
Электронная почта, телефон, пароль, номер, дата, идентификатор, файлИсходное значение
Простое решение: если значение отображается, используйте основной переводчик. Если значение сохраняется, используйте исходное значение Bubble. Если переведенная фраза должна сопоставляться с текстом на исходном языке, используйте поддерживаемый автоматический элемент управления или один специальный элемент GoLocal Query.

Предпочитаемая архитектура Bubble

По возможности создавайте условия на основе Bubble вещей, параметров Option Set, уникальных идентификаторов или стабильных кодов, а не переведенного отображаемого текста. Перевод должен менять то, что видит человек, а не идентичность записи.

Лучший вариант: сравнить объект

Current cell's Article's Category
is Category News

Посетитель может видеть «Actualités», но Bubble сравнивает сам параметр «Категория» или Option Set.

Использовать запрос только для сопоставления текста

Category name contains
GoLocal Query Categories's normalized_query

Это подходит, когда база данных или существующее условие действительно ищут канонический текст на английском языке.

Пример категории установить

Канонический английскийФранцузский Показать
НовостиАктуальные новости
МнениеМнение
РуководствоОбучение
РуководствоРуководство
Обзор wAvis
ИсторияИстория
ДругоеДругое

Автоматический обратный поиск

Бесплатная среда выполнения 4.1.23 автоматически применяет обратный поиск только к элементам управления Bubble, целью которых является выбор или поиск существующего значения:

Bubble SearchBox
Bubble Раскрывающийся список
Устаревший Bubble MultiDropdown
Текущий Select2 MultiDropdown

Типы посетителей: Актуальные новости

Соответствие элементов управления: Новости

Посетитель продолжает видеть: Актуальные новости

Каждый поддерживаемый элемент управления имеет изолированное обратное состояние, включая несколько элементов управления на одной странице. Не добавляйте элемент GoLocal Query только для того, чтобы дублировать это встроенное поведение.

Bubble SearchBox

Используйте его, когда посетитель ищет и выбирает существующую вещь Bubble. GoLocal помогает переведенной фразе соответствовать каноническому тексту, используемому SearchBox.

Bubble Раскрывающийся список

Используйте его для одного выбора из существующего статического или динамического списка. Выбранный параметр остается реальным значением Bubble.

Устаревший Bubble MultiDropdown

Используйте его для выбора нескольких существующих параметров в старых приложениях Bubble. Каждый элемент управления нормализуется независимо.

Select2 MultiDropdown

Используйте его для текущих элементов управления с возможностью поиска и множественного выбора. Набранный текст поиска может соответствовать меткам параметров исходного языка без изменения обычных входных данных.

Простой ввод Bubble намеренно не является автоматическим. Плагин не может безопасно угадать, является ли ввод полем поиска, именем человека, заголовком базы данных, условным значением или текстом, который будет сохранен. Добавляйте GoLocal Query только для определенного ввода, чья нижестоящая логика требует канонического текста.

Использование GoLocal Query

Используйте невизуальный GoLocal Query элемент, когда обычный ввод Bubble намеренно управляет текстовым поиском, условием исходного языка или внутренним фильтром/фильтром API.

1

Добавьте для этого один элемент запроса. input

Поместите его один раз на страницу или в повторно используемый элемент, которому принадлежит вход. Не размещайте его в каждой ячейке повторяющейся группы.

Element name: GoLocal Query Categories
2

Привяжите его поле запроса

Query = Input Category Search's value
Enabled = yes
Debounce (ms) = 180

Bubble автоматически обновляет элемент при изменении динамического входного значения. Рабочий процесс с изменением ввода не требуется.

3

Используйте normalized_query только в логике исходного языка

GoLocal Query Categories's normalized_query

Используйте это значение в ограничении повторяющейся группы, расширенном фильтре, текстовом условии или параметре API, который ожидает английского языка.

4

Сохраняйте и проверяйте связь с входными данными.

Save Category Name = Input Category Search's value

Никогда не заменяйте обычное значение сохранения, проверку электронной почты, вычисление числа или проверку обязательных полей на normalized_query.

Что происходит, пока посетитель вводит текст?

  1. 1Вводные данные изменения: Bubble передает точное текущее значение ввода в поле «Запрос».
  2. 2Debounce ожидает короткое время: По умолчанию 180 мс предотвращает запрос для каждого отдельного нажатия клавиши.
  3. 3Новейшая фраза нормализуется: Например, «Actualités» разрешается в «News». Более старые незавершенные запросы не могут перезаписать самый новый результат.
  4. 4Bubble получает состояния: normalized_query становится «Новости», is_normalizing становится «нет», и срабатывает нормализованное событие.
  5. 5Ее использует только предполагаемая логика: Повторяющаяся группа, условная или Фильтр API использует normalized_query; при сохранении по-прежнему используется исходный ввод.

Практические примеры Bubble

Повторяющаяся группа

Поиск по категориям статей на английском языке из французского ввода

Типы посетителей Актуальные новости. В базе данных хранятся Новости. Установите ограничение имени категории повторяющейся группы на:

GoLocal Query Categories's normalized_query

Предпочитать выбор Category Thing/Option Set, если он доступен; используйте нормализацию текста только тогда, когда фильтр действительно основан на тексте.

Условие Bubble

Сравнить с жестко запрограммированным значением исходного языка

When GoLocal Query Status's is_normalizing is no
and GoLocal Query Status's normalized_query is "Archived"

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

Бэкэнд или API

Отправить запрос на каноническом языке в конечную точку

API parameter q = GoLocal Query Products's normalized_query
Run only when is_normalizing is no

Идентификаторы, UUID, электронные письма, токены, даты и числовые значения должны отправляться в обход GoLocal Query и отправляться без изменений.

Полное руководство для начинающих.

Фильтровать статьи по переведенному названию категории.

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

1. Четко назовите вход Bubble
Input Category Search
2. Добавьте и назовите одного невизуального помощника
GoLocal Query Categories
3. Привяжите вспомогательное поле
GoLocal Query Categories → Query
= Input Category Search's value
4. Установите ограничение текста повторяющейся группы
Search for Articles
Category name = GoLocal Query Categories's normalized_query
5. Сохраняйте рабочие процессы создания/редактирования без изменений
Create a new Article's title
= Input Article Title's value

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

Страницы с несколькими входными данными

Создайте по одному экземпляру GoLocal Query для каждого независимого контекста поиска. Каждый экземпляр имеет свое собственное значение, таймер устранения дребезга, защиту последовательности, состояния и события, поэтому один ввод не может перезаписать другой.

Ввод поиска статейGoLocal Query СтатьиПовторяющаяся группа статей
Ввод клиента ПоискКлиенты GoLocal QueryФильтр API для клиентов
Фильтр входных теговТеги GoLocal QueryУсловие тега
Не используйте повторно один элемент запроса для несвязанных входных данных. Если значение должно пересекать a граница повторно используемого элемента, скопируйте normalized_query этого конкретного элемента в специальное пользовательское состояние Bubble, когда сработает его normalized событие.

Что следует оставить нетронутым

Используйте GoLocal Query для

  • текста произвольной формы, используемого для поиска в полях базы данных на каноническом языке.
  • Текстовые условия, ожидающие английского языка. константа
  • Параметры запроса API, серверная часть которых ожидает английского языка.
  • Сторонние элементы управления поиском, которые предоставляют свой типизированный запрос Bubble.

Не используйте его для

  • имен, заголовков, комментариев, описаний или тегов, созданных пользователем.
  • Quill, форматированный текст, contenteditable или содержимое многострочного ввода
  • Электронная почта, пароли, телефоны, идентификаторы, даты, числа, файлы или проверка
  • Bubble Вещи или объекты Option Set, которые можно сравнивать напрямую

Сохраненный пользовательский контент, отображаемый позже

Защищенный ввод по-прежнему может быть отображен позже внутри обычного Bubble Текстовый элемент. Пометьте контейнер отображения повторно используемым классом, например .gl-user-content , и добавьте его в основной элемент GoLocal do_not_translate_selectors. Для повторяющихся групп используйте класс/селектор вместо дублирования одного и того же идентификатора HTML в строках.

Поля, состояния и события

Поля

Querytext

Привязка к одному видимому входному значению Bubble.

Enabledyes/no

По умолчанию да. Если отключено, обрезанный текст проходит без изменений.

Debounce (ms)number

По умолчанию 180. Рекомендуемый диапазон для поиска — 150–250 мс.

Состояния

original_querytext

Точное значение, полученное от Bubble перед нормализацией.

normalized_querytext

Каноническое значение исходного языка для логики поиска или сравнения.

is_normalizingyes/no

Да, пока самый новый непустой запрос обрабатывается.

normalization_foundyes/no

Да, если найдено сопоставление исходного языка.

last_errortext

Сообщение о технической неисправности; пуст во время нормальной работы.

нормализовано

Срабатывает после завершения последнего запроса. Используйте его, когда рабочий процесс должен ожидать или копировать результат в пользовательское состояние.

normalization_failed

Срабатывает из-за технического сбоя. Необработанный запрос остается в качестве резервного варианта, а подробные сведения отображаются в last_error.

Устранение неполадок общих настроек Bubble

normalized_query всегда соответствует необработанному входному значению

Убедитесь, что основной элемент GoLocal! присутствует и готов, исходный язык проекта настроен правильно, а поле запроса привязано к предполагаемому входному значению. Неизвестная фраза может намеренно использовать необработанный текст в качестве безопасного запасного варианта.

Повторяющаяся группа кратко показывает предыдущий результат

Для строгой фильтрации показывайте состояние загрузки или запускайте окончательный поиск только тогда, когда состояние is_normalizing соответствующего элемента Query равно «Нет». Защита последовательности не позволяет более старому запросу заменить более новый результат.

Сохраненный заголовок или описание изменены

Рабочий процесс сохранения ссылается на normalized_query или переведенный отображаемый текст. Измените его обратно на исходное значение ввода, многострочного ввода или редактора форматированного текста. GoLocal Query предназначен только для логики сопоставления.

Два входа мешают друг другу

Дайте каждому независимому поисковому входу собственный элемент GoLocal Query. Не переключайте динамически один помощник между несвязанными входными данными.

Сторонний селектор не выполняет обратное сопоставление.

Автоматическая поддержка ограничена Bubble, SearchBox, Bubble Dropdown, устаревшими MultiDropdown и Select2 MultiDropdown. Если сторонний элемент управления предоставляет набранный текст в Bubble, подключите этот текст к выделенному элементу GoLocal Query.

Сохраненный пользовательский контент переводится при дальнейшем отображении

Добавьте повторно используемый класс, такой как .gl-user-content, в его контейнер отображения и включите этот селектор в do_not_translate_selectors в главном GoLocal!. элемент.

Ввод находится внутри повторяющейся группы

Не размещайте по одному элементу Query в каждой ячейке и не дублируйте идентификаторы HTML. Предпочитайте фильтрацию повторяющейся группы перед ее визуализацией; в противном случае оставьте помощник запроса вне повторяющейся группы и передайте в него одно выбранное/искомое значение.

Принятие контрольный список

  1. 1Выполните поиск одной и той же записи на английском и французском языках.
  2. 2Введите быстро и подтвердите, что старый результат никогда не заменяет новый.
  3. 3Очистите входные данные и подтвердите сброс повторяющейся группы.
  4. 4Переключите язык, пока входной нет пусто.
  5. 5Протестируйте два независимых ввода поиска на одной странице.
  6. 6Сохраните заголовок на французском языке с акцентами и убедитесь, что сохранен точный текст.
  7. 7Введите и вставьте в Quill; ни один путь не должен перезаписываться.
  8. 8Протестируйте неизвестный запрос и убедитесь, что необработанный резервный вариант сохраняет работоспособность страницы.
  9. 9Убедитесь, что в каждом рабочем процессе сохранения используется исходное входное значение.
  10. 10Подтвердите, что важные рабочие процессы на исходном языке ждут is_normalizing = no.

Правило быстрого принятия решения

При отображении и сохранении используйте Ввод. Каноническое сопоставление текста использует GoLocal Query.

Если Bubble может сравнивать вещь, опцию Option Set, идентификатор или стабильный код, используйте этот объект напрямую. Добавляйте GoLocal Query только в том случае, если переведенное текстовое значение в произвольной форме должно быть сопоставлено с каноническим текстом на исходном языке.