Repository: jhipster/generator-jhipster
Pull request #9278 (2019-02-17 10:35:33)

Add note about `require('os').cpus()` inaccuracy in some CI environments
Closed https://github.com/jhipster/generator-jhipster/pull/9270 and opened a new PR here with a new commit SHA to trigger fresh CI builds

-   Please make sure the below checklist is followed for Pull Requests.

-   [ ] [Travis tests](https://travis-ci.org/jhipster/generator-jhipster/pull_requests) are green
-   [ ] Tests are added where necessary
-   [ ] Documentation is added/updated where necessary
-   [ ] Coding Rules & Commit Guidelines as per our [CONTRIBUTING.md document](https://github.com/jhipster/generator-jhipster/blob/master/CONTRIBUTING.md) are followed

<!--
Please also reference the issue number in a commit message to [automatically close the related Github issue](https://help.github.com/articles/closing-issues-via-commit-messages/)

Note: It is also possible to add `[skip ci]` to your commit message to skip Travis tests
-->



Patch:
diff --git a/generators/cleanup.js b/generators/cleanup.js
index 74e459dd26..2e1b27043c 100644
--- a/generators/cleanup.js
+++ b/generators/cleanup.js
@@ -175,9 +175,4 @@ function cleanupOldServerFiles(generator, javaDir, testDir, mainResourceDir, tes
             generator.removeFile(`${testResourceDir}cassandra-random-port.yml`);
         }
     }
-    if (generator.isJhipsterVersionLessThan('6.0.0')) {
-        generator.removeFile(`${javaDir}web/rest/util/PaginationUtil.java`);
-        generator.removeFile(`${javaDir}web/rest/util/HeaderUtil.java`);
-        generator.removeFile(`${testDir}web/rest/util/PaginationUtilUnitTest.java`);
-    }
 }
diff --git a/generators/client/templates/angular/webpack/webpack.dev.js.ejs b/generators/client/templates/angular/webpack/webpack.dev.js.ejs
index f114fc82b7..7b8bdcb371 100644
--- a/generators/client/templates/angular/webpack/webpack.dev.js.ejs
+++ b/generators/client/templates/angular/webpack/webpack.dev.js.ejs
@@ -92,7 +92,9 @@ module.exports = (options) => webpackMerge(commonConfig({ env: ENV }), {
                 {
                     loader: 'thread-loader',
                     options: {
-                        // there should be 1 cpu for the fork-ts-checker-webpack-plugin
+                        // There should be 1 cpu for the fork-ts-checker-webpack-plugin.
+                        // The value may need to be adjusted (e.g. to 1) in some CI environments,
+                        // as cpus() may report more cores than what are available to the build.
                         workers: require('os').cpus().length - 1
                     }
                 },
diff --git a/generators/client/templates/react/webpack/webpack.common.js.ejs b/generators/client/templates/react/webpack/webpack.common.js.ejs
index 9ec0d9c0d8..e93c12622e 100644
--- a/generators/client/templates/react/webpack/webpack.common.js.ejs
+++ b/generators/client/templates/react/webpack/webpack.common.js.ejs
@@ -38,7 +38,9 @@ const getTsLoaderRule = env => {
     {
       loader: 'thread-loader',
       options: {
-        // there should be 1 cpu for the fork-ts-checker-webpack-plugin
+        // There should be 1 cpu for the fork-ts-checker-webpack-plugin.
+        // The value may need to be adjusted (e.g. to 1) in some CI environments,
+        // as cpus() may report more cores than what are available to the build.
         workers: require('os').cpus().length - 1
       }
     },
diff --git a/generators/entity-i18n/templates/i18n/entity_pt-br.json.ejs b/generators/entity-i18n/templates/i18n/entity_pt-br.json.ejs
index f5755e48b0..348a97fdd5 100644
--- a/generators/entity-i18n/templates/i18n/entity_pt-br.json.ejs
+++ b/generators/entity-i18n/templates/i18n/entity_pt-br.json.ejs
@@ -28,7 +28,7 @@ let helpBlocks = 0; %>
             },<% if (!microserviceAppName) { %>
             "created": "Um novo <%= entityClassHumanized %> foi criado com o identificador {{ param }}",
             "updated": "Um <%= entityClassHumanized %> foi atualizado com o identificador {{ param }}",
-            "deleted": "Um <%= entityClassHumanized %> foi excluído com o identificador {{ param }}",<% } %>
+            "deleted": "Um <%= entityClassHumanized %> foi deletado com o identificador {{ param }}",<% } %>
             "delete": {
                 "question": "Tem certeza de que deseja excluir <%= entityClassHumanized %> {{ id }}?"
             },
@@ -51,7 +51,7 @@ let helpBlocks = 0; %>
         "<%= entityTranslationKey %>" : {
             "created": "Um novo <%= entityClassHumanized %> foi criado com o identificador {{ param }}",
             "updated": "Um <%= entityClassHumanized %> foi atualizado com o identificador {{ param }}",
-            "deleted": "Um <%= entityClassHumanized %> foi excluído com o identificador {{ param }}"
+            "deleted": "Um <%= entityClassHumanized %> foi deletado com o identificador {{ param }}"
         }
     }<% } %>
 }
diff --git a/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs b/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs
index c06176a95c..ec6f6b8d33 100644
--- a/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs
+++ b/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs
@@ -17,7 +17,6 @@
  limitations under the License.
 -%>
 package <%=packageName%>.web.rest;
-
 <%_ const viaService = service !== 'no';
     let isUsingMapsId = false;
     let mapsIdAssoc;
@@ -50,6 +49,8 @@ import <%=packageName%>.repository.search.<%= entityClass %>SearchRepository;
 import <%=packageName%>.repository.UserRepository;
 <%_ } _%>
 import <%=packageName%>.web.rest.errors.BadRequestAlertException;
+import <%=packageName%>.web.rest.util.HeaderUtil;<% if (pagination !== 'no') { %>
+import <%=packageName%>.web.rest.util.PaginationUtil;<% } %>
 <%_ if (dto === 'mapstruct') { _%>
 import <%=packageName%>.service.dto.<%= asDto(entityClass) %>;
 <%_ if (service === 'no') { _%>
@@ -59,15 +60,9 @@ import <%=packageName%>.service.mapper.<%= entityClass %>Mapper;
 import <%=packageName%>.service.dto.<%= entityClass %>Criteria;
 import <%=packageName%>.service.<%= entityClass %>QueryService;
 <%_ } _%>
-
-import io.github.jhipster.web.util.HeaderUtil;
-<%_ if (pagination !== 'no') { _%>
-import io.github.jhipster.web.util.PaginationUtil;
-<%_ } _%>
 import io.github.jhipster.web.util.ResponseUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
 <%_ if (pagination !== 'no') { _%>
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -115,9 +110,6 @@ public class <%= entityClass %>Resource {
         entityName = _.camelCase(`${clientRootFolder}${entityClass}`);
     } _%>
     private static final String ENTITY_NAME = "<%= entityName %>";
-
-    @Value("${spring.application.name:JHIPSTER}")
-    private String applicationName;
     <%_
     const instanceType = (dto === 'mapstruct') ? asDto(entityClass) : asEntity(entityClass);
     const instanceName = (dto === 'mapstruct') ? asDto(entityInstance) : asEntity(entityInstance);
@@ -147,7 +139,7 @@ public class <%= entityClass %>Resource {
         <%_ } _%>
 <%- include('../../common/save_template', {asEntity, asDto, viaService: viaService, returnDirectly: false, isUsingMapsId: isUsingMapsId, mapsIdAssoc: mapsIdAssoc, isController: true}); -%>
         return ResponseEntity.created(new URI("/api/<%= entityApiUrl %>/" + result.getId()))
-            .headers(HeaderUtil.createEntityCreationAlert(applicationName, ENTITY_NAME, result.getId().toString()))
+            .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString()))
             .body(result);
     }
 
@@ -174,7 +166,7 @@ public class <%= entityClass %>Resource {
         <%_ } _%>
 <%- include('../../common/save_template', {asEntity, asDto, viaService: viaService, returnDirectly: false, isUsingMapsId: false, mapsIdAssoc: mapsIdAssoc}); -%>
         return ResponseEntity.ok()
-            .headers(HeaderUtil.createEntityUpdateAlert(applicationName, ENTITY_NAME, <%= instanceName %>.getId().toString()))
+            .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, <%= instanceName %>.getId().toString()))
             .body(result);
     }
 
@@ -234,7 +226,7 @@ public class <%= entityClass %>Resource {
     public ResponseEntity<Void> delete<%= entityClass %>(@PathVariable <%= pkType %> id) {
         log.debug("REST request to delete <%= entityClass %> : {}", id);
 <%- include('../../common/delete_template', {viaService: viaService}); -%>
-        return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(applicationName, ENTITY_NAME, id<% if (pkType !== 'String') { %>.toString()<% } %>)).build();
+        return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id<% if (pkType !== 'String') { %>.toString()<% } %>)).build();
     }<% if (searchEngine === 'elasticsearch') { %>
 
     /**
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/activate.json.ejs b/generators/languages/templates/src/main/webapp/i18n/pt-br/activate.json.ejs
index 1cf82d213a..2646bf7913 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/activate.json.ejs
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/activate.json.ejs
@@ -20,8 +20,8 @@
     "activate": {
         "title": "Ativação",
         "messages": {
-            "success": "<strong>Sua conta de usuário foi ativada com sucesso.</strong> Favor ",
-            "error": "<strong>Seu usuário não pode ser ativado.</strong> Favor utilizar o formulário de cadastro para criar uma nova conta."
+            "success": "<strong>Usuário ativado com sucesso.</strong> Favor ",
+            "error": "<strong>O usuário não pode ser ativado.</strong> Favor utilizar o formulário de cadastro para criar uma nova conta."
         }
     }
 }
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/audits.json b/generators/languages/templates/src/main/webapp/i18n/pt-br/audits.json
index bb2d51246b..845dcbb437 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/audits.json
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/audits.json
@@ -17,7 +17,7 @@
                 "principal": "Usuário",
                 "date": "Data",
                 "status": "Estado",
-                "data": "Dados extras"
+                "data": "Informações extras"
             },
             "data": {
                 "remoteAddress": "Endereço remoto:"
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/configuration.json b/generators/languages/templates/src/main/webapp/i18n/pt-br/configuration.json
index e9480eadde..6f80c59028 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/configuration.json
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/configuration.json
@@ -1,7 +1,7 @@
 {
     "configuration": {
         "title": "Configuração",
-        "filter": "Filtro (por prefixo)",
+        "filter": "Filtro",
         "table": {
             "prefix": "Prefixo",
             "properties": "Propriedades"
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/error.json b/generators/languages/templates/src/main/webapp/i18n/pt-br/error.json
index 501ee68d65..229f4fc165 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/error.json
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/error.json
@@ -2,13 +2,13 @@
     "error": {
         "title": "Página de erro!",
         "http": {
-            "400": "Requisição inválida.",
+            "400": "Bad request.",
             "403": "Você não tem autorização para acessar esta página.",
             "404": "A página não existe.",
-            "405": "O verbo HTTP utilizado não é suportado para essa URL.",
-            "500": "Erro interno do servidor."
+            "405": "The HTTP verb you used is not supported for this URL.",
+            "500": "Internal server error."
         },
-        "concurrencyFailure": "Outro usuário modificou esses dados ao mesmo tempo que você. Suas modificações foram rejeitadas.",
-        "validation": "Erro de validação no servidor."
+        "concurrencyFailure": "Another user modified this data at the same time as you. Your changes were rejected.",
+        "validation": "Validation error on the server."
     }
 }
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/gateway.json b/generators/languages/templates/src/main/webapp/i18n/pt-br/gateway.json
index c7c5a7fcde..8c8bbd7e98 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/gateway.json
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/gateway.json
@@ -2,14 +2,14 @@
     "gateway": {
         "title": "Gateway",
         "routes": {
-            "title": "Rotas atuais",
+            "title": "Current routes",
             "url": "URL",
-            "service": "Serviço",
-            "servers": "Servidores disponíveis",
-            "error": "Atenção: nenhum servidor disponível!"
+            "service": "service",
+            "servers": "Available servers",
+            "error": "Warning: no server available!"
         },
         "refresh": {
-            "button": "Atualizar"
+            "button": "Refresh"
         }
     }
 }
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/global.json.ejs b/generators/languages/templates/src/main/webapp/i18n/pt-br/global.json.ejs
index 1dcc803754..026fc6929b 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/global.json.ejs
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/global.json.ejs
@@ -19,7 +19,7 @@
 {
     "global": {
         "title": "<%= capitalizedBaseName %>",
-        "browsehappy": "Você está usando um navegador <strong>desatualizado</strong>. Favor <a href=\"http://browsehappy.com/?locale=pt_BR\">atualize o seu navegador</a> para ter uma experiência melhor.",
+        "browsehappy": "Você está usando um navegador <strong>desatualizado</strong>. Favor <a href=\"http://browsehappy.com/?locale=pt_BR\">atualizar o seu navegador</a> para ter uma experiência melhor.",
         "menu": {
             "home": "Início",
             "jhipster-needle-menu-add-element": "JHipster will add additional menu entries here (do not translate!)",
@@ -34,7 +34,7 @@
                 "sessions": "Sessões",
                 "login": "Entrar",
                 "logout": "Sair",
-                "register": "Criar uma conta"
+                "register": "Registrar"
             },
             "admin": {
                 "main": "Administração",
@@ -65,15 +65,15 @@
             "newpassword.placeholder": "Nova senha",
             "confirmpassword": "Confirmação de nova senha",
             "confirmpassword.placeholder": "Confirme a nova senha",
-            "email": "E-mail",
-            "email.placeholder": "Seu e-mail"
+            "email": "Email",
+            "email.placeholder": "Seu email"
         },
         "messages": {
             "info": {
                 "authenticated": {
-                    "prefix": "Se deseja ",
+                    "prefix": "Para ",
                     "link": "entrar",
-                    "suffix": ", utilize as seguintes contas padrões:<br/>- Administrador (usuário=\"admin\" and senha=\"admin\") <br/>- Usuário (usuário=\"user\" e senha=\"user\")."
+                    "suffix": ", utilize as seguintes contas padrões:<br/>- Administrador (usuário=\"admin\" and senha=\"admin\") <br/>- Usuário (usuário=\"user\" and senha=\"user\")."
                 },
                 "register": {
                     "noaccount": "Não possui uma conta ainda?",
@@ -86,7 +86,7 @@
             "validate": {
                 "newpassword": {
                     "required": "A senha é obrigatória.",
-                    "minlength": "A senha deve ter pelo menos 4 caracteres",
+                    "minlength": "A senha deve ter pelo menos 5 caracteres",
                     "maxlength": "A senha não pode ter mais de 50 caracteres",
                     "strength": "Nível de dificuldade da senha:"
                 },
@@ -96,15 +96,15 @@
                     "maxlength": "A confirmação da senha não pode ter mais de 50 caracteres"
                 },
                 "email": {
-                    "required": "O e-mail é obrigatório.",
-                    "invalid": "E-mail inválido.",
-                    "minlength": "O e-mail deve ter pelo menos 5 caracteres",
-                    "maxlength": "O e-mail não pode ter mais de 50 caracteres"
+                    "required": "O email é obrigatório.",
+                    "invalid": "Email inválido.",
+                    "minlength": "O email deve ter pelo menos 5 caracteres",
+                    "maxlength": "O email não pode ter mais de 50 caracteres"
                 }
             }
         },
         "field": {
-            "id": "Código"
+            "id" : "Código"
         },
         "ribbon": {
             "dev": "Development"
@@ -113,13 +113,13 @@
     },
     "entity": {
         "action": {
-            "addblob": "Adicionar arquivo",
+            "addblob": "Adicionar blob",
             "addimage": "Adicionar imagem",
             "back": "Voltar",
             "cancel": "Cancelar",
             "delete": "Excluir",
             "edit": "Editar",
-            "open": "Abrir",
+            "open": "Open",
             "save": "Salvar",
             "view": "Visualizar"
         },
@@ -132,28 +132,27 @@
         },
         "validation": {
             "required": "O campo é obrigatório.",
-            "minlength": "Este campo deve ter pelo menos {{ min }} caracteres.",
-            "maxlength": "Este campo não pode ter mais de {{ max }} caracteres.",
-            "min": "Este campo deve ser maior que {{ min }}.",
-            "max": "Este campo não pode ser maior que {{ max }}.",
-            "minbytes": "Este campo deve ter pelo menos {{ min }} bytes.",
-            "maxbytes": "Este campo não pode ter mais de {{ max }} bytes.",
-            "pattern": "Este campo deve estar dentro do seguinte padrão {{ pattern }}.",
-            "number": "Este campo é do tipo numérico.",
-            "datetimelocal": "Este campo é do tipo data/hora.",
-            "patternLogin": "Este campo só pode conter letras, números e e-mail."
+            "minlength": "Este campo deve ter ao menos {{min}} caracteres.",
+            "maxlength": "Este campo não pode ter mais que {{max}} caracteres.",
+            "min": "Este campo deve ser maior que {{min}}.",
+            "max": "Este campo não pode ser maior que {{max}}.",
+            "minbytes": "Este campo deve ter ao menos {{min}} bytes.",
+            "maxbytes": "Este campo não pode ter mais que {{max}} bytes.",
+            "pattern": "Este campo deve estar dentro do seguinte padrão {{pattern}}.",
+            "number": "Este campo é do tipo número.",
+            "datetimelocal": "Este campo é do tipo data/hora."
         }
     },
     "error": {
-        "internalServerError": "Erro interno do servidor",
+        "internalServerError": "Internal server error",
         "server.not.reachable": "Servidor indisponível",
-        "url.not.found": "Não encontrado",
-        "NotNull": "O Campo {{ fieldName }} não pode ser vazio!",
-        "Size": "O campo {{ fieldName }} não obedece os requisitos de tamanho mínimo ou máximo!",
-        "userexists": "Usuário já está cadastrado!",
-        "emailexists": "E-mail já está cadastrado!",
-        "idexists": "Novo(a) {{entityName}} não pode ter um identificador",
-        "idnull": "Identificador inválido"
+        "url.not.found": "Not found",
+        "NotNull": "O Campo {{fieldName}} não pode ser vazio!",
+        "Size": "O campo {{fieldName}} não obedece os requisitos de tamanho mínimo ou máximo!",
+        "userexists": "Usuário já existente!",
+        "emailexists": "Este email já está cadastrado!",
+        "idexists": "Novo(a) {{entityName}} não pode ter uma ID",
+        "idnull": "Invalid ID"
     },
-    "footer": "Este é o rodapé da página"
+    "footer": "Este é o seu rodapé"
 }
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/health.json.ejs b/generators/languages/templates/src/main/webapp/i18n/pt-br/health.json.ejs
index 446dc6c895..663c420070 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/health.json.ejs
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/health.json.ejs
@@ -22,11 +22,11 @@
         "refresh.button": "Atualizar",
         "stacktrace": "Stacktrace",
         "details": {
-            "details": "Detalhes",
-            "properties": "Propriedades",
-            "name": "Nome",
-            "value": "Valor",
-            "error": "Erro"
+            "details": "Details",
+            "properties": "Properties",
+            "name": "Name",
+            "value": "Value",
+            "error": "Error"
         },
         "indicator": {
             <%_ if (messageBroker === 'kafka') { _%>
@@ -40,7 +40,7 @@
             "consul": "Consul",<% } %>
             <%_ } _%>
             "diskSpace": "Espaço em disco",
-            "mail": "E-mail"<% if (searchEngine === 'elasticsearch') { %>,
+            "mail": "Email"<% if (searchEngine === 'elasticsearch') { %>,
             "elasticsearch": "Elasticsearch"<% } %><% if (databaseType === 'sql') { %>,
             "db": "Banco de dados"<% } %><% if (databaseType === 'mongodb') { %>,
             "mongo": "MongoDB"<% } %><% if (databaseType === 'cassandra') { %>,
@@ -52,7 +52,7 @@
             "status": "Estado"
         },
         "status": {
-            "UNKNOWN": "DESCONHECIDO",
+            "UNKNOWN": "UNKNOWN",
             "UP": "UP",
             "DOWN": "DOWN"
         }
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/home.json b/generators/languages/templates/src/main/webapp/i18n/pt-br/home.json
index c554506bdf..efa2736361 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/home.json
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/home.json
@@ -1,17 +1,17 @@
 {
     "home": {
         "title": "Bem vindo, Java Hipster!",
-        "subtitle": "Esta é a página principal",
+        "subtitle": "Esta é  a página principal",
         "logged": {
             "message": "Você está logado como \"{{username}}\"."
         },
         "question": "Em caso de dúvida sobre o JHipster:",
         "link": {
-            "homepage": "Página principal JHipster",
+            "homepage": "JHipster homepage",
             "stackoverflow": "JHipster no Stack Overflow",
             "bugtracker": "JHipster bug tracker",
-            "chat": "Sala de bate-papo pública JHipster",
-            "follow": "siga @java_hipster no Twitter"
+            "chat": "JHipster public chat room",
+            "follow": "contate @java_hipster on Twitter"
         },
         "like": "Se você gosta do JHipster, não se esqueça de avaliar no",
         "github": "GitHub"
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/metrics.json b/generators/languages/templates/src/main/webapp/i18n/pt-br/metrics.json
index d22a173249..a00bc96cd7 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/metrics.json
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/metrics.json
@@ -2,7 +2,7 @@
     "metrics": {
         "title": "Métricas da aplicação",
         "refresh.button": "Atualizar",
-        "updating": "Atualizando...",
+        "updating": "Atualização...",
         "jvm": {
             "title": "Métricas da JVM",
             "memory": {
@@ -14,7 +14,7 @@
             "threads": {
                 "title": "Threads",
                 "all": "Tudo",
-                "runnable": "Em execução",
+                "runnable": "Runnable",
                 "timedwaiting": "Tempo de espera",
                 "waiting": "Aguardando",
                 "blocked": "Bloqueado",
@@ -27,27 +27,26 @@
                     "waitedcount": "Número de esperas",
                     "lockname": "Nome do Lock",
                     "stacktrace": "Stacktrace",
-                    "show": "Mostrar Stacktrace",
-                    "hide": "Ocultar Stacktrace"
+                    "show": "Mostrar",
+                    "hide": "Esconder"
                 }
             },
             "gc": {
-                "title": "Coletor de lixo",
+                "title": "Coletas de lixo",
                 "marksweepcount": "Número de marcados para coleta",
                 "marksweeptime": "Tempo de marcação para coleta",
                 "scavengecount": "Número de varreduras",
                 "scavengetime": "Tempo de varreduras"
             },
             "http": {
-                "title": "Requisições HTTP (eventos em milissegundo)",
+                "title": "Requisições HTTP (eventos por segundo)",
                 "active": "Requisições ativas:",
                 "total": "Total de requisições:",
                 "table": {
                     "code": "Código",
                     "count": "Contagem",
                     "mean": "Mediana",
-                    "average": "Média",
-                    "max": "Máxima"
+                    "average": "Média"
                 },
                 "code": {
                     "ok": "Ok",
@@ -57,7 +56,7 @@
             }
         },
         "servicesstats": {
-            "title": "Estatísticas dos serviços (tempo em milissegundo)",
+            "title": "Estatísticas dos serviços (tempo em milisegundos)",
             "table": {
                 "name": "Nome do serviço",
                 "count": "Contagem",
@@ -73,21 +72,13 @@
         "cache": {
             "title": "Estatísticas da cache",
             "cachename": "Nome da cache",
-            "hits": "Cache Hits",
-            "misses": "Cache Misses",
-            "gets": "Cache Gets",
-            "puts": "Cache Puts",
-            "removals": "Cache Removals",
-            "evictions": "Cache Evictions",
-            "hitPercent": "Cache Hit %",
-            "missPercent": "Cache Miss %",
-            "averageGetTime": "Average get time (µs)",
-            "averagePutTime": "Average put time (µs)",
-            "averageRemoveTime": "Average remove time (µs)"
+            "hits": "Hits",
+            "misses": "Misses",
+            "evictions": "Número de despejos"
         },
         "datasource": {
             "usage": "Utilização",
-            "title": "Estatísticas do datasource (tempo em milissegundo)",
+            "title": "Estatísticas do datasource (tempo em milisegundos)",
             "name": "Utilização do pool",
             "count": "Contagem",
             "mean": "Mediana",
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/register.json b/generators/languages/templates/src/main/webapp/i18n/pt-br/register.json
index 2e67469247..a19994c09f 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/register.json
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/register.json
@@ -2,22 +2,22 @@
     "register": {
         "title": "Cadastro",
         "form": {
-            "button": "Cadastrar"
+            "button": "Cadastre"
         },
         "messages": {
             "validate": {
                 "login": {
                     "required": "O usuário é obrigatório.",
-                    "minlength": "O usuário deve ter pelo menos 1 caractere.",
-                    "maxlength": "O usuário não pode ter mais de 50 caracteres.",
-                    "pattern": "Seu usuário só pode conter letras e números."
+                    "minlength": "O usuário deve ter pelo menos 1 caractere",
+                    "maxlength": "O usuário não pode ter mais de 50 caracteres",
+                    "pattern": "Your login can only contain lower-case letters and digits"
                 }
             },
-            "success": "<strong>Cadastro realizado com sucesso!</strong> Favor verificar seu e-mail para confirmar a conta.",
+            "success": "<strong>Cadstro salvo com sucesso!</strong> Favor verificar seu email para confirmar a conta.",
             "error": {
                 "fail": "<strong>Erro ao realizar o cadastro!</strong> Favor tentar novamente mais tarde.",
                 "userexists": "<strong>Usuário já registrado!</strong> Favor escolher outro.",
-                "emailexists": "<strong>E-mail já está em uso!</strong> Por favor informe outro."
+                "emailexists": "<strong>Email já está em uso!</strong> Por favor informe outro."
             }
         }
     }
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/reset.json.ejs b/generators/languages/templates/src/main/webapp/i18n/pt-br/reset.json.ejs
index a0fd4fa6f7..fee1db8cf6 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/reset.json.ejs
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/reset.json.ejs
@@ -24,10 +24,12 @@
                 "button": "Criar nova senha"
             },
             "messages": {
-                "info": "Informe endereço de e-mail utilizado no cadastro",
-                "success": "Verifique seu e-mail para detalhes sobre a criação de uma nova senha.",
-                "notfound": "<strong>Endereço de e-mail não cadastrado!</strong> Por favor verifique e tente novamente"
+                "info": "Informe endereço de email utilizado no cadastro.",
+                "success": "Verifique seu email para detalhes sobre a criação de uma nova senha.",
+                "notfound": "<strong>Endereço de email não cadastrado!</strong> Por favor verifique e tente novamente"
+
             }
+
         },
         "finish": {
             "title": "Criar nova senha",
@@ -36,10 +38,11 @@
             },
             "messages": {
                 "info": "Escolha uma nova senha",
-                "success": "<strong>Sua senha foi alterada com sucesso.</strong> Por favor ",
+                "success": "<strong>Sua senha foi alterada com sucesso!</strong> Por favor ",
                 "keymissing": "Chave de reestabelecimento não encontrada.",
-                "error": "Sua senha não pode ser trocada. Lembre-se, a requisição de troca de senha é válida apenas por 24 horas."
+                "error": "Sua senha não pôde ser trocada. Lembre-se, requisição de troca de senha é válida apenas por 24h."
             }
         }
     }
+
 }
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/sessions.json b/generators/languages/templates/src/main/webapp/i18n/pt-br/sessions.json
index 1d88bafda6..5cee1e923b 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/sessions.json
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/sessions.json
@@ -2,7 +2,7 @@
     "sessions": {
         "title": "Sessões ativas para [<strong>{{username}}</strong>]",
         "table": {
-            "ipaddress": "Endereço IP",
+            "ipaddress": "IP",
             "useragent": "Agente",
             "date": "Data",
             "button": "Invalidar"
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/settings.json b/generators/languages/templates/src/main/webapp/i18n/pt-br/settings.json
index eee8789ccd..b61902383e 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/settings.json
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/settings.json
@@ -2,8 +2,8 @@
     "settings": {
         "title": "Configurações para o usuário [<strong>{{username}}</strong>]",
         "form": {
-            "firstname": "Nome",
-            "firstname.placeholder": "Seu nome",
+            "firstname": "Primeiro nome",
+            "firstname.placeholder": "Seu primeiro nome",
             "lastname": "Sobrenome",
             "lastname.placeholder": "Seu sobrenome",
             "language": "Idioma",
@@ -12,14 +12,14 @@
         "messages": {
             "error": {
                 "fail": "<strong>Ocorreu um erro!</strong> As configurações não foram salvas.",
-                "emailexists": "<strong>E-mail já cadastrado!</strong> Favor escolher outro."
+                "emailexists": "<strong>Email is already in use!</strong> Please choose another one."
             },
             "success": "<strong>Configurações salvas com sucesso!</strong>",
             "validate": {
                 "firstname": {
-                    "required": "O nome é obrigatório.",
-                    "minlength": "O nome deve ter pelo menos 1 caractere",
-                    "maxlength": "O nome não pode ter mais de 50 caracteres"
+                    "required": "O primeiro nome é obrigatório.",
+                    "minlength": "O primeiro nome deve ter pelo menos 1 caractere",
+                    "maxlength": "O primeiro nome não pode ter mais de 50 caracteres"
                 },
                 "lastname": {
                     "required": "O sobrenome é obrigatório.",
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/tracker.json b/generators/languages/templates/src/main/webapp/i18n/pt-br/tracker.json
index 5485f35414..f1dfb77899 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/tracker.json
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/tracker.json
@@ -3,7 +3,7 @@
         "title": "Atividades dos usuários em tempo real",
         "table": {
             "userlogin": "Usuário",
-            "ipaddress": "Endereço IP",
+            "ipaddress": "IP",
             "userAgent": "Agente",
             "page": "Página atual",
             "time": "Tempo"
diff --git a/generators/languages/templates/src/main/webapp/i18n/pt-br/user-management.json b/generators/languages/templates/src/main/webapp/i18n/pt-br/user-management.json
index 1201d217c4..59cc4b89f2 100644
--- a/generators/languages/templates/src/main/webapp/i18n/pt-br/user-management.json
+++ b/generators/languages/templates/src/main/webapp/i18n/pt-br/user-management.json
@@ -3,11 +3,11 @@
         "home": {
             "title": "Usuários",
             "createLabel": "Adicionar",
-            "createOrEditLabel": "Criar ou editar usuário"
+             "createOrEditLabel": "Criar ou editar usuário"
         },
-        "created": "Novo usuário foi criado com o identificador {{ param }}",
-        "updated": "Usuário com o identificador {{ param }} foi atualizado ",
-        "deleted": "Usuário com o identificador {{ param }} foi excluído",
+        "created": "Novo usuário foi criado com a identificação {{ param }}",
+        "updated": "Usuário com a identificação {{ param }} foi atualizado ",
+        "deleted": "Usuário com a identificação {{ param }} foi removido",
         "delete": {
             "question": "Você tem certeza que deseja excluir o usuário {{ login }}?"
         },
@@ -15,16 +15,16 @@
             "title": "Usuário"
         },
         "login": "Login",
-        "firstName": "Nome",
-        "lastName": "Sobrenome",
-        "email": "E-mail",
+        "firstName": "Primeiro nome",
+        "lastName": "Último nome",
+        "email": "Email",
         "activated": "Ativo",
         "deactivated": "Inativo",
         "profiles": "Perfis",
         "langKey": "Idioma",
         "createdBy": "Criado por",
         "createdDate": "Criado em",
-        "lastModifiedBy": "Modificado por",
-        "lastModifiedDate": "Modificado em"
+        "lastModifiedBy": "Alterado por",
+        "lastModifiedDate": "Alterado em"
     }
 }
diff --git a/generators/server/files.js b/generators/server/files.js
index cac6ceaf3e..0f44274f5e 100644
--- a/generators/server/files.js
+++ b/generators/server/files.js
@@ -1136,18 +1136,19 @@ const serverFiles = {
                     file: 'package/web/rest/vm/package-info.java',
                     renameTo: generator => `${generator.javaDir}web/rest/vm/package-info.java`
                 },
+                { file: 'package/web/rest/vm/LoggerVM.java', renameTo: generator => `${generator.javaDir}web/rest/vm/LoggerVM.java` },
+
                 {
-                    file: 'package/web/rest/vm/LoggerVM.java',
-                    renameTo: generator => `${generator.javaDir}web/rest/vm/LoggerVM.java`
+                    file: 'package/web/rest/util/HeaderUtil.java',
+                    renameTo: generator => `${generator.javaDir}web/rest/util/HeaderUtil.java`
                 },
                 {
-                    file: 'package/web/rest/package-info.java',
-                    renameTo: generator => `${generator.javaDir}web/rest/package-info.java`
+                    file: 'package/web/rest/util/PaginationUtil.java',
+                    renameTo: generator => `${generator.javaDir}web/rest/util/PaginationUtil.java`
                 },
-                {
-                    file: 'package/web/rest/LogsResource.java',
-                    renameTo: generator => `${generator.javaDir}web/rest/LogsResource.java`
-                }
+                { file: 'package/web/rest/package-info.java', renameTo: generator => `${generator.javaDir}web/rest/package-info.java` },
+
+                { file: 'package/web/rest/LogsResource.java', renameTo: generator => `${generator.javaDir}web/rest/LogsResource.java` }
             ]
         },
         {
@@ -1226,6 +1227,10 @@ const serverFiles = {
                 {
                     file: 'package/web/rest/errors/ExceptionTranslatorTestController.java',
                     renameTo: generator => `${generator.testDir}web/rest/errors/ExceptionTranslatorTestController.java`
+                },
+                {
+                    file: 'package/web/rest/util/PaginationUtilUnitTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/util/PaginationUtilUnitTest.java`
                 }
             ]
         },
diff --git a/generators/server/templates/gradle.properties.ejs b/generators/server/templates/gradle.properties.ejs
index a4409e9523..1d2ba479d2 100644
--- a/generators/server/templates/gradle.properties.ejs
+++ b/generators/server/templates/gradle.properties.ejs
@@ -28,7 +28,7 @@ yarn_version=<%= YARN_VERSION %>
 jhipster_dependencies_version=3.0.0-SNAPSHOT
 # The spring-boot version should match the one managed by
 # https://mvnrepository.com/artifact/io.github.jhipster/jhipster-dependencies/${jhipster_dependencies_version}
-spring_boot_version=2.1.3.RELEASE
+spring_boot_version=2.1.2.RELEASE
 # The hibernate version should match the one managed by
 # https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies/${spring-boot.version} -->
 hibernate_version=5.3.7.Final
diff --git a/generators/server/templates/pom.xml.ejs b/generators/server/templates/pom.xml.ejs
index 80bafda705..7e68c6e840 100644
--- a/generators/server/templates/pom.xml.ejs
+++ b/generators/server/templates/pom.xml.ejs
@@ -94,7 +94,7 @@
         <jhipster-dependencies.version>3.0.0-SNAPSHOT</jhipster-dependencies.version>
         <!-- The spring-boot version should match the one managed by
         https://mvnrepository.com/artifact/io.github.jhipster/jhipster-dependencies/${jhipster-dependencies.version} -->
-        <spring-boot.version>2.1.3.RELEASE</spring-boot.version>
+        <spring-boot.version>2.1.2.RELEASE</spring-boot.version>
         <%_ if (databaseType === 'sql') { _%>
         <!-- The hibernate version should match the one managed by
         https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies/${spring-boot.version} -->
diff --git a/generators/server/templates/src/main/java/package/web/rest/AuditResource.java.ejs b/generators/server/templates/src/main/java/package/web/rest/AuditResource.java.ejs
index e9f34ef165..e8c00efba2 100644
--- a/generators/server/templates/src/main/java/package/web/rest/AuditResource.java.ejs
+++ b/generators/server/templates/src/main/java/package/web/rest/AuditResource.java.ejs
@@ -19,8 +19,8 @@
 package <%=packageName%>.web.rest;
 
 import <%=packageName%>.service.AuditEventService;
+import <%=packageName%>.web.rest.util.PaginationUtil;
 
-import io.github.jhipster.web.util.PaginationUtil;;
 import io.github.jhipster.web.util.ResponseUtil;
 import org.springframework.boot.actuate.audit.AuditEvent;
 import org.springframework.data.domain.Page;
diff --git a/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs b/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs
index 9648575d02..962cbdc0ef 100644
--- a/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs
+++ b/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs
@@ -38,11 +38,10 @@ import <%=packageName%>.service.dto.<%= asDto('User') %>;
 import <%=packageName%>.web.rest.errors.BadRequestAlertException;
 import <%=packageName%>.web.rest.errors.EmailAlreadyUsedException;
 import <%=packageName%>.web.rest.errors.LoginAlreadyUsedException;
+import <%=packageName%>.web.rest.util.HeaderUtil;
 <%_ } _%>
-
-import io.github.jhipster.web.util.HeaderUtil;
 <%_ if (databaseType === 'sql' || databaseType === 'mongodb' || databaseType === 'couchbase') { _%>
-import io.github.jhipster.web.util.PaginationUtil;
+import <%=packageName%>.web.rest.util.PaginationUtil;
 <%_ } _%>
 <%_ if (!reactive) { _%>
 import io.github.jhipster.web.util.ResponseUtil;
@@ -50,7 +49,6 @@ import io.github.jhipster.web.util.ResponseUtil;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
 <%_ if (databaseType === 'sql' || databaseType === 'mongodb' || databaseType === 'couchbase') { _%>
     <%_ if (!reactive) { _%>
 import org.springframework.data.domain.Page;
@@ -121,9 +119,6 @@ public class UserResource {
 
     private final Logger log = LoggerFactory.getLogger(UserResource.class);
 
-    @Value("${spring.application.name:JHIPSTER}")
-    private String applicationName;
-
     private final UserService userService;
 <%_ if (authenticationType !== 'oauth2') { _%>
 
@@ -180,7 +175,7 @@ public class UserResource {
             <%= asEntity('User') %> newUser = userService.createUser(userDTO);
             mailService.sendCreationEmail(newUser);
             return ResponseEntity.created(new URI("/api/users/" + newUser.getLogin()))
-                .headers(HeaderUtil.createAlert(applicationName, <% if (enableTranslation) {%> "userManagement.created"<% } else { %> "A user is created with identifier " + newUser.getLogin()<% } %>, newUser.getLogin()))
+                .headers(HeaderUtil.createAlert(<% if (enableTranslation) {%> "userManagement.created"<% } else { %> "A user is created with identifier " + newUser.getLogin()<% } %>, newUser.getLogin()))
                 .body(newUser);
         }
         <%_ } else { _%>
@@ -204,7 +199,7 @@ public class UserResource {
             .map(user -> {
                 try {
                     return ResponseEntity.created(new URI("/api/users/" + user.getLogin()))
-                        .headers(HeaderUtil.createAlert(applicationName, "userManagement.created", user.getLogin()))
+                        .headers(HeaderUtil.createAlert( "userManagement.created", user.getLogin()))
                         .body(user);
                 } catch (URISyntaxException e) {
                     throw new RuntimeException(e);
@@ -237,7 +232,7 @@ public class UserResource {
         Optional<<%= asDto('User') %>> updatedUser = userService.updateUser(userDTO);
 
         return ResponseUtil.wrapOrNotFound(updatedUser,
-            HeaderUtil.createAlert(applicationName, <% if (enableTranslation) { %>"userManagement.updated"<% } else { %>"A user is updated with identifier " + userDTO.getLogin()<% } %>, userDTO.getLogin()));
+            HeaderUtil.createAlert(<% if (enableTranslation) { %>"userManagement.updated"<% } else { %>"A user is updated with identifier " + userDTO.getLogin()<% } %>, userDTO.getLogin()));
     <%_ } else { _%>
     public Mono<ResponseEntity<<%= asDto('User') %>>> updateUser(@Valid @RequestBody <%= asDto('User') %> userDTO) {
         log.debug("REST request to update User : {}", userDTO);
@@ -260,7 +255,7 @@ public class UserResource {
             })
             .switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND)))
             .map(user -> ResponseEntity.ok()
-                .headers(HeaderUtil.createAlert(applicationName, "userManagement.updated", userDTO.getLogin()))
+                .headers(HeaderUtil.createAlert("userManagement.updated", userDTO.getLogin()))
                 .body(user)
             );
     <%_ } _%>
@@ -339,12 +334,12 @@ public class UserResource {
     public ResponseEntity<Void> deleteUser(@PathVariable String login) {
         log.debug("REST request to delete User: {}", login);
         userService.deleteUser(login);
-        return ResponseEntity.ok().headers(HeaderUtil.createAlert(applicationName, <% if (enableTranslation) {%> "userManagement.deleted"<% } else { %> "A user is deleted with identifier " + login<% } %>, login)).build();
+        return ResponseEntity.ok().headers(HeaderUtil.createAlert(<% if (enableTranslation) {%> "userManagement.deleted"<% } else { %> "A user is deleted with identifier " + login<% } %>, login)).build();
     <%_ } else { _%>
     public Mono<ResponseEntity<Void>> deleteUser(@PathVariable String login) {
         log.debug("REST request to delete User: {}", login);
         return userService.deleteUser(login)
-            .map(it -> ResponseEntity.ok().headers(HeaderUtil.createAlert( applicationName, "userManagement.deleted", login)).build());
+            .map(it -> ResponseEntity.ok().headers(HeaderUtil.createAlert( "userManagement.deleted", login)).build());
     <%_ } _%>
     }
 <%_ } _%>
diff --git a/generators/server/templates/src/main/java/package/web/rest/errors/ExceptionTranslator.java.ejs b/generators/server/templates/src/main/java/package/web/rest/errors/ExceptionTranslator.java.ejs
index 7cb5918e83..fff66282b0 100644
--- a/generators/server/templates/src/main/java/package/web/rest/errors/ExceptionTranslator.java.ejs
+++ b/generators/server/templates/src/main/java/package/web/rest/errors/ExceptionTranslator.java.ejs
@@ -18,9 +18,8 @@
 -%>
 package <%=packageName%>.web.rest.errors;
 
-import io.github.jhipster.web.util.HeaderUtil;
+import <%=packageName%>.web.rest.util.HeaderUtil;
 
-import org.springframework.beans.factory.annotation.Value;
 <%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%>
 import org.springframework.dao.ConcurrencyFailureException;
 <%_ } _%>
@@ -82,9 +81,6 @@ _%>
     private static final String PATH_KEY = "path";
     private static final String VIOLATIONS_KEY = "violations";
 
-    @Value("${spring.application.name:JHIPSTER}")
-    private String applicationName;
-
     /**
      * Post-process the Problem payload to add the message key for the front-end if needed
      */
@@ -162,7 +158,7 @@ _%>
 
     @ExceptionHandler
     public <%- returnType %> handleBadRequestAlertException(BadRequestAlertException ex, <%= requestClass %> request) {
-        return create(ex, request, HeaderUtil.createFailureAlert(applicationName, ex.getEntityName(), ex.getErrorKey(), ex.getMessage()));
+        return create(ex, request, HeaderUtil.createFailureAlert(ex.getEntityName(), ex.getErrorKey(), ex.getMessage()));
     }
     <%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%>
 
diff --git a/generators/server/templates/src/main/java/package/web/rest/util/HeaderUtil.java.ejs b/generators/server/templates/src/main/java/package/web/rest/util/HeaderUtil.java.ejs
new file mode 100644
index 0000000000..f205a66230
--- /dev/null
+++ b/generators/server/templates/src/main/java/package/web/rest/util/HeaderUtil.java.ejs
@@ -0,0 +1,81 @@
+<%#
+ Copyright 2013-2019 the original author or authors from the JHipster project.
+
+ This file is part of the JHipster project, see https://www.jhipster.tech/
+ for more information.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-%>
+package <%=packageName%>.web.rest.util;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpHeaders;
+<%_
+let createdMessage;
+let updatedMessage;
+let deletedMessage;
+let errorMessage;
+_%>
+
+/**
+ * Utility class for HTTP headers creation.
+ */
+public final class HeaderUtil {
+
+    private static final Logger log = LoggerFactory.getLogger(HeaderUtil.class);
+
+    private static final String APPLICATION_NAME = "<%= angularAppName %>";
+
+    private HeaderUtil() {
+    }
+
+    public static HttpHeaders createAlert(String message, String param) {
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("X-" + APPLICATION_NAME + "-alert", message);
+        headers.add("X-" + APPLICATION_NAME + "-params", param);
+        return headers;
+    }
+<%
+    if (enableTranslation) {
+        createdMessage = 'APPLICATION_NAME + "." + entityName + ".created"';
+        updatedMessage = 'APPLICATION_NAME + "." + entityName + ".updated"';
+        deletedMessage = 'APPLICATION_NAME + "." + entityName + ".deleted"';
+        errorMessage = '"error." + errorKey';
+    } else {
+        createdMessage = '"A new " + entityName + " is created with identifier " + param';
+        updatedMessage = '"A " + entityName + " is updated with identifier " + param';
+        deletedMessage = '"A " + entityName + " is deleted with identifier " + param';
+        errorMessage = 'defaultMessage';
+    }
+%>
+    public static HttpHeaders createEntityCreationAlert(String entityName, String param) {
+        return createAlert(<%- createdMessage %>, param);
+    }
+
+    public static HttpHeaders createEntityUpdateAlert(String entityName, String param) {
+        return createAlert(<%- updatedMessage %>, param);
+    }
+
+    public static HttpHeaders createEntityDeletionAlert(String entityName, String param) {
+        return createAlert(<%- deletedMessage %>, param);
+    }
+
+    public static HttpHeaders createFailureAlert(String entityName, String errorKey, String defaultMessage) {
+        log.error("Entity processing failed, {}", defaultMessage);
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("X-" + APPLICATION_NAME + "-error", <%- errorMessage %>);
+        headers.add("X-" + APPLICATION_NAME + "-params", entityName);
+        return headers;
+    }
+}
diff --git a/generators/server/templates/src/main/java/package/web/rest/util/PaginationUtil.java.ejs b/generators/server/templates/src/main/java/package/web/rest/util/PaginationUtil.java.ejs
new file mode 100644
index 0000000000..1bdd0fe4c4
--- /dev/null
+++ b/generators/server/templates/src/main/java/package/web/rest/util/PaginationUtil.java.ejs
@@ -0,0 +1,98 @@
+<%#
+ Copyright 2013-2019 the original author or authors from the JHipster project.
+
+ This file is part of the JHipster project, see https://www.jhipster.tech/
+ for more information.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-%>
+package <%=packageName%>.web.rest.util;
+
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpHeaders;
+import org.springframework.web.util.UriComponentsBuilder;
+<%_ if (searchEngine === 'elasticsearch') { _%>
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+<%_ } _%>
+
+/**
+ * Utility class for handling pagination.
+ *
+ * <p>
+ * Pagination uses the same principles as the <a href="https://developer.github.com/v3/#pagination">GitHub API</a>,
+ * and follow <a href="http://tools.ietf.org/html/rfc5988">RFC 5988 (Link header)</a>.
+ */
+public final class PaginationUtil {
+
+    private PaginationUtil() {
+    }
+
+    public static <T> HttpHeaders generatePaginationHttpHeaders(Page<T> page, String baseUrl) {
+
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("X-Total-Count", Long.toString(page.getTotalElements()));
+        String link = "";
+        if ((page.getNumber() + 1) < page.getTotalPages()) {
+            link = "<" + generateUri(baseUrl, page.getNumber() + 1, page.getSize()) + ">; rel=\"next\",";
+        }
+        // prev link
+        if ((page.getNumber()) > 0) {
+            link += "<" + generateUri(baseUrl, page.getNumber() - 1, page.getSize()) + ">; rel=\"prev\",";
+        }
+        // last and first link
+        int lastPage = 0;
+        if (page.getTotalPages() > 0) {
+            lastPage = page.getTotalPages() - 1;
+        }
+        link += "<" + generateUri(baseUrl, lastPage, page.getSize()) + ">; rel=\"last\",";
+        link += "<" + generateUri(baseUrl, 0, page.getSize()) + ">; rel=\"first\"";
+        headers.add(HttpHeaders.LINK, link);
+        return headers;
+    }
+
+    private static String generateUri(String baseUrl, int page, int size) {
+        return UriComponentsBuilder.fromUriString(baseUrl).queryParam("page", page).queryParam("size", size).toUriString();
+    }
+    <%_ if (searchEngine === 'elasticsearch') { _%>
+
+    public static <T> HttpHeaders generateSearchPaginationHttpHeaders(String query, Page<T> page, String baseUrl) {
+        String escapedQuery;
+        try {
+            escapedQuery = URLEncoder.encode(query, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("X-Total-Count", Long.toString(page.getTotalElements()));
+        String link = "";
+        if ((page.getNumber() + 1) < page.getTotalPages()) {
+            link = "<" + generateUri(baseUrl, page.getNumber() + 1, page.getSize()) + "&query=" + escapedQuery + ">; rel=\"next\",";
+        }
+        // prev link
+        if ((page.getNumber()) > 0) {
+            link += "<" + generateUri(baseUrl, page.getNumber() - 1, page.getSize()) + "&query=" + escapedQuery + ">; rel=\"prev\",";
+        }
+        // last and first link
+        int lastPage = 0;
+        if (page.getTotalPages() > 0) {
+            lastPage = page.getTotalPages() - 1;
+        }
+        link += "<" + generateUri(baseUrl, lastPage, page.getSize()) + "&query=" + escapedQuery + ">; rel=\"last\",";
+        link += "<" + generateUri(baseUrl, 0, page.getSize()) + "&query=" + escapedQuery + ">; rel=\"first\"";
+        headers.add(HttpHeaders.LINK, link);
+        return headers;
+    }
+    <%_ } _%>
+}
diff --git a/package-lock.json b/package-lock.json
index 5917c4103c..73de14595e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1439,7 +1439,7 @@
                 },
                 "load-json-file": {
                     "version": "2.0.0",
-                    "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+                    "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
                     "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
                     "dev": true,
                     "requires": {
@@ -2546,9 +2546,9 @@
             }
         },
         "jhipster-core": {
-            "version": "3.6.11",
-            "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-3.6.11.tgz",
-            "integrity": "sha512-OibJay1+nwKk+mfRfuTrt2rW2h7BmGNfKWR7TQO4oYqG+I096EvJxZkIMCcjA9KuKLOZvnzfEi4UbtKyRTmHkg==",
+            "version": "3.6.10",
+            "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-3.6.10.tgz",
+            "integrity": "sha512-RHwWzN5XMeXd6uRrc8kcwyq/v4HRJLki+8oQpJwb1/VYCWq5l6gYpnsKg7ijA1EohES+MkCTBO3BkyVyjx0XTw==",
             "requires": {
                 "chevrotain": "4.2.0",
                 "fs-extra": "7.0.1",
diff --git a/package.json b/package.json
index 26940b8105..13e1595573 100644
--- a/package.json
+++ b/package.json
@@ -60,7 +60,7 @@
         "glob": "7.1.2",
         "gulp-filter": "5.1.0",
         "insight": "0.10.1",
-        "jhipster-core": "3.6.11",
+        "jhipster-core": "3.6.10",
         "js-object-pretty-print": "0.3.0",
         "js-yaml": "3.12.0",
         "lodash": "4.17.11",


Test patch:
diff --git a/generators/server/templates/src/test/java/package/web/rest/util/PaginationUtilUnitTest.java.ejs b/generators/server/templates/src/test/java/package/web/rest/util/PaginationUtilUnitTest.java.ejs
new file mode 100644
index 0000000000..131e58fc1d
--- /dev/null
+++ b/generators/server/templates/src/test/java/package/web/rest/util/PaginationUtilUnitTest.java.ejs
@@ -0,0 +1,178 @@
+<%#
+ Copyright 2013-2019 the original author or authors from the JHipster project.
+
+ This file is part of the JHipster project, see https://www.jhipster.tech/
+ for more information.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-%>
+package <%=packageName%>.web.rest.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.http.HttpHeaders;
+
+/**
+ * Tests based on parsing algorithm in app/components/util/pagination-util.service.js
+ *
+ * @see PaginationUtil
+ */
+public class PaginationUtilUnitTest {
+
+    @Test
+    public void generatePaginationHttpHeadersTest() {
+        String baseUrl = "/api/_search/example";
+        List<String> content = new ArrayList<>();
+        Page<String> page = new PageImpl<>(content, PageRequest.of(6, 50), 400L);
+        HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, baseUrl);
+        List<String> strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        String headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 4);
+        String expectedData = "</api/_search/example?page=7&size=50>; rel=\"next\","
+                + "</api/_search/example?page=5&size=50>; rel=\"prev\","
+                + "</api/_search/example?page=7&size=50>; rel=\"last\","
+                + "</api/_search/example?page=0&size=50>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+        List<String> xTotalCountHeaders = headers.get("X-Total-Count");
+        assertTrue(xTotalCountHeaders.size() == 1);
+        assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(400L));
+    }
+
+    <%_ if (searchEngine === 'elasticsearch') { _%>
+    @Test
+    public void commaTest() {
+        String baseUrl = "/api/_search/example";
+        List<String> content = new ArrayList<>();
+        Page<String> page = new PageImpl<>(content);
+        String query = "Test1, test2";
+        HttpHeaders headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, baseUrl);
+        List<String> strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        String headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 2);
+        String expectedData = "</api/_search/example?page=0&size=0&query=Test1%2C+test2>; rel=\"last\","
+                + "</api/_search/example?page=0&size=0&query=Test1%2C+test2>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+        List<String> xTotalCountHeaders = headers.get("X-Total-Count");
+        assertTrue(xTotalCountHeaders.size() == 1);
+        assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(0L));
+    }
+
+    @Test
+    public void multiplePagesTest() {
+        String baseUrl = "/api/_search/example";
+        List<String> content = new ArrayList<>();
+
+        // Page 0
+        Page<String> page = new PageImpl<>(content, PageRequest.of(0, 50), 400L);
+        String query = "Test1, test2";
+        HttpHeaders headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, baseUrl);
+        List<String> strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        String headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 3);
+        String expectedData = "</api/_search/example?page=1&size=50&query=Test1%2C+test2>; rel=\"next\","
+                + "</api/_search/example?page=7&size=50&query=Test1%2C+test2>; rel=\"last\","
+                + "</api/_search/example?page=0&size=50&query=Test1%2C+test2>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+        List<String> xTotalCountHeaders = headers.get("X-Total-Count");
+        assertTrue(xTotalCountHeaders.size() == 1);
+        assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(400L));
+
+        // Page 1
+        page = new PageImpl<>(content, PageRequest.of(1, 50), 400L);
+        query = "Test1, test2";
+        headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, baseUrl);
+        strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 4);
+        expectedData = "</api/_search/example?page=2&size=50&query=Test1%2C+test2>; rel=\"next\","
+                + "</api/_search/example?page=0&size=50&query=Test1%2C+test2>; rel=\"prev\","
+                + "</api/_search/example?page=7&size=50&query=Test1%2C+test2>; rel=\"last\","
+                + "</api/_search/example?page=0&size=50&query=Test1%2C+test2>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+        xTotalCountHeaders = headers.get("X-Total-Count");
+        assertTrue(xTotalCountHeaders.size() == 1);
+        assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(400L));
+
+        // Page 6
+        page = new PageImpl<>(content, PageRequest.of(6, 50), 400L);
+        headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, baseUrl);
+        strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 4);
+        expectedData = "</api/_search/example?page=7&size=50&query=Test1%2C+test2>; rel=\"next\","
+                + "</api/_search/example?page=5&size=50&query=Test1%2C+test2>; rel=\"prev\","
+                + "</api/_search/example?page=7&size=50&query=Test1%2C+test2>; rel=\"last\","
+                + "</api/_search/example?page=0&size=50&query=Test1%2C+test2>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+        xTotalCountHeaders = headers.get("X-Total-Count");
+        assertTrue(xTotalCountHeaders.size() == 1);
+        assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(400L));
+
+        // Page 7
+        page = new PageImpl<>(content, PageRequest.of(7, 50), 400L);
+        headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, baseUrl);
+        strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 3);
+        expectedData = "</api/_search/example?page=6&size=50&query=Test1%2C+test2>; rel=\"prev\","
+                + "</api/_search/example?page=7&size=50&query=Test1%2C+test2>; rel=\"last\","
+                + "</api/_search/example?page=0&size=50&query=Test1%2C+test2>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+    }
+
+    @Test
+    public void greaterSemicolonTest() {
+        String baseUrl = "/api/_search/example";
+        List<String> content = new ArrayList<>();
+        Page<String> page = new PageImpl<>(content);
+        String query = "Test>;test";
+        HttpHeaders headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, baseUrl);
+        List<String> strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        String headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 2);
+        String[] linksData = headerData.split(",");
+        assertTrue(linksData.length == 2);
+        assertTrue(linksData[0].split(">;").length == 2);
+        assertTrue(linksData[1].split(">;").length == 2);
+        String expectedData = "</api/_search/example?page=0&size=0&query=Test%3E%3Btest>; rel=\"last\","
+                + "</api/_search/example?page=0&size=0&query=Test%3E%3Btest>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+        List<String> xTotalCountHeaders = headers.get("X-Total-Count");
+        assertTrue(xTotalCountHeaders.size() == 1);
+        assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(0L));
+    }
+    <%_ }  _%>
+}
diff --git a/test/utils/expected-files.js b/test/utils/expected-files.js
index 00f4407926..0310720300 100644
--- a/test/utils/expected-files.js
+++ b/test/utils/expected-files.js
@@ -198,6 +198,7 @@ const expectedFiles = {
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/errors/LoginAlreadyUsedException.java`,
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/vm/package-info.java`,
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/vm/LoggerVM.java`,
+        `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/util/PaginationUtil.java`,
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/package-info.java`,
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/LogsResource.java`,
         `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/security/SecurityUtilsUnitTest.java`,