1 4 package com.openedit.modules.translations; 5 6 import java.util.ArrayList ; 7 import java.util.Iterator ; 8 import java.util.List ; 9 import java.util.Map ; 10 11 import org.openedit.repository.filesystem.StringItem; 12 13 import com.openedit.OpenEditException; 14 import com.openedit.WebPageRequest; 15 import com.openedit.modules.BaseModule; 16 import com.openedit.page.FileFinder; 17 import com.openedit.page.Page; 18 import com.openedit.page.PageProperty; 19 import com.openedit.page.PageSettings; 20 import com.openedit.util.PathUtilities; 21 import com.openedit.util.URLUtilities; 22 import com.openedit.web.Browser; 23 24 public class TranslationModule extends BaseModule 25 { 26 27 public Translation getTranslations(WebPageRequest inReq) throws OpenEditException 28 { 29 Translation trans = new Translation(); 30 31 init(inReq, trans); 33 34 inReq.putPageValue("pageManager",getPageManager()); 35 inReq.putPageValue("translations",trans); 36 return trans; 37 } 38 39 protected void init( WebPageRequest inReq, Translation inTrans ) throws OpenEditException 40 { 41 PageProperty prop = inReq.getPage().getPageSettings().getProperty("languages"); 43 44 if( prop != null) 45 { 46 for ( Iterator iter = prop.getValues().keySet().iterator(); iter.hasNext(); ) 47 { 48 String locale = (String )iter.next(); 49 String name = (String )prop.getValues().get(locale); 50 Language lang = new Language(); 51 lang.setPageManager(getPageManager()); 52 if( locale.length() == 0) 53 { 54 lang.setId("default"); 55 lang.setRootDirectory(""); 56 } 57 else 58 { 59 lang.setId(locale); 60 lang.setRootDirectory("/translations/" + locale); 61 } 62 lang.setName(name); 63 inTrans.addLanguage(lang); 64 } 65 inTrans.sort(); 66 Language browser = createBrowserLang(inReq); 67 inTrans.getLanguages().add(0,browser); 68 } 69 if( inTrans.getLanguages().size() == 0) 71 { 72 Language browser = createBrowserLang(inReq); 73 inTrans.getLanguages().add(browser); 74 Language lang = new Language(); 75 lang.setPageManager(getPageManager()); 76 lang.setId("default"); 77 lang.setName("Language: Use Default"); 78 lang.setRootDirectory(""); 79 inTrans.addLanguage(lang); 80 String done = (String )inReq.getSessionValue("defaultset"); 82 if( done == null) 83 { 84 inReq.putSessionValue("sessionlocale","default"); 85 inReq.putSessionValue("defaultset","true"); 86 } 87 } 88 String selectedLang = inReq.getLanguage(); 89 inTrans.setSelectedLang(selectedLang); 90 } 91 92 protected Language createBrowserLang(WebPageRequest inReq) 93 { 94 Language lang = new Language(); 95 lang.setPageManager(getPageManager()); 96 lang.setId("browser"); 97 Browser browser = (Browser)inReq.getPageValue("browser"); 98 if( browser != null) 99 { 100 lang.setName("Language: " + browser.getLocale() ); 101 } 102 lang.setRootDirectory(""); 103 return lang; 104 } 105 106 public void changeLanguage(WebPageRequest inReq) throws Exception 107 { 108 String newlang = inReq.getRequestParameter("newlang"); 109 getTranslations(inReq); 110 if( newlang != null) 111 { 112 if( newlang.equals("locale_browser")) 113 { 114 inReq.removeSessionValue("sessionlocale"); 115 } 116 else 117 { 118 String locale = newlang.substring("locale_".length()); 119 inReq.putSessionValue("sessionlocale", locale); 120 } 121 String orig = inReq.getRequestParameter("origURL"); 122 if( orig != null) 123 { 124 inReq.redirect(orig); 125 } 126 } 127 } 128 129 protected Language getEditingLanguage(WebPageRequest inReq) 131 { 132 String id = (String ) inReq.getSessionValue("editinglanguage"); 133 134 Translation trans = (Translation)inReq.getPageValue("translations"); 135 136 return trans.getLanguage(id); 137 } 138 139 140 public void selectElement(WebPageRequest inReq) throws Exception 141 { 142 String eid = inReq.getRequestParameter("elementid"); 143 if( eid != null) 144 { 145 Translation trans = (Translation)inReq.getPageValue("translations"); 146 Language lang = trans.getLanguage(eid); 147 inReq.putSessionValue("editinglanguage", lang.getId()); 148 } 149 } 150 public void deleteElement(WebPageRequest inReq) throws Exception 151 { 152 Translation trans = (Translation)inReq.getPageValue("translations"); 153 Language selectedlan = getEditingLanguage(inReq); 154 trans.removeLanguage(selectedlan); 155 save(trans, inReq); 156 inReq.putSessionValue("editinglanguage", null); 157 } 158 public void saveElement(WebPageRequest inReq) throws Exception 159 { 160 Translation trans = (Translation)inReq.getPageValue("translations"); 161 Language selectedlan = getEditingLanguage(inReq); 162 163 String id = inReq.getRequestParameter("id"); 164 selectedlan.setId(id); 165 String text = inReq.getRequestParameter("nametext"); 166 selectedlan.setName(text); 167 168 save(trans, inReq); 169 inReq.putPageValue("message", "save complete"); 170 } 171 172 protected void save(Translation inTrans, WebPageRequest inReq) throws OpenEditException 173 { 174 Page settings = getPageManager().getPage("/_site.xconf"); 175 176 String tagname = "languages"; 178 PageProperty props = props = new PageProperty(tagname); 179 180 for (Iterator iter = inTrans.getLanguages().iterator(); iter.hasNext();) 181 { 182 Language l = (Language) iter.next(); 183 if( !l.getId().equals("browser")) 184 { 185 if( l.getId().equals("default") ) 186 { 187 props.setValue(l.getName(), "" ); 188 } 189 else 190 { 191 props.setValue(l.getName(), l.getId()); 192 } 193 } 194 } 195 settings.getPageSettings().getProperties().put(tagname, props); 196 getPageManager().getPageSettingsManager().saveSetting(settings.getPageSettings()); 197 } 198 199 public void addElement(WebPageRequest inReq) throws Exception 200 { 201 Translation trans = (Translation)inReq.getPageValue("translations"); 202 Language lang = new Language(); 203 lang.setId("new"); 204 lang.setName("new"); 205 trans.addLanguage(lang); 206 inReq.putSessionValue("editinglanguage", lang.getId()); 207 save(trans, inReq); 208 } 209 210 public void autoTranslate(WebPageRequest inReq) throws Exception 211 { 212 String [] pageTypes = inReq.getRequestParameters("pagetype"); 213 214 if( pageTypes == null) 215 { 216 return; 217 } 218 Translation trans = (Translation)inReq.getPageValue("translations"); 219 String targetPage = inReq.getRequestParameter("targetpage"); 220 Page tarpage = getPageManager().getPage(targetPage); 221 List pages = null; 222 223 if( tarpage.isFolder() || targetPage.indexOf("*") > -1 ) 224 { 225 FileFinder finder = new FileFinder(); 226 finder.setRoot(getRoot()); 227 String recursive = inReq.getRequestParameter("includesubs"); 228 finder.setRecursive(Boolean.parseBoolean(recursive)); 229 finder.setPageManager(getPageManager()); 230 if( tarpage.isFolder() && targetPage.indexOf("*") == -1) 231 { 232 targetPage = targetPage + "*"; 233 } 234 finder.setUseMatches(true); 235 pages = finder.findPages(targetPage); 236 if( pages.size() == 0) 237 { 238 inReq.putPageValue("error", "No matches found " + targetPage); 239 } 240 } 241 else 242 { 243 pages = new ArrayList (1); 244 pages.add(tarpage); 245 } 246 inReq.putPageValue("foundpages", pages); 247 String targetLanguage = inReq.getRequestParameter("targetlanguage"); 248 for (int i = 0; i < pageTypes.length; i++) 249 { 250 String pageType = pageTypes[i]; 251 252 for (Iterator iter = pages.iterator(); iter.hasNext();) 253 { 254 Page page = (Page) iter.next(); 255 if( !page.isHtml() ) 256 { 257 continue; 258 } 259 if (targetPage != null && targetPage.length() > 0 && page.exists()) 260 { 261 if (pageType.equals("properties")) 262 { 263 PageSettings pageSettings = page.getPageSettings(); 264 Map properties = pageSettings.getProperties(); 265 266 List transList = trans.webTranslateProperties(properties, targetLanguage); 267 if( transList.size() > 0) 268 { 269 if (pageSettings.getPageCharacterEncoding() == null) 270 { 271 pageSettings.setPageCharacterEncoding("UTF-8"); 272 } 273 getPageManager().getPageSettingsManager().saveSetting(pageSettings); 274 275 inReq.putPageValue("transList", transList); 276 } 277 } 278 else if (pageType.equals("content")) 279 { 280 Language lang = trans.getLanguage(targetLanguage); 281 String translatedPath = PathUtilities.createDraftPath(lang.getRootDirectory() + page.getPath()); 282 Page translatedPage = getPageManager().getPage(translatedPath); 283 if (!translatedPage.exists() ) 284 { 285 String text = page.getContent(); 286 String translatedText = trans.webTranslate(text, targetLanguage); 287 translatedText = URLUtilities.xmlUnescape(translatedText); 288 289 StringItem translatedContent = new StringItem( translatedPath, translatedText, "UTF-8"); 291 translatedContent.setMessage( "Automatically Translated" ); 292 translatedContent.setAuthor(inReq.getUser().getUserName()); 293 page.setContentItem( translatedContent ); 294 getPageManager().putPage( page ); 295 inReq.putPageValue("transPage", translatedPath); 296 } 297 else 298 { 299 inReq.putPageValue("error", "The specified page already exists for that language (" + lang.getName() + ")."); 300 } 301 } 302 else 303 { 304 inReq.putPageValue("error", "You must specify whether you need either the page's properties or content translated."); 305 } 306 } 307 else 308 { 309 inReq.putPageValue("error", "The specified page does not exist."); 310 } 311 } 312 } 313 } 314 315 } 316 | Popular Tags |