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.security.app.dialog.field;
35
36 import info.magnolia.context.MgnlContext;
37 import info.magnolia.jcr.util.NodeUtil;
38 import info.magnolia.jcr.util.SessionUtil;
39 import info.magnolia.repository.RepositoryConstants;
40 import info.magnolia.ui.form.field.definition.SelectFieldDefinition;
41 import info.magnolia.ui.form.field.definition.SelectFieldOptionDefinition;
42
43 import java.util.LinkedList;
44 import java.util.List;
45 import java.util.Locale;
46
47 import javax.jcr.Node;
48 import javax.jcr.RepositoryException;
49
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53
54
55
56 public class SystemLanguagesFieldDefinition extends SelectFieldDefinition {
57
58 public static final String SYSTEM_LANGUAGES_PATH = "/server/i18n/system/languages";
59 private static final Logger log = LoggerFactory.getLogger(SystemLanguagesFieldDefinition.class);
60
61 @Override
62 public List<SelectFieldOptionDefinition> getOptions() {
63 List<SelectFieldOptionDefinition> options = new LinkedList<SelectFieldOptionDefinition>();
64
65 Node systemLanguages = SessionUtil.getNode(RepositoryConstants.CONFIG, SYSTEM_LANGUAGES_PATH);
66 if (systemLanguages == null) {
67 log.error("Cannot load system languages definition from [{}], check the system configuration.", SYSTEM_LANGUAGES_PATH);
68 } else {
69 try {
70 Locale currentLocale = MgnlContext.getLocale();
71 for (Node language : NodeUtil.getNodes(systemLanguages)) {
72 if (language.hasProperty("enabled") && language.getProperty("enabled").getBoolean()) {
73 SelectFieldOptionDefinition option = new SelectFieldOptionDefinition();
74 option.setValue(language.getName());
75
76 String langCode = language.hasProperty("language") ? language.getProperty("language").getString() : language.getName().substring(0, 2);
77 String countryCode = language.hasProperty("country") ? language.getProperty("country").getString() : "";
78 Locale locale = new Locale(langCode, countryCode);
79 String label = locale.getDisplayLanguage(currentLocale);
80 if (!"".equals(countryCode)) {
81 label += " (" + locale.getDisplayCountry(currentLocale) + ")";
82 }
83 option.setLabel(label);
84 options.add(option);
85 }
86 }
87 } catch (RepositoryException e) {
88 log.error("Cannot load system languages from [{}]: {}", SYSTEM_LANGUAGES_PATH, e.getMessage());
89 }
90 }
91
92 return options;
93 }
94
95 }