Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

I18n support #250

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ public interface EntityMetadataConfigurationUnitBuilder extends ConfigurationUni

EntityMetadataConfigurationUnitBuilder pluralName(String pluralName);

EntityMetadataConfigurationUnitBuilder i18n(boolean i18n);

EntityMetadataConfigurationUnitBuilder field(String fieldName);

EntityMetadataConfigurationUnitBuilder enumeration(EnumElement... elements);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ public interface FieldSetConfigurationUnitBuilder extends ConfigurationUnitBuild

FieldSetConfigurationUnitBuilder caption(String caption);

FieldSetConfigurationUnitBuilder captionKey(String caption);

FieldSetConfigurationUnitBuilder dynamic(String expression);

FieldSetConfigurationUnitBuilder renderable(FieldValueRenderer<?> renderer);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ public interface PersistentFieldSetConfigurationUnitBuilder extends Configuratio

PersistentFieldSetConfigurationUnitBuilder caption(String caption);

PersistentFieldSetConfigurationUnitBuilder captionKey(String captionKey);

@Deprecated
PersistentFieldSetConfigurationUnitBuilder enumeration(String... values);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,6 @@ public interface ScreenContextConfigurationUnitBuilder extends ConfigurationUnit

ScreenContextConfigurationUnitBuilder screenName(String screenName);

ScreenContextConfigurationUnitBuilder i18n(boolean i18n);

}
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,6 @@ public interface EntityMetadataConfigurationUnit extends ConfigurationUnit {
String getSingularName();

String getPluralName();

boolean i18n();
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,6 @@
public interface ScreenContextConfigurationUnit extends ConfigurationUnit {

String getScreenName();

boolean i18n();
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,16 @@ public class EnumElement implements Serializable {

private final Object value;
private final String label;
private final boolean i18n;

private EnumElement(Object value, String label) {
this(value,label, false);
}

private EnumElement(Object value, String label, boolean i18n) {
this.value = value;
this.label = label;
this.i18n = i18n;
}

public Object getValue() {
Expand All @@ -37,6 +43,10 @@ public String getLabel() {
return label;
}

public boolean isI18n() {
return i18n;
}

public static EnumElement element(int value, String label) {
return new EnumElement(value, label);
}
Expand All @@ -49,4 +59,15 @@ public static EnumElement element(String value, String label) {
return new EnumElement(value, label);
}

public static EnumElement element(int value, String label, boolean i18n) {
return new EnumElement(value, label, i18n);
}

public static EnumElement element(long value, String label, boolean i18n) {
return new EnumElement(value, label, i18n);
}

public static EnumElement element(String value, String label, boolean i18n) {
return new EnumElement(value, label, i18n);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.lightadmin.api.config.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.stereotype.Component;

@Component
public class MessageSourceUtil {
private static MessageSourceAccessor messages;

@Autowired
private void setMessageSource(MessageSource messageSource) {
MessageSourceUtil.messages = new MessageSourceAccessor(messageSource);
}

public static MessageSourceAccessor messages() {
return messages;
}

public static String getMessage(String code) {
return messages.getMessage(code);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import java.io.File;
import java.net.URI;
import java.util.List;

public interface LightAdminConfiguration {

Expand All @@ -42,4 +43,8 @@ public interface LightAdminConfiguration {

boolean isFileStreamingEnabled();

boolean isI18n();

String[] getLanguages();

}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ public class StandardLightAdminConfiguration implements LightAdminConfiguration
private final boolean fileStreaming;
private final String basePackage;
private final boolean demoMode;
private boolean i18n;
private String[] languages;

public StandardLightAdminConfiguration(ServletContext servletContext) {
this.basePackage = servletContext.getInitParameter(LIGHT_ADMINISTRATION_BASE_PACKAGE);
Expand All @@ -59,6 +61,12 @@ public StandardLightAdminConfiguration(ServletContext servletContext) {
} else {
this.securityLogoutUrl = servletContext.getContextPath() + defaultIfBlank(servletContext.getInitParameter(LIGHT_ADMINISTRATION_SECURITY_LOGOUT_URL), "#");
}

this.i18n = BooleanUtils.toBoolean(servletContext.getInitParameter(LIGHT_ADMINISTRATION_I18N));

if(i18n) {
this.languages = servletContext.getInitParameter(LIGHT_ADMINISTRATION_LANGUAGES).split(",");
}
}

@Override
Expand All @@ -81,6 +89,16 @@ public boolean isFileStreamingEnabled() {
return fileStreaming;
}

@Override
public boolean isI18n() {
return this.i18n;
}

@Override
public String[] getLanguages() {
return this.languages;
}

@Override
public String getBackToSiteUrl() {
return backToSiteUrl;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
import org.lightadmin.core.web.support.FileResourceLoader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceResolvable;
import org.springframework.context.NoSuchMessageException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
Expand All @@ -38,10 +40,9 @@
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver;
import org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory;
import org.springframework.web.servlet.view.tiles3.TilesConfigurer;
Expand All @@ -50,6 +51,7 @@
import javax.servlet.ServletContext;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;

import static org.lightadmin.core.util.LightAdminConfigurationUtils.LIGHT_ADMIN_CUSTOM_RESOURCE_CLASSPATH_LOCATION;
import static org.springframework.web.servlet.DispatcherServlet.VIEW_RESOLVER_BEAN_NAME;
Expand All @@ -60,7 +62,8 @@
LightAdminDomainConfiguration.class,
LightAdminRemoteConfiguration.class,
LightAdminRepositoryRestMvcConfiguration.class,
LightAdminViewConfiguration.class
LightAdminViewConfiguration.class,
LightAdminUtilsConfiguration.class
})
@EnableWebMvc
public class LightAdminContextConfiguration extends WebMvcConfigurerAdapter {
Expand Down Expand Up @@ -128,10 +131,30 @@ public LocalValidatorFactoryBean validator() {
return validator;
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}

@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("language");
return localeChangeInterceptor;
}

@Bean(name = "localeResolver")
public CookieLocaleResolver localeResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setDefaultLocale(Locale.ENGLISH);
localeResolver.setCookieName("adminLocale");
return localeResolver;
}

@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setBasenames("classpath:messages","classpath:i18n/messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(0);
messageSource.setFallbackToSystemLocale(false);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.lightadmin.core.config.context;

import org.springframework.context.annotation.ComponentScan;

@ComponentScan(basePackages = {"org.lightadmin.api.config.utils"})
public class LightAdminUtilsConfiguration {
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,17 @@ public B caption(final String caption) {
assertFieldMetadataIsNotNull();

currentFieldMetadata.setName(caption);
currentFieldMetadata.setI18n(false);

return (B) this;
}

@SuppressWarnings("unchecked")
public B captionKey(final String caption) {
assertFieldMetadataIsNotNull();

currentFieldMetadata.setName(caption);
currentFieldMetadata.setI18n(true);

return (B) this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,12 @@ public PersistentFieldSetConfigurationUnitBuilder caption(final String caption)
return this;
}

@Override
public PersistentFieldSetConfigurationUnitBuilder captionKey(final String captionKey) {
fieldSetConfigurationUnitBuilder.captionKey(captionKey);
return this;
}

@Deprecated
@Override
public PersistentFieldSetConfigurationUnitBuilder enumeration(String... values) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public class DefaultEntityMetadataConfigurationUnit extends DefaultFieldSetConfi

private String singularName;
private String pluralName;
private boolean i18n;

DefaultEntityMetadataConfigurationUnit(Class<?> domainType) {
super(domainType, DomainConfigurationUnitType.CONFIGURATION);
Expand Down Expand Up @@ -74,4 +75,12 @@ public DomainConfigurationUnitType getParentUnitType() {
return null;
}

@Override
public boolean i18n() {
return i18n;
}

public void setI18n(boolean i18n) {
this.i18n = i18n;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,12 @@ public EntityMetadataConfigurationUnitBuilder pluralName(final String pluralName
return this;
}

@Override
public EntityMetadataConfigurationUnitBuilder i18n(boolean i18n) {
configurationUnit.setI18n(i18n);
return this;
}

@Override
public EntityMetadataConfigurationUnitBuilder repositoryEventListener(Class<? extends AbstractRepositoryEventListener> listenerClass) {
configurationUnit.setRepositoryEventListener(listenerClass);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,29 @@
public class DefaultScreenContextConfigurationUnit extends DomainTypeConfigurationUnit implements ScreenContextConfigurationUnit {

private final String screenName;
private final boolean i18n;

DefaultScreenContextConfigurationUnit(Class<?> domainType, final String screenName) {
this(domainType, screenName, false);
}

DefaultScreenContextConfigurationUnit(Class<?> domainType, final String screenName, final boolean i18n) {
super(domainType);

this.screenName = screenName;
this.i18n = i18n;
}

@Override
public String getScreenName() {
return screenName;
}

@Override
public boolean i18n() {
return i18n;
}

@Override
public DomainConfigurationUnitType getDomainConfigurationUnitType() {
return DomainConfigurationUnitType.SCREEN_CONTEXT;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,13 @@
public class DefaultScreenContextConfigurationUnitBuilder extends DomainTypeConfigurationUnitBuilder<ScreenContextConfigurationUnit> implements ScreenContextConfigurationUnitBuilder {

private String screenName;
private boolean i18n;

public DefaultScreenContextConfigurationUnitBuilder(final Class<?> domainType) {
super(domainType);

this.screenName = domainType.getSimpleName();
this.i18n = false;
}

@Override
Expand All @@ -35,8 +37,14 @@ public ScreenContextConfigurationUnitBuilder screenName(final String screenName)
return this;
}

@Override
public ScreenContextConfigurationUnitBuilder i18n(boolean i18n) {
this.i18n = i18n;
return this;
}

@Override
public ScreenContextConfigurationUnit build() {
return new DefaultScreenContextConfigurationUnit(getDomainType(), screenName);
return new DefaultScreenContextConfigurationUnit(getDomainType(), screenName, i18n);
}
}
Loading