Водится за мной такой недостаток, люблю изобрести велосипед… Временами это плохо отражается на результате, но ничего не могу с собой поделать. С другой стороны, иногда, велосипед дорабатывается до мощного мотоцикла…
Недавно делал локализацию (поддержку многих языков в приложении) и понял что делал ее неверно, даже несмотря на то что с самого начала разработки софта продумал как она будет сделана. Казалось бы, что может быть проще, но только теперь для меня стало понятно как она должна выглядеть. Можно уложить это в небольшой список рекомендаций:
Структура:
- Локализованные (переведённые) строки должны храниться во внешнем файле открытого формата (txt или xml например)
- Новый язык нужно мочь подключать без перекомпиляции кода
- Приложение должно уметь на любом этапе исполнения переключать язык, перечитать строки из файла и “перерисовать” весь интерфейс
- Любая функция по выводу текста должна вызывать функцию вида GetLocalText(string Token), где токен – идентификатор выводимой строчки
- Необязательно: Хорошо бы разбить строки по группам и написать маленькую утилитку для их быстрого редактирования и перевода.
Для чего все это нужно, если есть стандартные методы локализации? Не вижу смысла в файлах ресурсов, в формате непонятном простым смертным пользователям, которые могут захотеть перевести ваш продукт на свой язык. Любой пользователь должен уметь перевести интерфейс и видеть изменения, которые он делает, сразу в интерфейсе, без перекомпиляции и перезапусков. Конечно лучше воспользоваться услугами профессиональных переводчиков, но это не всегда реально.
Актуальны еще рекомендации по языку ресурсных строчек, которые можно найти в MSDN.
Язык:
- Не разбивайте фразы на куски, переводчику будет трудно понять как именно эти куски переводить
- Аналогично нельзя использовать отдельно многозначные термины или слова, которые могут быть глаголом и существительным одновременно
- Учтите, что при переводе размер надписей может увеличиться процентов на 50-75%. Это самая существенная проблема в компактных интерфейсах.
Эти проблемы как раз и призвана решить возможность оперативного просмотра результатов своей работы переводчиком.