diff --git a/Gulpfile.js b/Gulpfile.js
index 1941a2a..e9289c2 100644
--- a/Gulpfile.js
+++ b/Gulpfile.js
@@ -271,10 +271,12 @@ gulp.task('i18n', function() {
genI18nJsFile('blog.zh', [], keys);
genI18nJsFile('blog.en', [], keys);
genI18nJsFile('blog.fr', [], keys);
+ genI18nJsFile('blog.pt', [], keys);
genI18nJsFile('msg.fr', ['member.fr', 'markdown.fr', 'album.fr'], keys);
genI18nJsFile('msg.zh', ['member.zh', 'markdown.zh', 'album.zh'], keys);
genI18nJsFile('msg.en', ['member.en', 'markdown.en', 'album.en'], keys);
+ genI18nJsFile('msg.pt', ['member.pt', 'markdown.pt', 'album.pt'], keys);
});
// 合并album需要的js
diff --git a/app/controllers/BaseController.go b/app/controllers/BaseController.go
index 53a389e..f9c07b7 100644
--- a/app/controllers/BaseController.go
+++ b/app/controllers/BaseController.go
@@ -186,7 +186,7 @@ func (c BaseController) SetLocale() string {
pos := strings.Index(locale, "-")
lang = locale[0:pos]
}
- if lang != "zh" && lang != "en" {
+ if lang != "zh" && lang != "en" && lang != "fr" && lang != "pt" {
lang = "en"
}
c.RenderArgs["locale"] = lang
diff --git a/app/i18n/i18n.go b/app/i18n/i18n.go
index 8b257d3..b008de2 100644
--- a/app/i18n/i18n.go
+++ b/app/i18n/i18n.go
@@ -86,7 +86,9 @@ func main() {
parse("msg.en")
parse("msg.zh")
parse("msg.fr")
+ parse("msg.pt")
parse("blog.zh")
parse("blog.en")
parse("blog.fr")
+ parse("blog.pt")
}
diff --git a/app/views/home/header.html b/app/views/home/header.html
index 97b3814..c6c5167 100644
--- a/app/views/home/header.html
+++ b/app/views/home/header.html
@@ -41,6 +41,7 @@ function log(o) {
English
Français
简体中文
+ Português
diff --git a/messages/album.pt b/messages/album.pt
new file mode 100644
index 0000000..2f38a34
--- /dev/null
+++ b/messages/album.pt
@@ -0,0 +1,31 @@
+
+# album image
+Images=Imagens
+Upload=Enviar
+Image URL=Imagem URL
+Albums=Álbuns
+Default=Padrão
+File title search=Busca pelo título do arquivo
+Go to upload images=Ir para envio de imagens
+Rename=Renomear
+Add=Incluir
+Add Album=Incluir álbum
+Add Image=Incluir imagem
+Can't load this url=Não é possível carregar esta URL
+No Images=Sem imagens
+Click to upload images Or Drop images to here=Clique para fazer o envio de imagens or arraste imagens aqui
+
+Cannot delete default album=Não é possível excluir o álbum padrão
+Cannot rename default album=Não é possível renomear o álbum padrão
+This album has images, please delete it's images at first.=Este álbum tem imagens, favor excluir elas antes.
+
+Rename Album=Renomear Álbum
+Add Success!=Incluído com sucesso!
+Rename Success!=Renomeado com sucesso!
+Delete Success!=Excluído com sucesso!
+Are you sure to delete this image ?=Vocês tem certeza que deseja excluir esta imagem ?
+click to remove this image=clique para excluir esta imagem
+error=erro
+Error=Erro
+Prev=Anterior
+Next=Próxima
\ No newline at end of file
diff --git a/messages/blog.pt b/messages/blog.pt
new file mode 100644
index 0000000..6fbe6f3
--- /dev/null
+++ b/messages/blog.pt
@@ -0,0 +1,91 @@
+# blog
+
+blogNavs=Navegação
+quickLinks=Links rápidos
+latestPosts=Últimas postagens
+
+noBlog=Sem blog
+noTag=Sem tag
+blogClass=Categoria
+updatedTime=Enviado em
+createdTime=Criado em
+fullBlog=Blog completo
+blogNav=Navegação do blog
+more=Mais...
+previous=Anterior
+next=Próximo
+
+#
+# set blog
+#
+blogSet=Configuração do blog
+baseInfoSet=Informações básicas
+commentSet=Comentário
+themeSet=Tema
+theme=Tema
+blogName=Título
+blogLogo=Logo
+blogDesc=Descrição
+aboutMe=Sobre mim
+
+#domain
+domainSet=Domímio
+subDomain=Subdomínio
+domain=Domain personalizado
+
+# theme
+elegant=Elegante
+navFixed=Navegação fixada à esquerda
+
+openComment=Abrir commentário?
+chooseComment=Sistema de comentário
+disqusHelp=Favor insira seu Disqus Id
+needHelp=Precisa de ajuda?
+blogLogoTips=Envie uma imagem para substituir o título do blog
+saveSuccess=Gravado com sucesso
+
+community=Comunidade
+home=Home
+none=Nada
+moreShare=Mais
+sinaWeibo=Weibo
+weixin=Weichat
+tencentWeibo=Tencent Weibo
+qqZone=QQ Zone
+renren=Renren
+report=Relatório
+like=Gostei
+unlike=Não gostei
+viewers=Visualizadores
+author=Autor
+delete=Excluir
+reply=Responder
+comment=Comentar
+comments=Comentários
+cancel=Cancelar
+confirm=Confirmar
+signIn=Sign In
+signUp=Sign Up
+submitComment=Submeter
+reportReason1=Conteúdos hostis
+reportReason2=Publicidade de spam
+reportReason3=Conteúdos ilegais
+reportReason4=Não deve abrir a discussão de conteúdo político
+other=Outro
+reportReason=Razão
+chooseReason=Por favor selecione a razão do relatório
+reportSuccess=Relatório enviado com sucesso, iremos notificar o acordo com o autor, obrigado pela supervisão
+error=Erro
+reportComment?=Denunciar este comentário?
+reportBlog?=Denunciar este blog?
+confirmDeleteComment=Você tem certeza?
+scanQRCode=Abrir weichat e escanear o código QR
+justNow=Agota
+minutesAgo=minutos atrás
+hoursAgo=horás atrás
+daysAgo=dias atrás
+weeksAgo=semanas atrás
+monthsAgo=meses atrás
+
+
+a=a
\ No newline at end of file
diff --git a/messages/markdown.pt b/messages/markdown.pt
new file mode 100644
index 0000000..a52d093
--- /dev/null
+++ b/messages/markdown.pt
@@ -0,0 +1,35 @@
+
+# markdown editor
+
+Hyperlink=Hyperlink
+Please provide the link URL and an optional title=Favor informar a URL e um título opcional
+optional title=título opcional
+Ok=Ok
+Cancel=Cancelar
+Strong=Negrito
+strong text=texto em negrito
+Emphasis=Itálico
+emphasized text=texto em itálido
+Blockquote=Avanço
+Code Sample=Código de exemplo
+enter code here=Insira o código aqui
+Image=Imagem
+Heading=Cabeçalho
+Numbered List=Lista numerada
+Bulleted List=Lista não-numerada
+List item=Item de lista
+Horizontal Rule=Linha horizontal
+Markdown syntax=Syntaxe Markdown
+Undo=Desfazer
+Redo=Refazer
+enter image description here=Inserir a descrição da imagem aqui
+enter link description here=Inserir a descrição do link aqui
+Edit mode=Modo Edit
+Vim mode=Movo Vim
+Emacs mode=Modo Emacs
+Normal mode=Modo Normal
+Normal=Normal
+Light=Light
+Light editor=Editor light
+
+Insert Image=Inserir Imagem
diff --git a/messages/member.pt b/messages/member.pt
new file mode 100644
index 0000000..e72a4d5
--- /dev/null
+++ b/messages/member.pt
@@ -0,0 +1,136 @@
+####################
+# Member Center
+####################
+
+memberCenter=Membro Central
+userNotExists=Usuário inexistente
+hasUsers=O usuário já existe
+Leanote Blog Theme Api=Tema da API do Blog do Leanote
+My Group=Meu grupo
+
+# post abstract
+
+Abstract=Resumo
+Description=Descrição
+Once the abstract has been updated, it will not set the abstract automatically other than you cancel it.=Uma vez que o resumo seja atualizado, ele não será definido automaticamente exceto se você cancelá-lo.
+Main Image=Imagem principal
+Get next image as main image from content=Usar a próxima imagem do conteúdo como imagem principal
+Raw Content=Conteúdo original
+
+#memeber
+welcomeToLeanote=Bem-vindo
+accountInfo=Informações da conta
+accountType=Tipo da conta
+premiumAccountType=Premium
+normalAccountType=Normal
+imageSize=Tamanho de imagem
+attachSize=Tamanho de anexo
+totalTraffic=Tráfego de Internet
+upgrade=Evoluir minha conta
+leanoteEvents=Novidade da Leanote
+addLeanoteAccount=Nova conta Leanote
+defaultComment=Sistema padrão de comentário Leanote
+upgradeAccountTips=Quero utilizar um domínio personalizado para o meu blog, Evoluir minha conta
+cateIsPublicNotebook=Categoria são notas publicadas
+dragAndSort=Arraste para ordenar
+permanentLink=Link permanente
+cate=Categoria
+noCates=Sem categoria
+single=Página simples
+singleTips=Você pode incluir diversas páginas simples
+addSingle=Nova página simples
+updateSingle=Atualizar página simples
+inputSingleTitle=O título é obrigatório
+saveSort=Ordenação gravada
+pagingAndSort=Configurações de paginação e ordenação
+perPageSize=Itens por página
+sortField=Campo de ordenação
+sortType=Tipo de ordenação
+publicTime=Data/hora da publicação
+createdTime=Data de criação
+updatedTime=Data de atualização
+desc=Desc
+asc=Asc
+postList=Lista de postagens
+hasSelfDefined=Definido
+noSelfDefined=Não definido
+setAbstract=Configurações do resumo
+title=Título
+content=Conteúdo
+
+addTheme=Novo tema
+importTheme=Importar tema
+exportTheme=Exportar tema
+export=Exportar
+preview=Pré-visualização
+edit=Editar
+use=Usar
+install=Instalar
+currentTheme=Tema atual
+myOtherThemes=Meus outros tema
+leanoteThemeMarket=Venda de temas da Leanote
+updateTheme=Atualizar tema
+tplStyleScript=template, style, script
+newFile=Novo arquivo
+image=Imagem
+currentFile=Arquivo atual
+tpl=Template
+style=Style
+script=Script
+header=Cabeçalho
+footer=Rodapé
+index=Início
+cate=Categoria
+search=Pesquisa
+single=Página simples
+archive=Arquivo
+post=Post
+tags=Tags
+tag_posts=Postagens de tags
+share_comment=Comentários
+themeJson=Configurações de tema
+paging=Paginação
+highlight=Realce de código
+
+# member title
+Leanote Member Center=Membro Central Leanote
+Username=Usuário
+Email=E-mail
+Password=Senha
+Avatar=Avatar
+Add Account=Incluir conta
+Update Post Abstract=Atualizar resumo da postagem
+Blog Base Info=Informações básicas do blog
+Comment=Comentário
+Posts=Postagens
+Domain=Domínio
+Paging=Paginação
+Category=Categoria
+Add Single=Incluir página simples
+Update Single=Atualizar página simples
+Single=Página simples
+Theme=Tema
+Upate Theme=Atualizar tema
+
+group=Grupo
+newGroup=Novo grupo
+deleteGroup=Excluir grupo
+addMemberTips=Informar nome de usuário ou e-mail para incluir o membro
+deleteMember=Excluir membro
+forbiddenNotMyGroup=Você não possui autorização de acesso porque você não é o dono do grupo
+userExistsInGroup=O membro já está neste grupo
+notMyGroup=Você não é o dono do grupo
+
+
+# view js
+Are you sure ?=Você tem certeza ?
+Are you sure to install it ?=Você tem certeza que deseja instalar ?
+Are you sure to delete=Você tem certeza que deseja excluir
+Success=Sucesso
+Error=Erro
+File exists=Arquivo existente
+Delete file=Excluir arquivo
+No images=Sem imagens
+Filename=Arquivo
+Group Title=Título do grupo
+
diff --git a/messages/msg.pt b/messages/msg.pt
new file mode 100644
index 0000000..5a650ac
--- /dev/null
+++ b/messages/msg.pt
@@ -0,0 +1,281 @@
+# leanote
+app=Leanote
+moto=Mais que um bloco de notas!
+moto2=Conhecimento, Blog, Compartilhamento, Cooperação... tudo em Leanote
+moto3=Breve mas não simples
+fork github=Fork Leanote no Github
+
+# Home
+openSource=leanote.org
+forgetPassword = Esqueceu sua senha?
+or=ou
+try=Tente isso
+3th=Contas de terceiros
+usernameOrEmail=Nome de usuário ou e-mail
+password=Senha
+home=Página inicial
+desktopApp=Aplicativo
+aboutLeanote=Sobre Leanote
+suggestions=Sugestões
+yourSuggestions=Sugestões
+leanoteBlog=Blog
+knowledge=Conhecimento
+knowledgeInfo=Use Leanote como uma nota, gerencie seu conhecimento no Leanote.
+share=Compartilhamento
+shareInfo=Compartilhe seu conhecimento com amigos no Leanote.
+cooperation=Cooperação
+cooperationInfo=Coopere com amigos para aprimorar o conhecimento deles.
+blog=Blog
+blogInfo=Você pode publicar seu conhecimento e leanote no seu blog!
+suggestionsInfo=Ajude-nos a melhorar nosso serviço
+yourContact=Seu contato
+emailOrOthers=E-mail ou outra forma de contato
+captcha=Captcha
+reloadCaptcha=Recarregar Captcha
+captchaError=Captcha inválido
+inputCaptcha=Captcha é obrigatório
+noTag=Sem Tags
+
+hi=Hi
+welcomeUseLeanote=Bem-vindo!
+myNote=Minha nota
+curUser=E-mail
+
+# form
+submit=submeter
+Submit=Submeter
+register=Sign up
+login=Sign in
+Password=Senha
+password2=Confirmação de senha
+email=E-mail
+inputUsername=Nome de usuário (e-mail) é obrigatório
+inputEmail=E-mail é obrigatório
+wrongEmail=E-mail inválido
+wrongUsernameOrPassword=Nome de usuário ou senha inválida
+inputPassword=Senha é obrigatória
+inputLoginPasswordTips=Favor informar a senha
+wrongPassword=Senha inválida
+logining=Sign in
+loginSuccess=Login com sucesso
+ing=Processando
+use = Use
+hadAcount = Já possui uma conta?
+hasAcount = Não possui uma conta?
+signInWithThird=Entrar com outra conta
+
+# sign in
+registerSuccessAndRdirectToNote=Registro com sucesso, redirecionando...
+userHasBeenRegistered=%s já está registrado
+
+# find password
+passwordTips=O tamanho deve ser de pelo menos 6 caracteres
+findPassword=Recuperar senha
+findPasswordSendEmailOver=Nós já enviamos o link de recuperação de senha para o seu e-mail, por favor verifique o seu e-mail
+checkEmai=Verificar e-mail
+findPasswordTimeout=prazo
+reFindPassword=Recuperar senha novamente
+updatePassword=Alterar a senha
+updatePasswordSuccessRedirectToLogin=Senha alterada com sucesso e redirecionado para a página de login...
+inputPassword2=Favor informar sua senha novamente
+confirmPassword=Favor confirmar a seua senha
+notGoodPassword=Esta não é uma boa senha, o tamanho deve ser de pelo menos 6 caracteres
+
+# note
+myBlog=Blog
+history=Histórico
+save=Salvar
+editorTips=Dicas
+editorTipsInfo=1. Atalhos
ctrl+shift+c Alternar código2. shift+enter Sair do bloco atual
ex.:
neste caso você pode usar shift+enter para sair do bloco atual.
+newNote=Nova nota
+newMarkdownNote=Nova nota em Markdown
+noNoteNewNoteTips=O bloco de notas está vazio porque não...
+canntNewNoteTips=Desculpe, não é possível uma nova nota aqui, favor escolher um caderno primeiro.
+new=Novo
+newMarkdown=Nova nota em markdown
+clickAddTag=Clique para incluir uma tag
+notebook=Bloco de notas
+note=Nota
+myNotebook=Meu bloco de notas
+addNotebook=Incluir bloco de notas
+search=Pesquisar
+clearSearch=Limpar pesquisa
+all=Recentes
+trash=Lixo
+delete=Excluir
+unTitled=Sem título
+defaultShare=Compartilhamento padrão
+leftHidden=Ocultar barra deslizante
+leftShow=Mostrar barra deslizante
+nav=Navegação da nota
+writingMode=Modo de escrita
+normalMode=Modo normal
+saving=Salvando
+saveSuccess=Salvo com sucesso
+SearchNote=Pequisar nota
+SearchNotebook=Pesquisar bloco de notas
+Choose File=Escolher arquivo
+Download All=Download de tudo
+Information=Informação
+
+Toggle Modify with Readonly=Alternar modificação somente leitura
+
+update=Alterar
+create=Criar
+
+demoRegister=Registrar
+
+close=Fechar
+cancel=Cancelar
+send=Enviar
+
+# tag
+tag=Tag
+myTag=Minha tag
+red=vermelho
+yellow=amarelo
+blue=azul
+green=verde
+
+# setting
+accountSetting=Conta
+logout=Logout
+basicInfo=Básico
+basicInfoSet=Configurações básicad do blog
+updateEmail=Alterar e-mail
+usernameSetting=Alterar nome de usuário
+chooseImage=Escolher imagem
+oldPassword=Senha anterior
+newPassword=Nova senha
+admin=Administrador
+
+# theme
+default=Padrõa
+simple=Simples
+
+# tinymce
+uploadImage=Enviar imagem
+
+# blog
+aboutMe=Sobre mim
+blogSet=Configurações do Blog
+
+# index
+discussion=Discussão
+download=Download
+howToInstallLeanote=Como instalar o leanote
+
+#
+attachments = Anexos
+donate = Doação
+
+# contextmenu
+shareToFriends=Compartilhar com amigos
+publicAsBlog=Publicar como blog
+cancelPublic=Cancelar publicação
+move=Mover
+copy=Copiar
+rename=Renomear
+exportPdf=Exportar PDF
+addChildNotebook=Incluir bloco de notas filho
+deleteAllShared=Excluir usuário compartilhad
+deleteSharedNotebook=Excluir bloco de notas compartilhado
+copyToMyNotebook=Copiar para meu bloco de notas
+
+# note-dev
+emailInSending=Enviando para
+checkEmail=Verificar e-mail
+setUsername=Configurar nome de usuário
+setUsernameTips=Seu e-mail atual é: %s
. Você pode configurar um nome de usuário único.
O tamanho do nome de usuário deve ser de pelo menos 4 caracteres e não pode conter caracteres especiais.
+currentEmail=Seu e-mail atual é: %s
+updateEmail=Alterar e-mail
+updateEmailTips=Você deve verificar o e-mail antes de alterar o e-mail. O e-mail verificado será sua nova conta.
+sendVerifiedEmail=Enviar e-mail de verificação
+verified=Verificado
+unVerified=Não verificado
+verifiedNow=Verificar agora
+resendVerifiedEmail=Reenviar e-mail de verificação
+
+# share
+defaulthhare=Padrão
+addShare=Adicionar amigo
+friendEmail=E-mail do amigo
+permission=Permissão
+readOnly=Somente leitura
+writable=Escrita
+inputFriendEmail=O e-mail do amigo é obrigatório
+clickToChangePermission=Clique para alterar a permissão
+sendInviteEmailToYourFriend=Enviar convite por e-mail para seu amigo
+copySuccess=Copiado com sucesso
+copyFailed=Falha ao copiar
+friendNotExits=Seu amigo não possui uma conta, link para o registro: %s
+emailBodyRequired=Corpo do e-mail body é obrigatório
+clickToCopy=Clique para copiar
+sendSuccess=sucesso
+inviteEmailBody=Olá, eu sou %s, %s é incrível, vamos lá!
+
+# history
+historiesNum=Nós gravamos pelo menos os 10 últimas históricos de cada nota
+noHistories=Sem histórico
+datetime=Data/hora
+restoreFromThisVersion=Restaurar a partir desta versão
+confirmBackup=Você tem certeza que deseja restaurar a partir desta versão? Nós faremos backup da nota atual.
+createAccount=Criar conta
+createAccountSuccess=Conta criada com sucesso
+createAccountFailed=Falha na criação da conta
+thirdCreateAcountTips=Você está usando conta de terceiros para login %(app)s, você pode criar uma %(app)s conta também.
Depois de criar %(app)s conta, você pode usar a conta e a conta de terceiros para fazer login %(app)s.
+
+# valid msg
+inputUsername=Informe o nome de usuário
+updateUsernameSuccess=Alteração do nome de usuário com sucesso
+usernameIsExisted=Nome de usuário existente
+noSpecialChars=Nome de usuário não pode conter caracteres especiais
+minLength=O tamanho mínimo é %s
+errorEmail=Favor informar o e-mail corretamente
+verifiedEmaiHasSent=O e-mail de verificação foi enviado, favor verificar o seu e-mail.
+emailSendFailed=Falha ao enviar o e-mail
+inputPassword=A senha é obrigatória
+inputNewPassword=A nova senha é obrigatória
+inputPassword2=Favor informar a nova senha novamene
+errorPassword=O tamanho da senha deve ser de pelo menos 6 caracteres e uma senha segura
+oldPasswordError=A senha antiga não confere
+confirmPassword=Senha não confere
+updatePasswordSuccess=Alteração de senha com sucesso
+errorDomain=O domínio personalizado é inválido, ex.: www.myblog.com
+domainExisted=O domínio personalizado já existe
+errorSubDomain=Favor informar um subdomínio válido, o tamanho deve ser de pelo menos 4 caracteres e não deve conter caracteres especiais
+subDomainExisted=O subdomínio já existe
+domainNotPointToLeanote=O domínio personalizado não pode ser d.leanote.com
+errorPerPageSize=Tamanho de página está errado
+errorSortField=Campo de ordenação está errado
+themeValidHasRoundInclude=ALERTA: Templates tem referência circular!
+
+# share
+tokenExpired=Token Expirado
+Share=Compartilhar
+hasSharedThisNote=compartilhou esta nota
+inputSharePwd=Favor informar a senha
+shareToGroup=Compartilhar para o grupo
+shareByPwd=Compartilhar pela senha
+groupName=Nome do grupo
+operation=Operação
+groupAndMemberManage=Gereciar grupos/membros
+shareToGroupTips=Se você compartilhar esta nota com o grupo, o membro pertencente ao grupo irá ter direito de acesso a esta nota
+shared=Compartilhado
+notShared=Não compartilhado
+shareLink=Link compartilhado
+sharePwd=Senha de acesso
+cancelShare=Cancelar
+getShareLinkAndPwd=Pegar link e senha
+
+# Common
+created=Criado
+updated=Alterado
+modify=Modificar
+Search=Pesquisar
+Save Success=Salvo com sucesso
+Please save note firstly!=Favor salvar a nota primeiro!
+Please sign in firstly!=Favor entrar primento!
+
+# error
+notFound=Esta página não pode ser encontrada.