Правильная локализация

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

Недавно делал локализацию (поддержку многих языков в приложении) и понял что делал ее неверно, даже несмотря на то что с самого начала разработки софта продумал как она будет сделана. Казалось бы, что может быть проще, но только теперь для меня стало понятно как она должна выглядеть. Можно уложить это в небольшой список рекомендаций:

Структура:

  1. Локализованные (переведённые) строки должны храниться во внешнем файле открытого формата (txt или xml например)
  2. Новый язык нужно мочь подключать без перекомпиляции кода
  3. Приложение должно уметь на любом этапе исполнения переключать язык, перечитать строки из файла и “перерисовать” весь интерфейс
  4. Любая функция по выводу текста должна вызывать функцию вида GetLocalText(string Token), где токен – идентификатор выводимой строчки
  5. Необязательно: Хорошо бы разбить строки по группам и написать маленькую утилитку для их быстрого редактирования и перевода.

Для чего все это нужно, если есть стандартные методы локализации? Не вижу смысла в файлах ресурсов, в формате непонятном простым смертным пользователям, которые могут захотеть перевести ваш продукт на свой язык. Любой пользователь должен уметь перевести интерфейс и видеть изменения, которые он делает, сразу в интерфейсе, без перекомпиляции и перезапусков. Конечно лучше воспользоваться услугами профессиональных переводчиков, но это не всегда реально.

Актуальны еще рекомендации по языку ресурсных строчек, которые можно найти в MSDN.

Язык:

  1. Не разбивайте фразы на куски, переводчику будет трудно понять как именно эти куски переводить
  2. Аналогично нельзя использовать отдельно многозначные термины или слова, которые могут быть глаголом и существительным одновременно
  3. Учтите, что при переводе размер надписей может увеличиться процентов на 50-75%. Это самая существенная проблема в компактных интерфейсах.

Эти проблемы как раз и призвана решить возможность оперативного просмотра результатов своей работы переводчиком.