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 import info.magnolia.cms.util.BooleanUtil;
44 import info.magnolia.context.MgnlContext;
45 import info.magnolia.link.LinkUtil;
46
47 import java.util.List;
48 import java.util.Locale;
49
50 import org.apache.commons.lang.LocaleUtils;
51 import org.apache.commons.lang.StringUtils;
52
53
54
55
56
57
58
59 public class DefaultI18nAuthoringSupport implements I18nAuthoringSupport {
60
61 private final I18nContentSupport i18nContentSupport;
62 private boolean enabled = false;
63
64 public DefaultI18nAuthoringSupport() {
65 this.i18nContentSupport = I18nContentSupportFactory.getI18nSupport();
66 }
67
68 @Override
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 @Override
111 public void i18nIze(Dialog dialog) {
112
113 Locale locale = LocaleUtils.toLocale(dialog.getConfigValue("locale", null));
114 boolean isFallbackLanguage = i18nContentSupport.getFallbackLocale().equals(locale);
115
116 if (isEnabled() && i18nContentSupport.isEnabled() && locale != null && dialog.getStorageNode() != null) {
117 List<DialogControlImpl> tabs = dialog.getSubs();
118 for (DialogControlImpl tab : tabs) {
119 List<DialogControlImpl> controls = tab.getSubs();
120 for (DialogControlImpl control : controls) {
121 boolean i18n = BooleanUtil.toBoolean(control.getConfigValue("i18n"), false);
122 if (i18n) {
123 if(!isFallbackLanguage){
124 String newName = control.getName() + "_" + locale.toString();
125 control.setName(newName);
126 }
127 String translatedLabel = control.getMessage(control.getLabel());
128 control.setLabel(translatedLabel + " (" + locale.toString() + ")");
129 }
130 }
131 }
132 }
133 }
134
135 @Override
136 public boolean isEnabled() {
137 return this.enabled;
138 }
139
140 public void setEnabled(boolean enabled) {
141 this.enabled = enabled;
142 }
143
144 }