1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.gui.i18n;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.gui.control.Control;
38 import info.magnolia.cms.gui.control.Select;
39 import info.magnolia.cms.gui.dialog.Dialog;
40 import info.magnolia.cms.gui.dialog.DialogControlImpl;
41 import info.magnolia.cms.i18n.I18nContentSupport;
42 import info.magnolia.cms.i18n.I18nContentSupportFactory;
43
44 import java.util.List;
45 import java.util.Locale;
46
47 import info.magnolia.cms.util.BooleanUtil;
48 import info.magnolia.context.MgnlContext;
49 import info.magnolia.link.LinkUtil;
50
51 import org.apache.commons.lang.LocaleUtils;
52 import org.apache.commons.lang.StringUtils;
53
54
55
56
57
58
59
60 public class DefaultI18nAuthoringSupport implements I18nAuthoringSupport {
61
62 private final I18nContentSupport i18nContentSupport;
63 private boolean enabled = false;
64
65 public DefaultI18nAuthoringSupport() {
66 this.i18nContentSupport = I18nContentSupportFactory.getI18nSupport();
67 }
68
69 public Control getLanguageChooser() {
70 if (isEnabled() && i18nContentSupport.isEnabled() && i18nContentSupport.getLocales().size()>1){
71 Select select = new Select();
72
73 select.setName("locale");
74 select.setEvent("onchange", "window.location = this.value");
75
76 Content currentPage = MgnlContext.getAggregationState().getMainContent();
77 String currentUri = createURI(currentPage, i18nContentSupport.getLocale());
78 select.setValue(currentUri);
79
80 for (Locale locale : i18nContentSupport.getLocales()) {
81 String uri = createURI(currentPage, locale);
82 String label = StringUtils.capitalize(locale.getDisplayLanguage(locale));
83 if(StringUtils.isNotEmpty(locale.getCountry())){
84 label += " (" + StringUtils.capitalize(locale.getDisplayCountry()) + ")";
85 }
86 select.setOptions(label, uri);
87 }
88
89 return select;
90 }
91 return null;
92 }
93
94 protected String createURI(Content currentPage, Locale locale) {
95
96 Locale currentLocale = i18nContentSupport.getLocale();
97 String uri=null;
98 try {
99
100 i18nContentSupport.setLocale(locale);
101 uri = LinkUtil.createAbsoluteLink(currentPage);
102 }
103
104 finally{
105 i18nContentSupport.setLocale(currentLocale);
106 }
107 return uri;
108 }
109
110 public void i18nIze(Dialog dialog) {
111
112 Locale locale = LocaleUtils.toLocale(dialog.getConfigValue("locale", null));
113 boolean isFallbackLanguage = i18nContentSupport.getFallbackLocale().equals(locale);
114
115 if (isEnabled() && i18nContentSupport.isEnabled() && locale != null ) {
116 List<DialogControlImpl> tabs = dialog.getSubs();
117 for (DialogControlImpl tab : tabs) {
118 List<DialogControlImpl> controls = tab.getSubs();
119 for (DialogControlImpl control : controls) {
120 boolean i18n = BooleanUtil.toBoolean(control.getConfigValue("i18n"), false);
121 if (i18n) {
122 if(!isFallbackLanguage){
123 String newName = control.getName() + "_" + locale.toString();
124 control.setName(newName);
125 }
126 String translatedLabel = control.getMessage(control.getLabel());
127 control.setLabel(translatedLabel + " (" + locale.toString() + ")");
128 }
129 }
130 }
131 }
132 }
133
134 public boolean isEnabled() {
135 return this.enabled;
136 }
137
138 public void setEnabled(boolean enabled) {
139 this.enabled = enabled;
140 }
141
142 }