KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > openedit > modules > translations > TranslationModule


1 /*
2  * Created on Dec 6, 2005
3  */

4 package com.openedit.modules.translations;
5
6 import java.util.ArrayList JavaDoc;
7 import java.util.Iterator JavaDoc;
8 import java.util.List JavaDoc;
9 import java.util.Map JavaDoc;
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         //get the languages
32
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         //#set( $languages = $page.getPageSettings().getProperty("languages") )
42
PageProperty prop = inReq.getPage().getPageSettings().getProperty("languages");
43
44         if( prop != null)
45         {
46             for ( Iterator JavaDoc iter = prop.getValues().keySet().iterator(); iter.hasNext(); )
47             {
48                 String JavaDoc locale = (String JavaDoc)iter.next();
49                 String JavaDoc name = (String JavaDoc)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         //This is for transition for people who do not have languages setup yet or upgrades
70
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             //TODO: remove this section
81
String JavaDoc done = (String JavaDoc)inReq.getSessionValue("defaultset");
82             if( done == null)
83             {
84                 inReq.putSessionValue("sessionlocale","default");
85                 inReq.putSessionValue("defaultset","true");
86             }
87         }
88         String JavaDoc 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 JavaDoc
107     {
108         String JavaDoc 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 JavaDoc locale = newlang.substring("locale_".length());
119                 inReq.putSessionValue("sessionlocale", locale);
120             }
121             String JavaDoc orig = inReq.getRequestParameter("origURL");
122             if( orig != null)
123             {
124                 inReq.redirect(orig);
125             }
126         }
127     }
128     
129     //for editing
130
protected Language getEditingLanguage(WebPageRequest inReq)
131     {
132         String JavaDoc id = (String JavaDoc) 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 JavaDoc
141     {
142         String JavaDoc 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 JavaDoc
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 JavaDoc
159     {
160         Translation trans = (Translation)inReq.getPageValue("translations");
161         Language selectedlan = getEditingLanguage(inReq);
162
163         String JavaDoc id = inReq.getRequestParameter("id");
164         selectedlan.setId(id);
165         String JavaDoc 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         //depends on the language we are editing in
177
String JavaDoc tagname = "languages";
178         PageProperty props = props = new PageProperty(tagname);
179     
180         for (Iterator JavaDoc 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 JavaDoc
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 JavaDoc
211     {
212         String JavaDoc[] pageTypes = inReq.getRequestParameters("pagetype");
213         
214         if( pageTypes == null)
215         {
216             return;
217         }
218         Translation trans = (Translation)inReq.getPageValue("translations");
219         String JavaDoc targetPage = inReq.getRequestParameter("targetpage");
220         Page tarpage = getPageManager().getPage(targetPage);
221         List JavaDoc pages = null;
222         
223         if( tarpage.isFolder() || targetPage.indexOf("*") > -1 )
224         {
225             FileFinder finder = new FileFinder();
226             finder.setRoot(getRoot());
227             String JavaDoc 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 JavaDoc(1);
244             pages.add(tarpage);
245         }
246         inReq.putPageValue("foundpages", pages);
247         String JavaDoc targetLanguage = inReq.getRequestParameter("targetlanguage");
248         for (int i = 0; i < pageTypes.length; i++)
249         {
250             String JavaDoc pageType = pageTypes[i];
251             
252             for (Iterator JavaDoc 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 JavaDoc properties = pageSettings.getProperties();
265                 
266                         List JavaDoc 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 JavaDoc translatedPath = PathUtilities.createDraftPath(lang.getRootDirectory() + page.getPath());
282                         Page translatedPage = getPageManager().getPage(translatedPath);
283                         if (!translatedPage.exists() )
284                         {
285                             String JavaDoc text = page.getContent();
286                             String JavaDoc translatedText = trans.webTranslate(text, targetLanguage);
287                             translatedText = URLUtilities.xmlUnescape(translatedText);
288         
289                             //TODO: We shouldn't assume UTF-8, but who is using anything else for multi-lingual support right now?
290
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