Это типичная проблема для каждого приложения, желающего отобразить локализованное сообщение об ошибке с динамическими c данными-заполнителями. Проблема в том, что, когда ошибка проверки сервера, он пытается вернуть сообщение об ошибке с информацией Dynami c, без локализации, это прямо. Просто предварительно отформатируйте строку на стороне сервера, например:
{
errorCode: "FILE_SIZE_EXCEED_LIMIT",
errorMessage: "The file size exceeds the limit of 1Mb, actual size is 2Mb"
}
Однако, если мы хотим показать локализованное сообщение и предположить, что только у клиента есть контекст локали, то сервер должен вернуть параметры Dynami c без предварительно отформатированного сообщения. Я могу придумать несколько способов решить эту проблему.
1. Используйте массив для передачи параметров:
{
errorCode: "FILE_SIZE_EXCEED_LIMIT",
errorData: ["1Mb", "2Mb"]
}
Шаблон сообщения локализации клиента будет:
The file size exceeds the limit of {0}, actual size is {1}
Хорошая часть этого дизайна проста , но это зависит от порядка, значение данных не ясно. Как может клиент-разработчик понять, что первым параметром является ограничение.
2. Используйте карту для передачи параметра:
{
errorCode: "FILE_SIZE_EXCEED_LIMIT",
errorData: {limit:"1Mb", actual:"2Mb"}
}
Шаблон сообщения о локализации клиента будет:
The file size exceed limit of {limit}, actual size is {actual}
Таким образом, из ответа API Мы можем ясно видеть значение каждого параметра.
Любое лучшее решение?
Однако оба решения не идеальны, поскольку существует неявная схема, клиент должен знать, какие параметры доступны для каждого errorCode. Мы можем использовать документацию для передачи этой информации. Но это не идея и не подвержена ошибкам.
Есть ли лучшее решение этой классической c проблемы?