diff --git a/src/main/java/org/olat/commons/info/ui/InfoEditFormController.java b/src/main/java/org/olat/commons/info/ui/InfoEditFormController.java
index 542b6162ca5c4de6be1a3af013d1513848fd5a89..2f45542283321b38308e8d07332bc769e9b2d01b 100644
--- a/src/main/java/org/olat/commons/info/ui/InfoEditFormController.java
+++ b/src/main/java/org/olat/commons/info/ui/InfoEditFormController.java
@@ -55,6 +55,8 @@ import org.springframework.beans.factory.annotation.Autowired;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  */
 public class InfoEditFormController extends FormBasicController {
+	
+	private static final int MESSAGE_MAX_LENGTH = 32000;
 
 	private TextElement titleEl;
 	private FileElement attachmentEl;
@@ -96,7 +98,7 @@ public class InfoEditFormController extends FormBasicController {
 		messageEl.getEditorConfiguration().enableCharCount();
 		messageEl.getEditorConfiguration().setPathInStatusBar(true);
 		messageEl.setMandatory(true);
-		messageEl.setMaxLength(2000);
+		messageEl.setMaxLength(MESSAGE_MAX_LENGTH);
 		
 		attachmentEl = uifactory.addFileElement(getWindowControl(), "attachment", formLayout);
 		attachmentEl.setDeleteEnabled(true);
@@ -140,24 +142,24 @@ public class InfoEditFormController extends FormBasicController {
 	protected boolean validateFormLogic(UserRequest ureq) {
 		titleEl.clearError();
 		messageEl.clearError();
-		boolean allOk = true;
+		boolean allOk = super.validateFormLogic(ureq);
 		
 		String t = titleEl.getValue();
 		if(!StringHelper.containsNonWhitespace(t)) {
 			titleEl.setErrorKey("form.legende.mandatory", new String[] {});
-			allOk = false;
+			allOk &= false;
 		} else if (t.length() > 500) {
 			titleEl.setErrorKey("input.toolong", new String[] {"500", Integer.toString(t.length())});
-			allOk = false;
+			allOk &= false;
 		}
 		
 		String m = messageEl.getValue();
 		if(!StringHelper.containsNonWhitespace(m)) {
 			messageEl.setErrorKey("form.legende.mandatory", new String[] {});
-			allOk = false;
-		} else if (m.length() > 2000) {
-			messageEl.setErrorKey("input.toolong", new String[] {"2000", Integer.toString(m.length())});
-			allOk = false;
+			allOk &= false;
+		} else if (m.length() > MESSAGE_MAX_LENGTH) {
+			messageEl.setErrorKey("input.toolong", new String[] { Integer.toString(MESSAGE_MAX_LENGTH), Integer.toString(m.length()) });
+			allOk &= false;
 		}
 		
 		List<ValidationStatus> validation = new ArrayList<>();
@@ -165,7 +167,7 @@ public class InfoEditFormController extends FormBasicController {
 		if(validation.size() > 0) {
 			allOk &= false;
 		}
-		return allOk & super.validateFormLogic(ureq);
+		return allOk;
 	}
 	
 	public InfoMessage getInfoMessage() {
diff --git a/src/main/java/org/olat/core/commons/controllers/filechooser/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/commons/controllers/filechooser/_i18n/LocalStrings_pt_BR.properties
index f4d9df9ff82eb353c60702b1efe418eff8579a51..388d9815c1107c0768d931b981cd69793a222e55 100644
--- a/src/main/java/org/olat/core/commons/controllers/filechooser/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/core/commons/controllers/filechooser/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Fri Jan 23 21:55:27 CET 2015
+#Wed Feb 07 18:50:13 CET 2018
 button.create=Criar
 calloutTrigerLink.select.site=Selecionar p\u00E1gina
 calloutTriggerLink=Escolher arquivo/criar/enviar Link
@@ -7,6 +7,7 @@ chooseLink=Escolher arquivo
 command.create=Criar p\u00E1gina e abrir no editor
 command.edit=Abrir p\u00E1gina no editor
 command.preview.label=Selecionar arquivo
+command.remove=Remover p\u00E1gina
 createLink=Criar arquivo
 error.deleted=O arquivo configurado n\u00E3o existe. Crie o arquivo de novo ou escolha outro arquivo.
 error.name.empty=Por favor, insira um nome para o arquivo a ser criado
diff --git a/src/main/java/org/olat/core/commons/services/analytics/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/commons/services/analytics/ui/_i18n/LocalStrings_pt_BR.properties
new file mode 100644
index 0000000000000000000000000000000000000000..7b094a392ce60763e720b99a2ca267edf5b2aed1
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/analytics/ui/_i18n/LocalStrings_pt_BR.properties
@@ -0,0 +1,11 @@
+#Wed Feb 07 18:56:56 CET 2018
+admin.menu.title=Estat\u00EDsticas
+admin.menu.title.alt=An\u00E1lise do comportamento do usu\u00E1rio
+analytics.desc=Selecione um servi\u00E7o de estat\u00EDstica opcional para analisar o comportamento do usu\u00E1rio usando um servidor externo de estat\u00EDstica.
+analytics.disabled=Desativar m\u00F3dulo de estat\u00EDstica
+analytics.google.desc=Se voc\u00EA possui uma conta do google analytics, voc\u00EA pode configurar seu ID de rastreamento do google para executar dados estat\u00EDsticos detalhados e tempo real em tempo real sobre o uso de sua instala\u00E7\u00E3o do OpenOLAT.
+analytics.google.title=Configura\u00E7\u00E3o do Google Analytics
+analytics.google.tracking.id=Tracking ID
+analytics.privacy=Observe que voc\u00EA, como operador da plataforma, \u00E9 legalmente obrigado a informar seus usu\u00E1rios sobre o uso do Google Analytics.
+analytics.service=Servi\u00E7o de Estat\u00EDsticas
+analytics.title=M\u00F3dulo de estat\u00EDsticas
diff --git a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pt_BR.properties
index 7224f9abf3562593fef9c93da37e19ccf890acd8..30bed1f81a77f8b8f128141f594441f36e95e8c6 100644
--- a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Thu Jan 18 19:11:32 CET 2018
+#Wed Feb 07 21:25:16 CET 2018
 businessgroup.contact.bodytext=<p></p>---<p>Ir imediatamente para o grupo "{0}"\: {1}</p>
 businessgroup.contact.subject=Mensagem para grupo {0}
 contact.all.coaches=Todos os treinadores (coaches) de grupo
diff --git a/src/main/java/org/olat/ims/qti21/questionimport/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/ims/qti21/questionimport/_i18n/LocalStrings_pt_BR.properties
index 416277e03a0ed4e350b62618d3147e5336554601..ca92a538f532b7de37cc2c5bd7409a976932a1f0 100644
--- a/src/main/java/org/olat/ims/qti21/questionimport/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/ims/qti21/questionimport/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Tue Jul 25 22:13:31 CEST 2017
+#Wed Feb 07 18:57:01 CET 2018
 download.example=$org.olat.ims.qti.questionimport\:download.example
 error.at.line=Problema com a linha {0}
 form.importdata=$org.olat.ims.qti.questionimport\:form.importdata
@@ -6,6 +6,8 @@ input.title=$org.olat.ims.qti.questionimport\:input.title
 item.type.essay=$org.olat.ims.qti.editor\:item.type.essay
 item.type.fib=$org.olat.ims.qti.editor\:item.type.fib
 item.type.kprim=$org.olat.ims.qti.editor\:item.type.kprim
+item.type.match=$org.olat.ims.qti21.ui.editor\:new.match
+item.type.matchdraganddrop=$org.olat.ims.qti21.ui.editor\:new.matchdraganddrop
 item.type.mc=$org.olat.ims.qti.editor\:item.type.mc
 item.type.sc=$org.olat.ims.qti.editor\:item.type.sc
 table.header.points=$org.olat.ims.qti.questionimport\:table.header.points
diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_pt_BR.properties
index 9c7b09388bce85d681a13445680438790063f2ae..9c612202807f21007cb3d0f28343a112acbaeeb2 100644
--- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Mon Dec 18 21:56:43 CET 2017
+#Wed Feb 07 18:57:28 CET 2018
 actualPoints=$org.olat.modules.iq\:actualPoints
 admin.12.title=Configura\u00E7\u00F5es QTI 1.2
 admin.menu.title=QTI 2.1
@@ -177,6 +177,7 @@ questions=N\u00FAmero de perguntas no teste
 reset.data=Resetar dados
 reset.test.data.acknowledge=Eu entendo que os dados ser\u00E3o exclu\u00EDdos definitivamente.
 reset.test.data.text=Deseja realmente redefinir os dados de avalia\u00E7\u00E3o do teste? Os resultados de <strong>{0} usu\u00E1rios</strong> ser\u00E3o exclu\u00EDdos definitivamente.
+reset.test.data.text.identity=Voc\u00EA realmente deseja redefinir os dados de avalia\u00E7\u00E3o do teste? Os resultados de <strong>"{0}"</strong> ser\u00E3o definitivamente exclu\u00EDdos.
 reset.test.data.text.ref=Voc\u00EA n\u00E3o pode excluir todos os dados deste teste porque \u00E9 referenciado pelos seguintes recursos "{0}".
 reset.test.data.title=Redefinir dados do teste
 response=Resposta
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_pt_BR.properties
index c585c02be3b9d279134dba8ef7ddafe9d54d3c8e..37dc6454065aa946abb69194fc9bae62acb2f335 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Thu Nov 23 16:55:48 CET 2017
+#Wed Feb 07 18:58:12 CET 2018
 MULTIPLE=M\u00FAltipla escolha
 SINGLE=Escolha \u00FAnica
 add=Adicionar
@@ -17,6 +17,8 @@ change.elements=Edi\u00E7\u00E3o
 convert=Converter
 convert.alien=Converter
 convert.to=Converter para\:
+copy.at=Copiado em
+copy.qpool.question=fa\u00E7a uma c\u00F3pia e edite
 correct.answers=Correto
 cut.value=Cortar valor
 delete=Excluir
@@ -134,6 +136,7 @@ form.match=Combine
 form.metadata=Metadados
 form.metadata.description=Descri\u00E7\u00E3o
 form.metadata.title=T\u00EDtulo
+form.pool=Banco de perguntas
 form.score=Pontua\u00E7\u00E3o
 form.score.answer.correct=Correto
 form.score.answer.points=Pontos
@@ -156,6 +159,8 @@ form.testPart.navigationMode.linear=Linear
 form.testPart.navigationMode.nonlinear=N\u00E3o linear
 form.unkown=Desconhecido
 form.upload=Upload de arquivo
+general.identifier=$org.olat.modules.qpool.ui\:general.identifier
+general.master.identifier=$org.olat.modules.qpool.ui\:general.master.identifier
 hotspot.layout=Layout
 hotspot.layout.green=Verde
 hotspot.layout.inverted=Invertido
@@ -175,6 +180,7 @@ item.session.control.attempts=Tentativas
 item.session.control.attempts.hint=Esta limita\u00E7\u00E3o das tentativas s\u00F3 \u00E9 v\u00E1lida para as partes n\u00E3o para todo o teste. As tentativas para todo o teste podem ser limitadas em "Op\u00E7\u00F5es".
 item.session.control.show.solution=Mostrar solu\u00E7\u00E3o
 item.session.control.show.solution.hint=Solu\u00E7\u00E3o \u00E9 mostrada na revis\u00E3o tamb\u00E9m.
+lifecycle.version=$org.olat.modules.qpool.ui\:lifecycle.version
 math.operator.bigger=>
 math.operator.biggerEquals=>\=
 math.operator.equals=\=
@@ -211,6 +217,7 @@ new.testpart=Parte do teste
 new.upload=Enviar arquivo
 preview=Amostra
 preview.solution=Amostra de solu\u00E7\u00E3o
+rights.owners=$org.olat.modules.qpool.ui\:rights.owners
 time.limit.max=Tempo limite (minutos)
 title.add=$org.olat.ims.qti.editor\:title.add
 tools.change.copy=$org.olat.ims.qti.editor\:tools.change.copy
@@ -232,6 +239,7 @@ warning.atleastone=Por favor, escolha pelo menos um elemento.
 warning.atleastonesection=A se\u00E7\u00E3o n\u00E3o pode ser exclu\u00EDda. Um teste ou uma parte de teste deve conter pelo menos uma se\u00E7\u00E3o.
 warning.conversion.list=Foram encontradas algumas incompatibilidades\:
 warning.conversion.standard=Existe o risco de perda de dados ap\u00F3s a convers\u00E3o, mas n\u00E3o foram encontradas incompatibilidades flagrantes.
+warning.copy.from.pool=A quest\u00E3o foi copiada do banco de perguntas. Voc\u00EA pode encontrar a pergunta original sob o ID mestre.
 warning.custom.operator=Esta quest\u00E3o cont\u00E9m uma extens\u00E3o espec\u00EDfica do criador que atualmente n\u00E3o \u00E9 suportada pelo OpenOLAT.
 warning.feedback.cutvalue=O feedback \u00E9 baseado no valor de corte. Voc\u00EA precisa defini-lo primeiro.
 warning.in.use=O recurso j\u00E1 \u00E9 usado para fins de avalia\u00E7\u00E3o. A edi\u00E7\u00E3o \u00E9 limitada.
diff --git a/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_pt_BR.properties
index c013cb4be75e33461584b6a7238b2e64eb2b1938..bf4b33b957104af0988ae862738fe5dde743ee93 100644
--- a/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/modules/assessment/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Tue Nov 22 12:51:52 CET 2016
+#Wed Feb 07 18:58:59 CET 2018
 assessment.status.done=avaliado
 assessment.status.inProgress=Iniciado
 assessment.status.inReview=Para revisar
@@ -24,9 +24,11 @@ filter.passed=Aprovado
 index.introduction=Avalie os participantes deste recurso did\u00E1tico usando sua ferramenta de avalia\u00E7\u00E3o. Isso permite-lhe acessar e modificar os resultados dos testes.
 reopen=Reabrir para avalia\u00E7\u00E3o
 review=Revis\u00E3o
+run.ended=Conclu\u00EDdo
 save.done=Salvar e definir status como "feito"
 statistics.small.overview=Vis\u00E3o geral das estat\u00EDsticas
 table.header.assessmentStatus=Status
+table.header.completion=Conclus\u00E3o
 table.header.elements.toReview=Para revisar
 table.header.name=Usu\u00E1rio
 table.header.numOfInitialLaunch=Recurso aberto pelo menos uma vez
diff --git a/src/main/java/org/olat/modules/docpool/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/docpool/ui/_i18n/LocalStrings_pt_BR.properties
index 344f17fbb2ee9065ece5f5b21533349b7d6c07ac..1196330cefa00afba532bd6c37bbc1c020e02b0a 100644
--- a/src/main/java/org/olat/modules/docpool/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/modules/docpool/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Thu Nov 23 17:53:39 CET 2017
+#Wed Feb 07 19:00:18 CET 2018
 admin.description=O reservat\u00F3rio (pool) de documentos oferece uma biblioteca de documentos com uma estrutura autom\u00E1tica baseada em taxonomia e compet\u00EAncias.
 admin.menu.title=Reservat\u00F3rio de documentos
 admin.menu.title.alt=Reservat\u00F3rio de documentos
@@ -34,3 +34,4 @@ teach.can.read.parent.levels.explain.1=Permitir acesso de leitura a
 teach.can.read.parent.levels.explain.2=n\u00EDveis acima
 teach.can.write=Permitir acesso de grava\u00E7\u00E3o
 teach.competence=Compet\u00EAncia do professor
+warning.taxonomy.index.emtpy=A p\u00E1gina de informa\u00E7\u00F5es do "reservat\u00F3rio" de documentos n\u00E3o foi configurada corretamente. Pergunte ao administrador do sistema para adicionar uma p\u00E1gina de informa\u00E7\u00F5es na <strong>administra\u00E7\u00E3o do reservat\u00F3rio de documentos</strong>.
diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_pt_BR.properties
index ea71db01cc30b7f04522e1cd7e5357c31522f5a0..9d474bae8828fa12dd8b7e719496bcdc2465019c 100644
--- a/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Mon Dec 18 21:57:21 CET 2017
+#Wed Feb 07 19:00:20 CET 2018
 add.my.account=Eu tenho uma conta
 add.organizer=Adicionar um novo organizador
 add.training=Adicionar novo treinamento
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_pt_BR.properties
index 344e09571f2b171ecb77251f8af6b224cc73ff0e..e5cfb37910fda43fab351c48906d52b003d1ab47 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Tue Sep 26 23:33:17 CEST 2017
+#Wed Feb 07 20:56:36 CET 2018
 access=Acesso
 access.binder=As pessoas abaixo t\u00EAm acesso \u00E0 carteira do portf\u00F3lio
 access.rights=Adicionar direitos de acesso
@@ -72,6 +72,7 @@ binder.num.sections.pages={0} se\u00E7\u00F5es com um total de {1} entradas
 binder.status=Status
 binder.title=Pasta do portf\u00F3lio {0}
 binders=Pastas (liga\u00E7\u00F5es)
+bookmark=Marcar como favorito
 categories=Categorias
 categories.add=Adicionar categorias
 categories.hint=Insira a categoria do texto e pressione "Enter" para criar a categoria desejada.
@@ -91,6 +92,8 @@ comment.several={0} coment\u00E1rios
 comment.title=Coment\u00E1rios
 comment.zero=Ainda sem coment\u00E1rios
 compare.evaluations=Avalia\u00E7\u00E3o
+confirm.close.page=Deseja concluir esta entrada? A entrada \u00E9 exibida como conclu\u00EDda para o aprendiz.
+confirm.close.page.other.coaches=As seguintes pessoas tamb\u00E9m t\u00EAm acesso a esta entrada\:
 confirmation=Confirma\u00E7\u00E3o
 create.binder=Criar pasta (liga\u00E7\u00E3o)
 create.empty.binder=Nova pasta vazia
@@ -162,6 +165,7 @@ export.page=Exportar p\u00E1gina
 export.page.onepage=Em p\u00E1gina \u00FAnica
 export.page.pdf=Exportar p\u00E1gina como PDF
 fileupload=Imagem teaser
+filter.sections.empty=Sem se\u00E7\u00F5es abertas
 filter.show.all=Mostrar tudo
 firstName=Primeiro nome
 go.to.trash=Ir para lixeira
@@ -189,6 +193,8 @@ invitation.mail.success=As pessoas convidadas foram notificadas com sucesso via
 issue=Edi\u00E7\u00E3o
 language=Idioma
 lastName=\u00DAltimo nome
+leave=Remover
+leave.explain=Voc\u00EA realmente deseja remover este fich\u00E1rio da lista? O autor do fich\u00E1rio precisar\u00E1 dar-lhe acesso novamente se quiser visitar novamente.
 mail=E-mail
 mail.body=Corpo do Email
 mail.subject=Assunto do Email
@@ -326,6 +332,9 @@ section.up=Subir
 select.form=Selecione uma pesquisa
 select.mymap=$org.olat.course.nodes.portfolio\:select.mymap
 series=S\u00E9ries
+shared.binders=Fich\u00E1rios
+shared.bookmarks=Favoritos
+shared.entries=Entradas / A fazer
 shared.with.me=Compartilhado comigo
 shared.with.me.text=Uma lista de todos os itens compartilhados por voc\u00EA.
 show.help.binder=Ajuda
@@ -339,6 +348,9 @@ status.inRevision=$\:status.in.revision
 status.not.started=n\u00E3o iniciado
 status.published=publicado
 status.submitted=enviado
+status.user.done=Feito
+status.user.inProcess=Processando
+status.user.incoming=Novo
 summary=Resumo
 summary.placeholder=Breve resumo sobre o conte\u00FAdo
 table.grading.failed.points=<span class\="o_state o_failed"><i class\="o_icon o_icon_failed"> </i> {0} Ponto(s)</span>
@@ -347,14 +359,19 @@ table.grading.passed.points=<span class\="o_state o_passed"><i class\="o_icon o_
 table.grading.points={0} Ponto(s)
 table.header.categories=Categorias
 table.header.change.status=Status
+table.header.closed=Encerrado
 table.header.collection.date=Coletados em
 table.header.course=Cursos
 table.header.course.node=Elemento Curso
 table.header.date=Data
 table.header.down=<i class\='o_icon o_icon o_icon-lg o_icon_move_down'> </i>
+table.header.draft=$\:status.draft
 table.header.grading=Coletados em
+table.header.inRevision=$\:status.in.revision
 table.header.key=ID
 table.header.lastUpdate=\u00DAltima atualiza\u00E7\u00E3o
+table.header.mark=<i class\="o_icon o_icon_bookmark_header o_icon-lg" title\="Favorit"> </i>
+table.header.new=Novo
 table.header.numpages=\# Entradas
 table.header.open=Iniciar
 table.header.open.sections=Abrir
@@ -365,6 +382,8 @@ table.header.score=Pontos
 table.header.section=Se\u00E7\u00E3o
 table.header.select.sections=Se\u00E7\u00F5es
 table.header.status=Status
+table.header.status.user=Status-Usu\u00E1rio
+table.header.status.viewer=Status
 table.header.title=T\u00EDtulo
 table.header.type=Tipo
 table.header.up=<i class\='o_icon o_icon o_icon-lg o_icon_move_up'> </i>
diff --git a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties
index 6fd61828b24885715083899acbd5aa3ccd2f19fa..b725f6c9d58eded0f8445c58a36bd172589722eb 100644
--- a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties
@@ -1,4 +1,4 @@
-#Thu Nov 23 17:53:58 CET 2017
+#Wed Feb 07 22:18:54 CET 2018
 add=+
 add.to.list=Adicionar \u00E0 lista
 admin.configuration.title=Banco de perguntas
@@ -9,12 +9,27 @@ author.item=Direitos de autor
 bulk.change=Alterar metadados
 bulk.change.description=Aqui voc\u00EA pode mudar em uma \u00FAnica etapa, v\u00E1rios atributos de v\u00E1rias perguntas.
 classification.taxonomic.path=Assunto caminho
+classification.taxonomic.path.incl=Assuntos
 classification.taxonomy.level=Assunto
 classification.taxonomy.parents=Caminho
+collection.add.to.source=Adicione perguntas \u00E0 lista "{0}"
 collection.creationDate=Criado em
 collection.name=Nome
+commands=Pergunta
+confirm.copy.button=Copiar
+confirm.copy.editable=Permitir que outros usu\u00E1rios editem a pergunta
+confirm.copy.message=Voc\u00EA realmente quer copiar as perguntas?
+confirm.copy.questions=Perguntas
+confirm.copy.title=Copiar
+confirm.delete.button=Excluir
+confirm.delete.confirmation=Excluir todas as perguntas
+confirm.delete.confirmation.error=Por favor confirme
+confirm.delete.message=Voc\u00EA deseja realmente excluir essas perguntas permanentemente? Elas n\u00E3o podem ser recuperados.
+confirm.delete.questions=Perguntas
 confirm.delete.source=Voc\u00EA realmente deseja excluir esta lista?
+confirm.delete.title=Excluir
 confirm.unshare=Voc\u00EA realmente deseja remover essa quest\u00E3o "{0}"?
+convert.editable=Permitir que outros usu\u00E1rios editem a pergunta
 convert.format=Formato
 convert.item=Converter
 convert.item.msg=Deseja converter as {0} quest\u00F5es no seguinte formato?
@@ -22,12 +37,16 @@ convert.item.not.possible=Voc\u00EA n\u00E3o selecionou nenhuma pergunta que voc
 convert.item.successful={0} pergunta(s) convertida(s) com \u00EAxito.
 convert.item.warning={0} n\u00E3o foi convertida.
 convert.qti21.hint=Voc\u00EA encontrar\u00E1 informa\u00E7\u00F5es sobre a convers\u00E3o de QTI 1.2 para QTI 2.1 no manual
+convert.questions=Perguntas
 copy=Copiar
 create.collection.description=D\u00EA um nome \u00E0 sua lista.
 create.list=Criar lista
 create.pool=Criar reservat\u00F3rio
 create.success=1 pergunta foi criada.
 create.test=Criar teste
+create.test.format.qti12=QTI 1.2
+create.test.format.qti21=QTI 2.1
+create.test.no.formats=As perguntas selecionadas t\u00EAm o formato errado para criar um teste.
 delete.collection=Excluir lista
 delete.item=Excluir
 delete.pool=Excluir reservat\u00F3rio
@@ -43,8 +62,41 @@ educational.learningTime.minute=m
 educational.learningTime.second=s
 error.input.toolong=O texto que voc\u00EA digitou \u00E9 muito grande ({1} caracteres). Apenas {1} caracteres s\u00E3o permitidos.
 error.select.one=Voc\u00EA precisa selecionar pelo menos uma quest\u00E3o.
+error.select.one.author=Voc\u00EA precisa selecionar pelo menos uma pergunta, para a qual voc\u00EA pode alterar os autores.
+error.select.one.convert=Voc\u00EA precisa selecionar pelo menos uma pergunta, que voc\u00EA possa converter.
+error.select.one.copy=Voc\u00EA precisa selecionar pelo menos uma pergunta, que voc\u00EA possa copiar.
+error.select.one.create.test=Voc\u00EA precisa selecionar pelo menos uma pergunta, que voc\u00EA possa usar em um teste.
+error.select.one.delete=Voc\u00EA precisa selecionar pelo menos uma pergunta, que voc\u00EA possa excluir.
+error.select.one.export=Voc\u00EA precisa selecionar pelo menos uma pergunta, que voc\u00EA possa exportar.
+error.select.one.metadata=Voc\u00EA precisa selecionar pelo menos uma pergunta, que voc\u00EA possa editar.
+error.select.one.remove=Voc\u00EA precisa selecionar pelo menos uma pergunta, que voc\u00EA possa remover.
 error.wrongFloat=Formato de n\u00FAmero errado. Exemplo\: 1.0, 0.5, 0.2
 export.item=Exportar
+export.log=Log
+export.log.header.additional.informations=$\:general.additional.informations
+export.log.header.assessment.type=$\:question.assessmentType
+export.log.header.context=$\:educational.context
+export.log.header.copyright=$\:rights.copyright
+export.log.header.coverage=$\:general.coverage
+export.log.header.creator=$\:rights.creator
+export.log.header.differentiation=$\:question.differentiation
+export.log.header.difficulty=$\:question.difficulty
+export.log.header.item.type=$\:question.type
+export.log.header.keywords=$\:general.keywords
+export.log.header.language=$\:general.language
+export.log.header.learningTime=$\:educational.learningTime
+export.log.header.log.action=A\u00E7\u00E3o
+export.log.header.log.author=Alterado por
+export.log.header.log.date=Data
+export.log.header.numOfAnswerAlternatives=$\:question.numOfAnswerAlternatives
+export.log.header.status=$\:lifecycle.status
+export.log.header.stdevDifficulty=$\:question.stdevDifficulty
+export.log.header.taxonomic.path=$\:classification.taxonomic.path
+export.log.header.title=$\:general.title
+export.log.header.topic=$\:general.topic
+export.log.header.usage=$\:question.usage
+export.log.header.version=$\:lifecycle.version
+export.overview.accept=Usado
 general=Geral
 general.additional.informations=Adicionar informa\u00E7\u00E3o
 general.additional.informations.long=Informa\u00E7\u00F5es adicionais
@@ -55,6 +107,9 @@ general.key=DBkey
 general.keywords=Palavras-chave
 general.language=Idioma
 general.master.identifier=Master ID
+general.taxonomy.level=Assunto
+general.taxonomy.path={0}
+general.title=T\u00EDtulo
 general.topic=T\u00F3pico
 import.excellike.12=Importa\u00E7\u00E3o QTI 1.2 Excel via copia & cola
 import.excellike.21=Importa\u00E7\u00E3o QTI 2.1 Excel via copia & cola
@@ -69,6 +124,7 @@ item.collectioned=Pergunta {0} foi adicionada \u00E0 lista.
 item.copied={0} pergunta(s) foram copiadas.
 item.deleted=Pergunta foi exclu\u00EDda
 item.level=N\u00EDvel
+item.numbers.of={0} / {1}
 item.pooled=Pergunta {0} foi adicionada ao reservat\u00F3rio.
 item.shared=Pergunta {0} foi compartilhada.
 item.type.drawing=Desenhando
@@ -86,13 +142,18 @@ item.type.unkown=Desconhecido
 item.type.upload=Enviar arquivo
 lifecycle.status=Status
 lifecycle.status.draft=Rascunho
+lifecycle.status.endOfLife=Fim da vida
 lifecycle.status.finalVersion=Final
+lifecycle.status.last.modified=Status modificado pela \u00FAltima vez
 lifecycle.status.review=Revis\u00E3o
 lifecycle.status.revised=Revisado
 lifecycle.status.unavailable=Indispon\u00EDvel
 lifecycle.version=Vers\u00E3o
 list=Listas
+locked.readonly=A pergunta est\u00E1 aberta por '{0}'. Portanto, voc\u00EA n\u00E3o consegue editar a pergunta.
+manage.owners=Editar
 mark=<i class\="o_icon o_icon_bookmark_header o_icon-lg" title\="Favorito"> </i>s
+mark.add.to.source=Marque as perguntas como favoritos
 menu.admin=Administra\u00E7\u00E3o
 menu.admin.alt=Administra\u00E7\u00E3o
 menu.admin.levels=N\u00EDvel
@@ -100,24 +161,37 @@ menu.admin.levels.alt=N\u00EDvel
 menu.admin.licenses=Licen\u00E7a
 menu.admin.licenses.alt=Licen\u00E7a
 menu.admin.pools=Administra\u00E7\u00E3o do reservat\u00F3rio
+menu.admin.review.process=Revisar processo
 menu.admin.studyfields=Assunto
 menu.admin.studyfields.alt=Assunto
 menu.admin.types=Tipo
 menu.admin.types.alt=Tipo
+menu.database=Meu banco de perguntas
 menu.database.favorit=Meus favoritos
 menu.database.favorit.alt=Meus Favoritos
 menu.database.my=Minhas perguntas
 menu.database.my.alt=Minhas quest\u00F5es
+menu.final=Final
 menu.pools=Reservat\u00F3rio
 menu.pools.alt=Reservat\u00F3rio
 menu.pools.main=Cat\u00E1logo
 menu.pools.main.alt=Cat\u00E1logo
+menu.queries=Perguntas
+menu.queries.all=Todas perguntas
+menu.queries.without.author=Sem autor
+menu.queries.without.taxonomy.level=Sem departamento
+menu.ratings=Classifica\u00E7\u00F5es
+menu.review=Revis\u00E3o
 menu.share=Compartilhamentos p\u00FAblicos
+metadata.hide=Metadados
 metadatas=Metadados
+my.competences=Meus assuntos
 my.list=Minhas listas
 my.share=Meus compartilhamentos
 new.item=Criar pergunta
 next=Pr\u00F3ximo
+numberOfRatings=N\u00FAmero de classifica\u00E7\u00F5es
+pool.add.to.source=Adicione perguntas ao reservat\u00F3rio "{0}"
 pool.key=ID
 pool.name=Nome
 pool.owners=Propriet\u00E1rios
diff --git a/src/main/java/org/olat/registration/PwChangeController.java b/src/main/java/org/olat/registration/PwChangeController.java
index a91bbc2a2b82917a335136bd415b303969ca1249..28c7220b3648f8a8ee9001f3d721ebfbdb3cae04 100644
--- a/src/main/java/org/olat/registration/PwChangeController.java
+++ b/src/main/java/org/olat/registration/PwChangeController.java
@@ -216,9 +216,8 @@ public class PwChangeController extends BasicController {
 				sendEmail(ureq, identity);
 			}
 		} else {
-			// no user exists, this is an error in the pwchange page
-			// REVIEW:pb:2009-11-23:gw, setter should not be necessary. -> check the error already in th emailOrUsernameCtr
-			emailOrUsernameCtr.setUserNotIdentifiedError();
+			logWarn("Failed to identify user in password change workflow: " + emailOrUsername, null);
+			stepSendEmailConfiration();
 		}
 	}
 	
@@ -256,7 +255,7 @@ public class PwChangeController extends BasicController {
 
 		String emailAdress = identity.getUser().getProperty(UserConstants.EMAIL, locale); 
 		if (!StringHelper.containsNonWhitespace(emailAdress)) {
-			emailOrUsernameCtr.setUserNotIdentifiedError();
+			stepSendEmailConfiration();//for security reason, don't show an error, go simply to the next step
 			return null;
 		}
 		
@@ -290,16 +289,20 @@ public class PwChangeController extends BasicController {
 		MailerResult result = mailManager.sendExternMessage(bundle, null, false);
 		if(result.getReturnCode() == MailerResult.OK) {
 			getWindowControl().setInfo(translate("email.sent"));
-			// prepare next step
-			wic.setCurStep(2);
-			myContent.contextPut("text", translate("step2.pw.text"));
-			emailOrUsernameCtr.getInitialComponent().setVisible(false);
-		} else {
-			showError("email.notsent");
 		}
+		stepSendEmailConfiration();
 		return tk;
 	}
 	
+	/**
+	 * Activate the step 2
+	 */
+	private void stepSendEmailConfiration() {
+		wic.setCurStep(2);
+		myContent.contextPut("text", translate("step2.pw.text"));
+		emailOrUsernameCtr.getInitialComponent().setVisible(false);
+	}
+	
 	/**
 	 * Look for user in "Person" and "user" tables. Fist search by user name
 	 * and if the user cannot be found, search by email address.
diff --git a/src/main/java/org/olat/restapi/repository/course/CourseWebService.java b/src/main/java/org/olat/restapi/repository/course/CourseWebService.java
index 8a122cf3b5f7a1a559cc8ec5b470a3e852a09830..b25d989c073e670b7952752470e2ebd73ce30035 100644
--- a/src/main/java/org/olat/restapi/repository/course/CourseWebService.java
+++ b/src/main/java/org/olat/restapi/repository/course/CourseWebService.java
@@ -93,7 +93,6 @@ import org.olat.resource.OLATResource;
 import org.olat.resource.OLATResourceManager;
 import org.olat.resource.accesscontrol.ACService;
 import org.olat.resource.accesscontrol.AccessResult;
-import org.olat.restapi.security.RestSecurityHelper;
 import org.olat.restapi.support.ObjectFactory;
 import org.olat.restapi.support.vo.CourseConfigVO;
 import org.olat.restapi.support.vo.CourseVO;
@@ -276,37 +275,33 @@ public class CourseWebService {
 	@Path("file")
 	@Produces({ "application/zip", MediaType.APPLICATION_OCTET_STREAM })
 	public Response getRepoFileById(@Context HttpServletRequest request) {
-		if(!isAuthor(request)) {
-			return Response.serverError().status(Status.UNAUTHORIZED).build();
-		}
-
 		RepositoryService rs = CoreSpringFactory.getImpl(RepositoryService.class);
 		RepositoryEntry re = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
 		if (re == null) {
 			return Response.serverError().status(Status.NOT_FOUND).build();
 		}
-
+		
 		RepositoryHandler typeToDownload = RepositoryHandlerFactory.getInstance().getRepositoryHandler(re);
 		if (typeToDownload == null) {
 			return Response.serverError().status(Status.NOT_FOUND).build();
 		}
+		
+		Identity identity = getIdentity(request);
+		boolean canDownload = re.getCanDownload() && typeToDownload.supportsDownload();
+		if (isAdmin(request) || RepositoryManager.getInstance().isOwnerOfRepositoryEntry(identity, re)) {
+			canDownload = true;
+		} else if(!isAuthor(request)) {
+			return Response.serverError().status(Status.UNAUTHORIZED).build();
+		}
+		if(!canDownload) {
+			return Response.serverError().status(Status.UNAUTHORIZED).build();
+		}
 
 		OLATResource ores = OLATResourceManager.getInstance().findResourceable(re.getOlatResource());
 		if (ores == null) {
 			return Response.serverError().status(Status.NOT_FOUND).build();
 		}
 
-		Identity identity = getIdentity(request);
-		boolean isAuthor = RestSecurityHelper.isAuthor(request);
-		boolean isOwner = RepositoryManager.getInstance().isOwnerOfRepositoryEntry(identity, re);
-		if (!(isAuthor | isOwner)) {
-			return Response.serverError().status(Status.UNAUTHORIZED).build();
-		}
-		boolean canDownload = re.getCanDownload() && typeToDownload.supportsDownload();
-		if (!canDownload) {
-			return Response.serverError().status(Status.NOT_ACCEPTABLE).build();
-		}
-
 		boolean isAlreadyLocked = typeToDownload.isLocked(ores);
 		LockResult lockResult = null;
 		try {
diff --git a/src/test/java/org/olat/restapi/CourseTest.java b/src/test/java/org/olat/restapi/CourseTest.java
index b5f47ec8bf02ac80b2bb86474e502fbd0ba47a58..2bb9fb861a86d1cce1243f9d8b4572167ad0c7be 100644
--- a/src/test/java/org/olat/restapi/CourseTest.java
+++ b/src/test/java/org/olat/restapi/CourseTest.java
@@ -614,6 +614,62 @@ public class CourseTest extends OlatJerseyTestCase {
 		Assert.assertEquals(0, repositoryEntry.getAccess());
 	}
 	
+	@Test
+	public void exportCourse()
+	throws IOException, URISyntaxException {
+		Assert.assertTrue(conn.login("administrator", "openolat"));
+		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("course-owner");
+		RepositoryEntry course = JunitTestHelper.deployBasicCourse(author);
+		dbInstance.closeSession();
+		
+		URI request = UriBuilder.fromUri(getContextURI()).path("repo").path("courses")
+				.path(course.getOlatResource().getResourceableId().toString()).path("file").build();
+		HttpGet method = conn.createGet(request, "application/zip", true);
+		HttpResponse response = conn.execute(method);
+
+		Assert.assertEquals(200, response.getStatusLine().getStatusCode());
+		byte[] exportedFile = EntityUtils.toByteArray(response.getEntity());
+		Assert.assertTrue(exportedFile.length > 1000);	
+	}
+	
+	@Test
+	public void exportCourse_owner()
+	throws IOException, URISyntaxException {
+		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("course-owner-2");
+		RepositoryEntry course = JunitTestHelper.deployBasicCourse(author);
+		dbInstance.closeSession();
+		
+		Assert.assertTrue(conn.login(author.getName(), "A6B7C8"));
+		
+		URI request = UriBuilder.fromUri(getContextURI()).path("repo").path("courses")
+				.path(course.getOlatResource().getResourceableId().toString()).path("file").build();
+		HttpGet method = conn.createGet(request, "application/zip", true);
+		HttpResponse response = conn.execute(method);
+
+		Assert.assertEquals(200, response.getStatusLine().getStatusCode());
+		byte[] exportedFile = EntityUtils.toByteArray(response.getEntity());
+		Assert.assertTrue(exportedFile.length > 1000);	
+	}
+	
+	@Test
+	public void exportCourse_notOwner()
+	throws IOException, URISyntaxException {
+		Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("course-owner-3");
+		Identity otherUser = JunitTestHelper.createAndPersistIdentityAsRndUser("course-owner-4");
+		RepositoryEntry course = JunitTestHelper.deployBasicCourse(owner);
+		dbInstance.closeSession();
+		
+		Assert.assertTrue(conn.login(otherUser.getName(), "A6B7C8"));
+		
+		URI request = UriBuilder.fromUri(getContextURI()).path("repo").path("courses")
+				.path(course.getOlatResource().getResourceableId().toString()).path("file").build();
+		HttpGet method = conn.createGet(request, "application/zip", true);
+		HttpResponse response = conn.execute(method);
+
+		Assert.assertEquals(401, response.getStatusLine().getStatusCode());
+		EntityUtils.consume(response.getEntity());
+	}
+	
 	protected List<UserVO> parseUserArray(InputStream body) {
 		try {
 			ObjectMapper mapper = new ObjectMapper(jsonFactory);