logo
03

Локализация

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

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

Значения свойств в локализованных формах не сериализуются в код, а сохраняются в отдельных ресурсах для каждой использованной культуры. Поэтому типы свойств должны быть сериализуемы, иначе дизайнер не сможет сохранить их.

Используйте атрибут Localizable с параметром true, чтобы указать, что данное свойство является локализуемым. Свойства, не предназначенные для пользователя, и не влияющие на отображение и расположение контрола, помечайте атрибутом [Localizable(false)], чтобы уменьшить объем ресурсов. Например, свойство object Tag { get; set; } обычно является нелокализуемым.

Помните о том, что существуют языки, в которых нормальным направлением текста является справа налево, например, Арабский или Иврит. Для этого существует свойство RightToLeft. Если в вашем контроле существует определенная ориентация представления информации, вам понадобится учитывать это свойство. Например, выравнивание текста по умолчанию производится к правой границе, полосы прокрутки расположены слева от контрола, информация о прогрессе (ProgressBar) отображаются справа налево и так далее.

Если в вашем контроле используется какой-либо вид выравнивания, используйте ContentAlignment для физического выравнивания, независимого от свойства RightToLeft. Используйте StringAlignment, если необходимо выравнивать строки и учитывать RightToLeft. При этом значение Near означает слева для RightToLeft.No и справа для RightToLeft.Yes, значение Far, соответственно, наоборот.