Локализация
Все надписи, которые показывают компоненты, берутся из пакета сообщений дополнения: подсказка в поле ввода сообщений, доступные имена его кнопок, баннер ошибки и его кнопка Retry, действия копирования и переноса строк в блоке кода, переключатель Show more длинного сообщения. Изменить их можно двумя способами, и эти способы можно использовать вместе.
Изменение всех чатов
Ключи дополнения сгруппированы по компонентам:
| Группа ключей | Что охватывает |
|---|---|
|
Собственные объявления чата о ходе генерации, которые зачитываются программами чтения с экрана. |
|
Поле ввода сообщений: подсказка, отправка, остановка, прикрепление файла и сообщения, которые показываются при отклонении файла. |
|
Список сообщений: баннер ошибки, повтор, прокрутка вниз, копирование и переключатель свертывания. |
|
Блок кода: копирование, сообщение о копировании и две надписи переноса строк. |
Переопределите любой из них в пакете сообщений приложения, и все компоненты в приложении будут использовать новое значение:
aiChat.i18n.generating=Generating the answer
aiMessageInput.i18n.send=Send the message
Так же выполняется и перевод компонентов: определите ключи в пакете сообщений для каждой локали, как для любого другого сообщения Jmix.
Изменение одного чата
Вложенный элемент i18n меняет тексты одного экземпляра. В aiChat он повторяет дерево компонентов: атрибуты самого элемента относятся к чату, а вложенные элементы messageInput, messageList и codeBlock относятся к частям, из которых он состоит:
<aichat:aiChat id="chat" width="100%" height="100%">
<aichat:i18n generating="msg://chat.generating"
failed="msg://chat.failed">
<aichat:messageInput placeholder="msg://chat.placeholder"
send="msg://chat.send"/>
<aichat:messageList retry="msg://chat.retry"
showMore="msg://chat.showMore">
<aichat:codeBlock copy="msg://chat.codeCopy"
wrapOn="msg://chat.codeWrapOn"/>
</aichat:messageList>
</aichat:i18n>
</aichat:aiChat>
com.company.demo.view.localization/chat.generating=Working on it
com.company.demo.view.localization/chat.failed=That did not work
com.company.demo.view.localization/chat.placeholder=Ask about this ticket
com.company.demo.view.localization/chat.send=Send the question
com.company.demo.view.localization/chat.retry=Try again
com.company.demo.view.localization/chat.showMore=Read the whole question
com.company.demo.view.localization/chat.codeCopy=Copy this snippet
com.company.demo.view.localization/chat.codeWrapOn=Wrap the lines
Те же элементы доступны в самих компонентах, когда они используются отдельно. См. aiMessageInput, aiMessageList и aiCodeBlock.
Приоритет
Два механизма применяются по уровням, и более конкретный уровень имеет приоритет:
-
Пакет сообщений дополнения задает все надписи.
-
Ключ, переопределенный в пакете сообщений приложения, заменяет надпись везде.
-
Атрибут вложенного элемента
i18nзаменяет надпись для одного экземпляра.
Элемент переопределяет только то, что в нем указано: надпись, которую вы не объявили, сохраняет значение с предыдущего уровня, а пустой элемент i18n ничего не меняет. Поэтому чат, в котором i18n не объявлен совсем, все равно показывает переопределения на уровне приложения, а чат, в котором он объявлен, показывает формулировки приложения для всех надписей, которые в элементе не указаны.