При проектировании поддержки мультиязычности необходимо помнить несколько вещей:
1 - Отделение кода от данных (т. Е. Не кодировать строки напрямую в ваши функции)
2 - создать функцию ловушки форматирования для обработки различий в локализации. Разрешение форматируемых строк ( "{0}" ) лучше конкатенации ( "Welcome to" + value ) по многим причинам:
- на некоторых языках число форматируется как 1,234,678,00 вместо 1,234,567,00
- множественное число часто не так просто, как добавление "s" в конце единственного числа
- правила грамматики различны и могут влиять на порядок вещей, поэтому вы должны разрешить добавление динамических данных после ловушки перевода: например, "Welcome to {0}" превращается в " {0} he youkoso " по-японски (заметьте, это происходит почти на каждом языке).
3 - Убедитесь, что вы действительно можете отформатировать строки после запускается ловушка перевода, чтобы вы могли повторно использовать ключи.
4 - Ни при каких обстоятельствах не подключайте выходные данные базы данных к утилите переводчика . Если у вас есть многоязычные данные, создайте отдельные таблицы / строки в вашей базе данных. Я видел, как люди довольно часто ошибаются (обычно для стран и штатов / провинций в формах).
5 - Создание явных правил практики кодирования для создания ключей. Функция утилиты форматирования (которая будет выглядеть примерно так: translate ("hello world") будет принимать ключ в качестве параметра, а ключи с небольшими изменениями делают обслуживание очень раздражающим. Например, вы можете получить три ключи в следующем примере: «введите свое имя», «введите свое имя:», «введите свое имя:». Выберите один формат (например, без двоеточия, обрезанный) и обнаруживайте расхождения в проверках кода. Не выполняйте эту фильтрацию программно , так как это может вызвать ложные срабатывания.
6. Помните, что HTML-разметка потенциально может потребоваться в таблице перевода (например, если вам нужно выделить слово в предложении или иметь медицинские сноски). Проверьте это экстенсивно.
7 - Есть несколько способов импорта языковых строк. В идеале у вас должно быть несколько версий файла language.lang.js, переключаться между ними с помощью кода на стороне сервера и ссылаться на файл в нижней части HTML-файла. Извлечение файла через AJAX также является альтернативой, но может привести к задержкам. Встраивать language.js в ваш основной файл кода не рекомендуется, так как вы теряете преимущества кеширования файлов.
8 - Тестирование с вашими целевыми языками. Это звучит глупо, но я однажды видел серьезную ошибку, потому что программист не удосужился проверить наличие "é" в ключе.