Skip to content

Instantly share code, notes, and snippets.

@jonikarppinen
Last active February 23, 2021 23:36
Show Gist options
  • Star 18 You must be signed in to star a gist
  • Fork 11 You must be signed in to fork a gist
  • Save jonikarppinen/0d600b0c82edce890310 to your computer and use it in GitHub Desktop.
Save jonikarppinen/0d600b0c82edce890310 to your computer and use it in GitHub Desktop.
Example of using message resources in Spring Boot service layer code, in as simple way as possible (hopefully!). NOTE: this approach supports only a single locale, not dynamically changing it.
package com.company.project.components;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Locale;
/**
* Helper to simplify accessing i18n messages in code.
*
* This finds messages automatically found from src/main/resources (files named messages_*.properties)
*
* This example uses hard-coded English locale.
*
* @author Joni Karppinen
* @since 2015-11-02
*/
@Component
public class Messages {
@Autowired
private MessageSource messageSource;
private MessageSourceAccessor accessor;
@PostConstruct
private void init() {
accessor = new MessageSourceAccessor(messageSource, Locale.ENGLISH);
}
public String get(String code) {
return accessor.getMessage(code);
}
}
default.title = Title
package com.company.project.services;
import com.company.project.components.Messages;
import org.springframework.beans.factory.annotation.Autowired;
@Service
public class SomeServiceImpl implements SomeService {
@Autowired
Messages messages;
// ...
private String getDefaultTitle() {
return messages.get("default.title"));
}
}
@tshavkat
Copy link

tshavkat commented Apr 30, 2020

Im getting NullPointerException that MessageSource is null

@Umit-Soylu
Copy link

Can you provide a simple unit test for this configuration? I cannot generate a dynamic locale change via this configuration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment