Error Message Localisation
Problem Definition:
All the error messages coming from the platform should be localised based on the configured language.
Key area to be analysed:
- Error Code Naming convention
- How to be called from different module
- How to segregate different code
Error Code Naming convention:
- Currently there is no particular naming convention, and the developer creates Error code as per there convention.
- There are multiple codes which are having same meaning.
- There should be a specific pattern to generate error code so that the redundancy of error code can be achieved.
- Proposed Pattern:
Response Code: ERR
Object Type: Object Type in capital case (Ex: CONTENT/FRAMEWORK)
API/Operation code: Called API/Operation code
Actual Code:
- eg: ERR_CONTENT_UPDATE_RESOURCE_NOT_FOUND
- Each module will have enum for actual error code. Based on error code data will be fetched from resource bundle and custom error code will be returned back with message.
- There can be some generic error code like CACHE_ERROR, CONNECTION_PROBLEM which will not need any custom naming conventions.
How to be called from different module:
- The error code can be passed from different module, therefor Error code Api should be available in different module which can be added as dependency.
- Each module will be having enum for error codes and there respective value will be fetched from property files based on configuration.
How to segregate different code:
- Need more analysis.
Below are few implement for internationalised error messaging system:
1. Java Resource Bundle
2. cal10n (few benefits are there, like - use Enum, testing the duplicity is simple through unit test)
3. spring Resource Bundle (ResourceBundleMessageSource)
4. resource4j (not very much clear idea, but did poc)
Java Resource Bundle:
- Java provides ResouceBundle library.
- No additional library required.
cal10n:
- Add dependency of cal10n-api
- Each module can have Error Enum
- Unit testing for duplicate key or missing key is easy
- Default implementation is easy
spring Resource Bundle:
- Add spring dependencies.
- ResourceBundleMessageSource can be used to resolve text messages from properties file.
- All the properties files are consider to be one.