spring國際化: 從數據庫中讀取國際化資源
阿新 • • 發佈:2018-10-30
.get english 語言 creat 文本 讀取 implement 獲取 ram
public class MessageResource extends AbstractMessageSource implements ResourceLoaderAware, InitializingBean { @SuppressWarnings("unused") private ResourceLoader resourceLoader = null; @Autowired private Sys_resourcesService sys_resourcesService = null; private final String MAP_SPLIT_CODE = "|"; private final Map<String, String> properties = new HashMap<String, String>(); public MessageResource(){ } @Override public void afterPropertiesSet() throws Exception { System.out.println("中國大陸:語言:" + Locale.SIMPLIFIED_CHINESE.getLanguage() +", 國家"); System.out.println("臺灣:語言:" + Locale.TAIWAN.getLanguage()); properties.clear(); properties.putAll(loadTexts()); } /** * 讀取資源信息 * @return */ private List<Resource> getResource(){ return sys_resourcesService.findAll(); } /** * 加載數據 * @return */ protected Map<String, String> loadTexts(){ Map<String, String> mapResource = new HashMap<String, String>(); List<Resource> resources = this.getResource(); for (Resource item : resources) { String code = item.getRskey() + MAP_SPLIT_CODE + item.getLanguage(); mapResource.put(code, item.getText()); } System.out.println("國際化資源加載完畢.共"+resources.size()+"條."); return mapResource; } /** * 獲取文本 * @param code * @param locale 本地化語言 * @return */ private String getText(String code, Locale locale){ String localeCode = locale.getLanguage(); if(localeCode != null && localeCode.toUpperCase().equals(R.lan.ZH)){ if(locale.getCountry().toUpperCase().equals(R.lan.CN)){ localeCode = R.lan.CN.toLowerCase(); }else{ localeCode = R.lan.TW.toLowerCase(); } } String key = code + MAP_SPLIT_CODE + localeCode; String localeText = properties.get(key); String resourceText = code; if(localeText != null && !"".equals(localeText)) { resourceText = localeText; }else{ localeCode = Locale.ENGLISH.getLanguage(); key = code + MAP_SPLIT_CODE + localeCode; localeText = properties.get(key); if(localeText != null && !"".equals(localeText)) { resourceText = localeText; }else{ try{ if(getParentMessageSource() != null) { resourceText = getParentMessageSource().getMessage(code, null, locale); } }catch(Exception e) { logger.error("找不到對應的消息, code: " + code); } } } return resourceText; } @Override public void setResourceLoader(ResourceLoader resourceLoader){ this.resourceLoader = (resourceLoader != null ? resourceLoader : new DefaultResourceLoader()); } @Override protected MessageFormat resolveCode(String code, Locale locale){ String msg = getText(code, locale); MessageFormat result = createMessageFormat(msg, locale); return result; } @Override protected String resolveCodeWithoutArguments(String code, Locale locale){ String result = getText(code, locale); return result; } }
spring國際化: 從數據庫中讀取國際化資源