Рекомендации по написанию программного обеспечения, потребляемого на международном уровне (i18n)
Я ищу мнения экспертов, которые пишут программное обеспечение, потребляемое на международном уровне. Я хотел бы понять, какие практические навыки используются людьми на каждом уровне логического softare (данные (rdbms), бизнес (промежуточное ПО), пользовательский интерфейс).
Спасибо за любую помощь, которую вы можете дать.
Ответы
Ответ 1
Данные
- Когда вы переходите на UTF-8, будьте готовы к тому, что символы будут занимать до 3 байтов каждый (в случае с китайцами), а это значит, что VARCHAR (20) теперь должен быть VARCHAR (60).
- Если у вас действительно нет веских оснований для этого, ради любви к Богу, не сохраняйте свои переводы пользовательского интерфейса в БД.
Бизнес
- Проводите много времени на требования. В качестве отправной точки сделайте снимок экрана для каждого отдельного экрана в вашем приложении, поместите его в документ и начните рисовать окна вокруг вещей, которые нуждаются в поддержке i18n. Затем сопоставьте каждый из этих полей с областью кода, которая должна быть изменена.
Пользовательский интерфейс
Dont
string foo = "Page " + currentPage + " of " + totalPages;
Do
string foo = string.Format("Page {0} of {1}", currentPage, totalPages);
Почему? Вопросы Word Order.
<value>Page {0} of {1}</value>
<value>{1}ページ中の第{0}ページ</value>
Ничто не является священным в пользовательском интерфейсе
Даже что-то столь же фундаментальное, как отображение зеленого цвета для положительных чисел и красного для отрицательных чисел, честная игра.
Ответ 2
Убедитесь, что в элементах управления пользовательского интерфейса имеется много свободного места. Текст имеет тенденцию становиться намного длиннее при переводе с английского на французский или немецкий.
Хотя он несколько сфокусирован на стороне Windows i18n, обратите внимание на блог Майкла Каплана. Он очень хорошо разбирается в этой области и опубликовал много сообщений в блогах, содержащих полезные полезные материалы.
Ответ 3
Вы можете написать книгу об этой теме.
Во всех слоях не делайте предположений о:
- ширина текста
- направленность текста
- токенизация естественного языка
- валюта (формат, десятичная точность, налогообложение и т.д.)
- грамматика и правописание
- алфавиты
- числовые системы и форматирование
- порядок сортировки
- даты, время, часовые пояса и календари
- социальные соглашения или культурные ссылки (значки, флаги и т.д.).
- поиск
- капитализация
- адрес
- собственные имена (имя/фамилия и т.д.)
- номера телефонов
- правовые/нормативные требования
- использование номеров социального страхования или других локальных соглашений
Я уверен, что только царапаю поверхность.
Ответ 4
Unicode (или wchar, или любой другой его эквивалент в < языке выбора > ) есть везде. Не храните метки в базе данных. Будьте готовы разрешить текст и элементы управления "неправильно", т.е. Право налево.
Ответ 5
Для локализации не стройте строки UI. Используйте что-то вроде gettext.
Ответ 6
Если вы используете .Net, система файлов ресурсов (.resx) очень гибкая.
Посмотрите способы использования ResourceManager.GetString( "string name", CultureInfo).
Мы используем эту систему для успешного перевода между английским, немецким, французским, испанским, русским и арабским языками.
Также, рассматривая использование в зарубежных локалях, потратьте некоторое время на ввод и вывод; Турецкая проблема - хороший пример того, как разные входы могут вызвать проблемы.