package org.joget.commons.util; import java.io.IOException; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.List; import java.util.ArrayList; import org.joget.commons.spring.model.ResourceBundleMessageDao; import org.joget.commons.spring.model.ResourceBundleMessage; import org.springframework.web.multipart.MultipartFile; public class ResourceBundleUtil { private ResourceBundleMessageDao resourceBundleMessageDao; public void POFileImport(MultipartFile multipartFile, String locale) throws IOException { InputStream inputStream = multipartFile.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8")); List<ResourceBundleMessage> resourceBundleMessageList = new ArrayList<ResourceBundleMessage>(); ResourceBundleMessage resourceBundleMessage; String line = null, key = null, original = null, translated =null; while ((line = bufferedReader.readLine()) != null) { if(line.equalsIgnoreCase("") || line.length() == 0) continue; if(line.length() > 12 && line.substring(0, 11).equalsIgnoreCase("\"Language: ")){ //this is the locale locale = line.substring(11, line.length() -3); }else if(line.length() > 4 && locale != null && line.substring(0, 3).equalsIgnoreCase("#: ")){ //this is the key key = line.substring(3, line.length()); original = null; translated = null; }else if(line.length()> 8 && locale != null && key != null && line.substring(0,7).equalsIgnoreCase("msgid \"")){ //this is the original string original = line.substring(7, line.length() -1); }else if(line.length() > 9 && locale != null && key != null && original != null && line.substring(0,8).equalsIgnoreCase("msgstr \"")){ //this is the translated string translated = line.substring(8, line.length() -1); } if( key != null && original != null && translated != null){ //if this is a entry, insert into the list resourceBundleMessage = new ResourceBundleMessage(); resourceBundleMessage.setKey(key); resourceBundleMessage.setLocale(locale); resourceBundleMessage.setMessage(translated); resourceBundleMessageList.add(resourceBundleMessage); key = null; original = null; translated = null; } } bufferedReader.close(); if(resourceBundleMessageList.size() > 0) bulkUpdatePO(resourceBundleMessageList); } protected void bulkUpdatePO(List<ResourceBundleMessage> resourceBundleMessageList){ for( ResourceBundleMessage r : resourceBundleMessageList){ getResourceBundleMessageDao().saveOrUpdate(r); } } public ResourceBundleMessageDao getResourceBundleMessageDao() { return resourceBundleMessageDao; } public void setResourceBundleMessageDao(ResourceBundleMessageDao resourceBundleMessageDao) { this.resourceBundleMessageDao = resourceBundleMessageDao; } }