Имена в разных странах устроены не одинаково, и форма, спроектированная по одному образцу, ломается на первом же человеке из другого места. Порядок частей, их количество, допустимые знаки и даже правила перевода в верхний регистр различаются настолько, что привычное деление на имя и фамилию перестаёт работать. Ниже разберём, какие конструкции встречаются, почему одно имя — это нормально и как подготовить тестовые данные, которые действительно проверят поле ввода.
Порядок частей имени
В значительной части мира первым пишут личное имя, а фамилию — после. Но есть крупные исключения: в Восточной Азии и в Венгрии принят обратный порядок, сначала фамилия, потом имя. Это не мелочь оформления: приложение, которое автоматически считает второе слово фамилией, во второй культуре перепутает всё.
Полезно посмотреть, как это выглядит на конкретных страницах: например, в описании данных для Японии и данных для Венгрии порядок частей отличается от привычного западного. Если форма собирает имя для международной аудитории, разумнее не угадывать порядок, а показывать его так, как человек его ввёл, и не переставлять части самостоятельно.
Когда у человека только одно имя
Ещё одно распространённое заблуждение — что у каждого есть и имя, и фамилия. Во многих культурах человек может законно носить одно имя, а в некоторых странах устойчивая традиция обходиться без фамилии вообще. Бывает и так, что фамилия есть, но она не передаётся по наследству: ребёнок получает имя по родителю, и семья носит разные фамилии.
Отсюда требование к полю ввода: оно не должно быть обязательным для второго слова. Форма, которая не принимает запись из одного слова, отказывает реальным людям, а форма, которая подставляет прочерк, портит их данные в базе.
Отчества, двойные и составные фамилии
Отчество — отдельная часть имени, которая указывает на родителя и используется в обращении. Оно не является ни именем, ни фамилией, и попытка уместить его в одно из двух полей искажает запись. В некоторых языках аналог отчества строится иначе, а иногда оно вообще не используется.
С отчеством связана и отдельная тема — обращение к человеку. В одних языках в письме уместно назвать человека по имени и отчеству, в других — по фамилии с уважительным словом, в третьих достаточно личного имени. Система, которая собирает приветствие из первого слова сохранённой записи, в культурах с обратным порядком поприветствует человека его фамилией. Если обращение формируется автоматически, эту часть имени лучше запрашивать отдельно или не собирать её вовсе.
Двойные и составные фамилии — ещё один источник путаницы. В испаноязычных странах человек традиционно носит две фамилии, и обе значимы. В других местах двойная фамилия образуется через дефис, и дефис становится частью значения, а не разделителем. Порядок частей в такой фамилии может меняться после брака, оставаясь той же фамилией. Для системы это означает, что фамилию нельзя разбивать на части по пробелу или дефису, не потеряв смысл.
Что делать с диакритикой и разными алфавитами?
Диакритические знаки — часть имени, а не украшение. Если система удаляет их при сохранении, человек перестаёт находить себя в списке, а письмо приходит с искажённым именем. То же касается букв, которых нет в английском алфавите.
С переводом между алфавитами сложнее. Одно и то же имя может передаваться латиницей по-разному: в разных странах действуют разные правила транслитерации, а иногда человек выбирает написание сам, и оно не совпадает ни с одним стандартом. Поэтому две записи, которые выглядят разными, могут относиться к одному человеку, и наоборот.
На практике это видно в документах для поездок. В паспорте, в билете и в брони гостиницы имя одного человека может быть записано латиницей тремя несовпадающими способами, потому что правила перевода различаются, а иногда написание выбирает сам человек. Система, которая считает такие записи разными людьми, создаёт двойников на ровном месте и рассылает одному человеку три разных уведомления.
Почему имена нельзя сравнивать как обычный текст?
Потому что одинаковые на вид строки могут быть разными последовательностями символов. Одна и та же буква с диакритикой записывается двумя способами: единым знаком или как буква плюс отдельный знак. Компьютер видит разные строки, хотя глаза читают одно и то же.
К этому добавляются правила регистра. В одних языках заглавная буква образуется по общему правилу, в других у букв есть пары, которые не совпадают с ожидаемыми, и привычное приведение к нижнему регистру даёт неверный результат. Сортировка тоже зависит от языка: буква с диакритикой в одном алфавите идёт рядом с базовой, а в другом считается отдельной.
Как получить имена для нужной страны
В генераторе данных личности имена подбираются под выбранную страну или регион: учитывается порядок частей, допустимые знаки и привычные сочетания. Вместе с именем приходят дата рождения, номер документа, адрес и контакты из той же записи, поэтому набор остаётся согласованным. Один и тот же ключ личности возвращает ту же самую запись, что удобно для проверок отображения: длинное имя или имя без фамилии можно закрепить в наборе и сравнивать снимки экрана между запусками, не завися от случайности.
Все сгенерированные значения синтетические и созданы только для тестирования. Они не принадлежат реальным людям, и использовать их, чтобы выдать себя за человека или пройти проверку личности, нельзя.
Что важно разработчику: поля, нормализация, сортировка
Главная ошибка — пытаться уместить имя всего мира в два поля: личное имя и фамилию. Такая схема теряет отчества, вторые фамилии и однословные имена. Практичнее хранить одну строку полного имени, как его ввёл человек, и добавлять структурные поля только там, где они действительно нужны для дела.
Второе — нормализация. Перед сравнением строк приведите обе к одной форме записи символов, иначе поиск не найдёт то, что заведомо есть в базе. Но не удаляйте диакритику при сохранении: нормализация нужна для сравнения, а хранится значение в том виде, в котором его дал человек.
Отдельно проверьте длину поля. Предел, подобранный по привычному образцу, легко оказывается коротким: составные имена с несколькими компонентами перерастают его без всякого злого умысла, а обрезание человек замечает не сразу. Задайте щедрый предел и убедитесь, что он выдерживает самую длинную запись из вашего набора, а не только среднюю.
Третье — сортировка и регистр по правилам языка, а не по общим. Если список сортируется по фамилии, проверьте, что в культурах с обратным порядком это действительно та часть, которую вы берёте. И четвёртое: держите в тестовом наборе запись без фамилии, запись из одного слова, длинное составное имя и имя с диакритикой. Эти четыре образца ломают вёрстку и проверки чаще, чем любые другие. Как такие образцы уживаются с остальными полями записи, разобрано в статье про согласованность полей.
Что важно учесть при подготовке тестовых данных:
- Отдельно проверьте длину поля: задайте щедрый предел и убедитесь, что он выдерживает самую длинную запись из вашего набора
- Перед сравнением строк приведите обе к одной форме записи символов, но не удаляйте диакритику при сохранении
- Сортировка и регистр должны идти по правилам языка, а не по общим
- Держите в тестовом наборе запись без фамилии, запись из одного слова, длинное составное имя и имя с диакритикой
Что делать дальше
Посмотрите на своё поле имени и проверьте, проходит ли через него запись из одного слова и запись с двумя фамилиями. Если нет, добавьте обе в набор и сгенерируйте остальные данные в генераторе, выбрав страну, для которой вы обычно не готовите тесты.