Для простоты у меня есть UserControl с ярлыком на нем, и я хочу, чтобы текст ярлыка был локализуемым. Внутри UserControl я создал публичное свойство LabelText, чтобы получить/установить текст метки.
Это код моего UserControl
Imports System.ComponentModel
Public Class ctlA
<Browsable(True), _
EditorBrowsable(EditorBrowsableState.Always), _
Localizable(True), _
DefaultValue("dafaultLabel"), _
DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
Private _LabelText As String = "label"
Public Property LabelText() As String
Get
Return _LabelText
End Get
Set(ByVal value As String)
_LabelText = value
Label1.Text = value
End Set
End Property
End Class
Я могу вставить UserControl в форму, но я не могу локализовать свойство LabelText, когда я выбираю другой язык для своей формы.
Что делать, чтобы сделать свойство LabelText локализуемым?
Я отвечу на свой вопрос после нескольких часов проб и ошибок.
Рабочий код, который поддерживает локализацию UserControl, таков:
Imports System.ComponentModel
Public Class ctlA
Private _LabelText As String = "label"
<Localizable(True)>
Public Property LabelText() As String
Get
Return _LabelText
End Get
Set(ByVal value As String)
_LabelText = value
Label1.Text = value
End Set
End Property
End Class
Вы локализуете UserControl точно так же, как локализуете форму. Вы устанавливаете для свойства Localizable
значение true и укажите язык. Локализация происходит во время выполнения. Прохождение этого процесса доступно здесь.
Что касается локализации пользовательских свойств, вы уже сделали все, добавив атрибут Localizable
в свое определение.
Проблема здесь в том, что UserControl в форме обрабатывается независимо от формы контейнера. Он не наследует настройки локализации формы, вы должны установить UserControl отдельно.