Локализация

Все надписи, которые показывают компоненты, берутся из пакета сообщений дополнения: подсказка в поле ввода сообщений, доступные имена его кнопок, баннер ошибки и его кнопка Retry, действия копирования и переноса строк в блоке кода, переключатель Show more длинного сообщения. Изменить их можно двумя способами, и эти способы можно использовать вместе.

Изменение всех чатов

Ключи дополнения сгруппированы по компонентам:

Группа ключей Что охватывает

aiChat.i18n.*

Собственные объявления чата о ходе генерации, которые зачитываются программами чтения с экрана.

aiMessageInput.i18n.*

Поле ввода сообщений: подсказка, отправка, остановка, прикрепление файла и сообщения, которые показываются при отклонении файла.

aiMessageList.i18n.*

Список сообщений: баннер ошибки, повтор, прокрутка вниз, копирование и переключатель свертывания.

aiCodeBlock.i18n.*

Блок кода: копирование, сообщение о копировании и две надписи переноса строк.

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

aiChat.i18n.generating=Generating the answer
aiMessageInput.i18n.send=Send the message

Так же выполняется и перевод компонентов: определите ключи в пакете сообщений для каждой локали, как для любого другого сообщения Jmix.

Изменение одного чата

Вложенный элемент i18n меняет тексты одного экземпляра. В aiChat он повторяет дерево компонентов: атрибуты самого элемента относятся к чату, а вложенные элементы messageInput, messageList и codeBlock относятся к частям, из которых он состоит:

XML
<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.

Приоритет

Два механизма применяются по уровням, и более конкретный уровень имеет приоритет:

  1. Пакет сообщений дополнения задает все надписи.

  2. Ключ, переопределенный в пакете сообщений приложения, заменяет надпись везде.

  3. Атрибут вложенного элемента i18n заменяет надпись для одного экземпляра.

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