Настройка бэкенд локализации

Платформа Citeck поддерживает локализацию сообщений об ошибках на стороне сервера.

В микросервисе или библиотеке необходимо добавить файл со списком локализаций сообщений в resources/ecos/messages в формате:

{
    "id": "test-messages",
    "locales": [
        "en",
        "ru"
    ],
    "messages": {
        "label.yes": [
            "Yes",
            "Да"
        ],
        "label.no": [
            "No",
            "Нет"
        ],
        "server-error-occurred-with-code": [
            "Server error occurred. Error code: {{code}}",
            "Произошла ошибка на сервере. Код ошибки: {{code}}"
        ]
    }
}

Локализация сообщения должна располагаться в том же порядке, как указано в locales.

В текст можно подставлять параметры в формате:

{{param}}

Для обработки локализованной ошибки добавлено исключение I18nRuntimeException. Например:

throw I18nRuntimeException.create()
                .messageKey("label.yes")
                .build()

Пример с проставлением параметров:

throw I18nRuntimeException.create()
                .messageKey("server-error-occurred-with-code")
                .messageArgs(
                    mapOf(
                        "code" to 500
                    )
                )
                .build()

При обработке такого исключения в логи всегда пишется английская локализация. Если локализация не найдена, будет использоваться ключ сообщения. На клиент возвращается текст ошибки исходя из локализации в контексте запроса.