Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

A translation for Brazilian Portuguese #79

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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions lib/admin-apps-form/template.jade
Expand Up @@ -36,6 +36,9 @@ form.panel.panel-default.form-horizontal(on-submit='save')
.col-sm-offset-2.col-sm-10
label(for='description[fr]')=t('french')
textarea.form-control(type='text' id='description[fr]' placeholder=t('app.description.fr.placeholder') value='{{ app.description.fr }}' class='{{ errors.description.fr }}')
.col-sm-offset-2.col-sm-10
label(for='description[pt]')=t('portuguese')
textarea.form-control(type='text' id='description[pt]' placeholder=t('app.description.pt.placeholder') value='{{ app.description.pt }}' class='{{ errors.description.pt }}')
.form-group
label.col-sm-2.control-label(for='video')=t('app.video')
.col-sm-10
Expand Down
9 changes: 9 additions & 0 deletions lib/admin-apps-form/view.js
Expand Up @@ -66,6 +66,14 @@ var AdminAppForm = Ractive.extend({
this.set('errors.description.fr', 'error')
ok = false;
}

if (!app.description['pt']) {
this.set('errors.description.pt', 'error')
ok = false;
} else if (app.description['pt'].length > 300) {
this.set('errors.description.pt', 'error')
ok = false;
}

return ok;
},
Expand Down Expand Up @@ -96,6 +104,7 @@ var AdminAppForm = Ractive.extend({
this.observeAppError('description.en');
this.observeAppError('description.es');
this.observeAppError('description.fr');
this.observeAppError('description.pt');
this.observeAppError('contact');

this.on('saveEditedLink', function (ev) {
Expand Down
4 changes: 4 additions & 0 deletions lib/admin-countries-form/template.jade
Expand Up @@ -16,6 +16,10 @@ form.panel.panel-default.form-horizontal(on-submit='save')
label.col-sm-2.control-label(for='name[fr]')=t('french')
.col-sm-10
input.form-control(type='text' id='name[fr]' placeholder='Nom' value='{{ country.name.fr }}')
.form-group
label.col-sm-2.control-label(for='name[pt]')=t('portuguese')
.col-sm-10
input.form-control(type='text' id='name[pt]' placeholder='Nom' value='{{ country.name.pt }}')
.panel-footer
.col-sm-offset-2
button.btn.btn-success(type='submit')=t('Save')
Expand Down
4 changes: 4 additions & 0 deletions lib/admin-tags-form/template.jade
Expand Up @@ -16,6 +16,10 @@ form.panel.panel-default.form-horizontal(on-submit='save')
label.col-sm-2.control-label(for='name[fr]')=t('french')
.col-sm-10
input.form-control(type='text' id='name[fr]' placeholder='Nom' value='{{ tag.name.fr }}')
.form-group
label.col-sm-2.control-label(for='name[pt]')=t('portuguese')
.col-sm-10
input.form-control(type='text' id='name[pt]' placeholder='Nom' value='{{ tag.name.pt }}')
.panel-footer
.col-sm-offset-2
button.btn.btn-success(type='submit')=t('Save')
Expand Down
2 changes: 1 addition & 1 deletion lib/config/env.js
Expand Up @@ -31,7 +31,7 @@ module.exports = {
}
},
secret: env.SECRET,
languages: env.LANGUAGES || [ "en", "es", "fr" ],
languages: env.LANGUAGES || [ "en", "es", "fr", "pt" ],
admins: {
twitter: env.TWITTER_ADMINS ? env.TWITTER_ADMINS.split(',') : undefined,
github: env.GITHUB_ADMINS ? env.GITHUB_ADMINS.split(',') : undefined
Expand Down
4 changes: 2 additions & 2 deletions lib/language/index.js
Expand Up @@ -4,7 +4,7 @@

var config = require('lib/config');
var log = require('debug')('civicstack:language');
var languages = [ 'en', 'es', 'fr' ];
var languages = [ 'en', 'es', 'fr', 'pt' ];

module.exports = function language(req, res, next) {
var user = req.user;
Expand Down Expand Up @@ -51,4 +51,4 @@ module.exports = function language(req, res, next) {

function valid(lang) {
return !!~languages.indexOf(lang);
}
}
2 changes: 1 addition & 1 deletion lib/models/user.js
Expand Up @@ -16,7 +16,7 @@ var UserSchema = new Schema({
firstName: { type: String }
, lastName: { type: String }
, username: { type: String }
, lang: { type: String, enum: [ 'en', 'es', 'fr' ] }
, lang: { type: String, enum: [ 'en', 'es', 'fr', 'pt' ] }
, avatar: { type: String }
, email: { type: String, lowercase: true, trim: true } // main email
, profiles: {
Expand Down
3 changes: 2 additions & 1 deletion lib/translations/component.json
Expand Up @@ -5,7 +5,8 @@
"json": [
"lib/en.json",
"lib/es.json",
"lib/fr.json"
"lib/fr.json",
"lib/pt.json"
],
"main": "index.js"
}
4 changes: 4 additions & 0 deletions lib/translations/index.js
Expand Up @@ -5,6 +5,7 @@
var en = require('./lib/en');
var es = require('./lib/es');
var fr = require('./lib/fr');
var pt = require('./lib/pt');

module.exports.help = function(t) {
// English
Expand All @@ -15,4 +16,7 @@ module.exports.help = function(t) {

// French
t.fr = fr;

// Portuguese
t.pt = pt;
}
1 change: 1 addition & 0 deletions lib/translations/lib/en.json
Expand Up @@ -5,6 +5,7 @@
"english": "English",
"spanish": "Spanish",
"french": "French",
"portuguese": "Portuguese",

"Name": "Name",
"Save": "Save",
Expand Down
1 change: 1 addition & 0 deletions lib/translations/lib/es.json
Expand Up @@ -5,6 +5,7 @@
"english": "Inglés",
"spanish": "Español",
"french": "Francés",
"portuguese": "Portugués",

"Name": "Nombre",
"Save": "Guardar",
Expand Down
1 change: 1 addition & 0 deletions lib/translations/lib/fr.json
Expand Up @@ -5,6 +5,7 @@
"english": "Anglais",
"spanish": "Espagnol",
"french": "Français",
"portuguese": "Portugais",

"Name": "Nom",
"Save": "Sauvegarder",
Expand Down
110 changes: 110 additions & 0 deletions lib/translations/lib/pt.json
@@ -0,0 +1,110 @@
{
"global.app-name": "Civic Stack",
"global.description": "Ferramentas <strong>livres</strong> para mudança social.",

"english": "Inglês",
"spanish": "Espanhol",
"french": "Francês",
"portuguese": "Português",

"Name": "Nome",
"Save": "Salvar",
"Cancel": "Cancelar",
"Upload app": "Enviar app",
"No apps to show yet": "Nenhum app para mostrar ainda",
"and": "e",

"header.about": "Sobre nós",
"header.admin": "Administrador",
"header.login": "Entrar",
"header.or": "ou",
"header.logout": "Sair",

"admin-sidebar.applications.title": "Aplicações",
"admin-sidebar.tags.title": "Etiquetas",
"admin-sidebar.countries.title": "Países",
"admin-sidebar.technologies.title": "Tecnologias",
"admin-sidebar.licenses.title": "Licenças",
"admin.list.new": "Novo",
"admin.list.search.placeholder": "Pesquisar",
"admin.tags.save.success": "Etiqueta foi salva com sucesso",
"admin.app.save.success": "App foi salva com sucesso",
"admin.countries.save.success": "País foi salvo com sucesso",
"admin.technologies.save.success": "Tecnologia foi salva com sucesso",
"admin.licenses.save.success": "Licença foi salva com sucesso",

"confirmation.title": "Excluir",
"confirmation.ok": "Ok",
"confirmation.cancel": "Cancelar",
"admin-licenses-form.confirmation.body": "Você tem certeza de que quer excluir a licença \"{name}\"?",
"admin-apps-form.confirmation.body": "Você tem certeza de que quer excluir a aplicação \"{name}\"?",
"admin-tags-form.confirmation.body": "Você tem certeza de que quer excluir a etiqueta \"{name}\"?",
"admin-countries-form.confirmation.body": "Você tem certeza de que quer excluir o país \"{name}\"?",
"admin-technologies-form.confirmation.body": "Você tem certeza de que quer excluir a tecnologia \"{name}\"?",

"about.what-is-it.title": "O que é Civic Stack?",
"about.what-is-it.text": "Civic Stack é o lugar para descobrir e compartilhar ferramentas cívicas de código aberto para que você possa adaptá-las para diferentes cenários.",
"about.goal.title": "Qual é o nosso objetivo?",
"about.goal.1": "Prover acesso fácil a ferramentas cívicas digitais a organizações, ativistas, governos para que possam inovar em seu trabalho diário.",
"about.goal.2": "Promover o trabalho de organizações que desenvolvem tecnologias de código aberto com propósitos cívicos.",
"about.goal.3": "Encorajar colaboração e reúso, em vez de \"reinventar a roda\" todas as vezes.",
"about.what-information-is-available.title": "Quais informações aparecem na Civic Stack?",
"about.what-information-is-available.text": "Na Civic Stack você encontrará informações úteis sobre cada ferramenta: objetivos, escopo, sua origem, seu repositório do GitHub, os desenvolvedores.<br><br>Organizações podem entrar e enviar suas próprias ferramentas.<br><br>Na Civic Stack, todas as ferramentas que você encontra —e todas as ferramentas que você encontrará— são de código aberto.",

"panel.heading.error": "Erro",
"panel.body.error": "Um erro aconteceu, tente novamente mais tarde",
"panel.heading.success": "Sucesso",

"app-form.header.cover": "Capa",
"app-form.header.content": "Conteúdo",
"app-form.header.publish": "Publicar",
"app-form.cover.logo-title": "Logo",
"app-form.cover.logo-instructions": "Somente links para urls online, certifique-se de que é um caminho público.<br>Tamanho: pelo menos 000 x 000 px.",
"app-form.cover.background-instructions": "Por favor escolha uma cor de fundo:",
"app-form.name.placeholder": "Nome",
"app-form.button.continue": "Continuar",
"app-form.button.cancel": "Cancelar",
"app-form.button.done": "Pronto",
"app-form.button.edit": "Editar",
"app-form.new-app": "Nova aplicação",
"app-form.modal.title": "Ótimo!",
"app-form.modal.body": "Sua aplicação foi enviada com sucesso e aparecerá em breve!",

"app.logo": "Logo",
"app.backgroundColor": "Cor de fundo",
"app.name": "Nome da aplicação",
"app.organization-name": "Nome da organização",
"app.description": "Descrição",
"app.description.placeholder": "Descrição (máximo de 300 caracteres)",
"app.video": "Vídeo",
"app.video.placeholder": "A URL do YouTube para a capa do vídeo",
"app.country": "País",
"app.website": "Website",
"app.twitter": "Twitter",
"app.license": "Licença",
"app.links": "Links relacionados",
"app.contact": "Contato",
"app.contact.placeholder": "E-mail do contato",
"app.technology": "Tecnologia",
"app.github-repository": "Repositório no Github",
"app.tags": "Etiquetas",
"app.approved": "Aprovada",
"app.description.en": "Descrição em inglês",
"app.description.en.placeholder": "Descrição em inglês (máximo de 300 caracteres)",
"app.description.es.placeholder": "Descrição em espanhol (máximo de 300 caracteres)",
"app.description.fr.placeholder": "Descrição em francês (máximo de 300 caracteres)",
"app.comments": "Comentários",
"app.uploaded-by": "Enviado por",
"app.description.exceeded": "A descrição é limitada a 300 caracteres",

"filters.search": "Pesquisar",
"filters.clear": "Limpar tudo",
"filters.country": "Filtrar por país",
"filters.technology": "Filtrar por tecnologia",
"filters.tags": "Filtrar por etiquetas",

"sort.by.popular": "Populares",
"sort.by.newest": "Novas",

"footer.powered-by": "Impulsionado por"
}