diff --git a/config/initializers/locomotive.rb b/config/initializers/locomotive.rb index 280d3898..a76f403e 100644 --- a/config/initializers/locomotive.rb +++ b/config/initializers/locomotive.rb @@ -37,7 +37,7 @@ Locomotive.configure do |config| # If you do not mind about importing theme without DelayedJob, disable it. config.delayed_job = false - # default locale (for now, only en and fr are supported) + # default locale (for now, only en, fr and pt-BR are supported) config.default_locale = :en # Configure the e-mail address which will be shown in the DeviseMailer, NotificationMailer, ...etc diff --git a/config/locales/admin_ui.en.yml b/config/locales/admin_ui.en.yml index 1a4062e4..bc9989cc 100644 --- a/config/locales/admin_ui.en.yml +++ b/config/locales/admin_ui.en.yml @@ -159,6 +159,7 @@ en: new_site: new site en: English fr: French + pt-BR: "Brazilian Portuguese" ask_for_name: "Please type your new name" theme_assets: diff --git a/config/locales/admin_ui.fr.yml b/config/locales/admin_ui.fr.yml index 37780fe9..11fa67eb 100644 --- a/config/locales/admin_ui.fr.yml +++ b/config/locales/admin_ui.fr.yml @@ -159,6 +159,7 @@ fr: new_site: nouveau site en: en Anglais fr: en Français + pt-BR: "en Portugaise" ask_for_name: "Veuillez entrer le nouveau nom" theme_assets: diff --git a/config/locales/admin_ui.pt-BR.yml b/config/locales/admin_ui.pt-BR.yml new file mode 100644 index 00000000..f19de87d --- /dev/null +++ b/config/locales/admin_ui.pt-BR.yml @@ -0,0 +1,301 @@ +pt-BR: + admin: + buttons: + login: Entrar + send_password: Enviar + change_password: Mudar + new_item: "+ adicionar" + switch_to_site: Ir + + messages: + confirm: Você tem certeza ? + + shared: + header: + welcome: Bem-Vindo, %{name} + see: Ver websiste + logout: Sair + menu: + contents: Conteúdos + assets: Arquivos + settings: Configurações + pages: Páginas + snippets: Blocos de código + account: Minha Conta + site: Site + theme_assets: Arquivos do Tema + footer: + who_is_behind: "Desenvovido por %{development} e desenhado por Sacha Greif" + form_actions: + back: Voltar sem salvar + create: Criar + update: Atualizar + send: Enviar + + errors: + "500": + title: Erro de aplicação + notice: "Desculpe-nos, algo não está funcionando como deveria" + link: "→ Voltar a aplicação" + "404": + title: Página não encontrada + notice: "A página requisitada não existe." + link: "→ Voltar a aplicação" + + notifications: + new_content_instance: + subject: " Novo [%{type}] " + title: "Olá %{name}, apenas informando que uma nova instância foi criada em %{date}" + type: "Modelo: %{type}" + + custom_fields: + edit: + title: Editando campo customizado + kind: + string: Texto Simples + text: Texto + category: Caixa de Seleção + boolean: Checkbox + date: Data + file: Arquivo + text_formatting: + none: Nenhum + html: HTML + edit_field: + title: Edita campo + edit_category: + title: Editar opções + help: Gerenciar a lista de opções da sua caixa de seleçõa. + collection_label: Lista de opções + custom_form: + edit_categories: Editar opções + delete_file: Excluir arquivo + + sessions: + new: + title: Login + link: "Esqueci minha senha" + email: "Email" + password: "Senha" + + passwords: + new: + title: Esqueci minha senha + link: "→ Voltar a página de login" + email: "Seu email" + edit: + title: Atualizar minha senha + link: "→ Voltar a página de login" + password: "Sua nova senha" + password_confirmation: "Confirmação da sua nova senha" + + pages: + index: + title: Listando páginas + help: "As páginas são organizadas como uma árvore. Você pode reordenar as páginas como se fossem pastas" + no_items: "Não existe nenhuma página ainda. Clique aqui para criar a primeira." + new: nova página + lastest_items: Últmas páginas + new: + title: Nova página + help: "Por favor, preencha o formulário a seguir para criar sua página. Atenção: Por padrão a página não é publicada." + page: + updated_at: atualizada em + edit: + show: mostrar + help: "O título da página pode ser alterado clicando nele." + ask_for_title: "Por favor preencha o novo título" + form: + delete_file: Excluir arquivo + default_block: Padrão + cache_strategy: + none: Nenhum + simple: Simples + hour: 1 hora + day: 1 dia + week: 1 semana + month: 1 mês + + snippets: + index: + title: Listando Blocos de Código + help: "Blocos de código são alguns códigos HTML que pode sem encontrados em diferentes lugares do site e podem ser reutilizados ( como o rodapé )." + no_items: "Você ainda não tem blocos de código. Clique aqui para criar o primeiro." + new: novo bloco + new: + title: Novo bloco + help: "Preecha o formulário a seguirar para atulizar o seu bloco de código." + edit: + title: Editing snippet + help: "Preecha o formulário a seguirar para atulizar o seu bloco de código." + snippet: + updated_at: Atualizado em + + sites: + new: + title: Novo site + help: "Preencha o formulário a seguir para criar um novo site." + + current_sites: + edit: + import: importar + new_membership: adicionar conta + help: "O nome do site pode ser alterado clicando nele." + ask_for_name: "Por favor, digite o novo nome do site" + + memberships: + new: + title: Novo usuário + help: "Por favor, forneça o e-mail que deseja adicionar. Se ele não exister, você será redirecionado para o formulário de criação." + + accounts: + new: + title: Nova conta + help: "Preencha o formulário a seguir para criar uma nova conta." + + my_accounts: + edit: + help: "Seu nome pode ser atualizado clicando nele." + new_site: novo site + en: Inglês + fr: Francês + pt-BR: "Português do Brasil" + ask_for_name: "Por favor preencha o novo nome" + + theme_assets: + index: + title: Listando arquivos do tema + help: "Nesta seção todos os arquivos relacionados a layout são armazenados e gerenciados. Se você precisa de uma galeria de imagens, vá a seção de Arquivos." + all: todos arquivos + new: novo arquivo + snippets: Blocos + css_and_js: CSS e Javascript + fonts: Fontes + images: Imagens + media: Mídia + no_items: "Ainda não existem arquivos. Clique aqui para criar o primeiro." + asset: + updated_at: Atualizado em + new: + title: Novo arquivo + help: "Você pode escolher em enviar qualquer arquivo ou copiar/colar um arquivo de css/javascript em texto." + edit: + title: "Editando %{file}" + help: "Esse arquivo pode ser acessado pela seguinte URL: %{url}" + form: + picker_link: Insira um arquivo no código + choose_file: Escolha um arquivo + choose_plain_text: Escolher texto plano + images: + title: Listando imagens + no_items: "Não existem imagens ainda." + + asset_collections: + index: + title: Coleções de arquivos + help: "O nome da coleção pode ser alterado clicando nele. Você pode customizar os arquivos nas coleções adicionando campos." + new: nova coleção + no_items: "Não existem coleções ainda. Clique aqui para criar a primeira." + new: + title: Nova Coleção + help: "Por enquanto, apenas insira o nome. Outras opções irão aparecer após o formulário ser enviado." + edit: + help: "O nome da coleção pode ser alterado clicando nele. Você pode customizar os arquivos nas coleções adicionando campos." + add_asset: adicionar arquivo + destroy: excluir coleção + no_items: "Não existem coleções ainda. Clique aqui para criar a primeira." + ask_for_name: Por favor preencha o novo nome" + + assets: + new: + title: Novo arquivo + help: "Preencha o formulário a seguir para criar o seu arquivo." + edit: + title: Editar arquivo + help: "Preencha o formulário a seguir para atualizar o seu arquivo." + + content_types: + index: + new: novo modelo + new: + title: Novo modelo + help: "Crie o seu próprio modelo de dados (Projetos, Pessoas, ...etc). Seu modelo deve conter um campo pelo menos. Os itens criados a partir desse tipo de conteúdo terão seu primeiro campo como obrigatório." + edit: + title: Editar modelo + help: "Seu modelo deve conter um campo pelo menos. Os itens criados a partir desse tipo de conteúdo terão seu primeiro campo como obrigatório." + show_items: mostrar itens + new_item: novo item + form: + order_by: + created_at: 'Por "criado em" data' + updated_at: 'Por "atualizado em" data' + position_in_list: Manual + + contents: + index: + title: 'Listando "%{type}"' + edit: editar modelo + destroy: excluir modelo + download: download dos itens + new: novo item + category_noname: "Sem nome" + lastest_items: "Últimos itens" + updated_at: "Atualizado em" + list: + no_items: "Não existem itens ainda. Clique aqui para criar o primeiro." + new: + title: '%{type} — novo item' + edit: + title: '%{type} — editando item' + + image_picker: + link: Insira uma imagem no código + + cross_domain_sessions: + new: + title: Autenticação por mútiplos domínios. + notice: Você será redirecionado para o site em alguns segundos. + + imports: + new: + title: Importar + help: "Tenha cuidado ao enviar um novo tema ao seu site que já existe, seus dados atuais podem ser atualizados ou até removidos." + show: + title: Importação em progresso + help: "Seu site está sendo atualizado pelo arquivo zip enviado. Irá demorar alguns segundos." + steps: + site: Informações do site + content_types: Tipos de Conteúdo customizados + assets: Arquivos do Tema + asset_collections: Coleções de Arquivos + snippets: Blocos + pages: Páginas + messages: + success: "Seu site foi atualizado com sucesso" + failure: "A importação não funcionou." + + installation: + common: + title: Primeira instalação do Locomotive + next: Próximo + step_1: + title: Passo 1/3 + explanations: "Este é o primeiro passo da instalação do Locomotive. Por favor , leia com atenção o que está escrito" + database: + label: "Nome da Base de Dados: %{name}" + notes: "Todas as configurações de conexão do mongodb podem ser encontradas no arquivo config/mongoid.yml da sua aplicação." + default_domain: + label: "Domínio padrão: %{name}" + notes: "Basicamente, Locomotive é uma plataforma multi-site. Cada instância de site tem uma entrada padrão, , também chamada de sub-domínio e baseada no dominio principal. Obviamente, você pode mapear outros domínios para a instância do seu site , como uma referência.
O nome do domínio principal pode ser encontrado no arquivo config/initializers/locomotive.rb." + step_2: + title: "Passo 2/3 — Criar conta" + name: Nome da Conta + email: Email + password: Senha + password_confirmation: Confirmação da Senha + done: "Você ja adicionou uma conta com:
%{name}, %{email}" + next: Criar Conta + step_3: + title: "Passo 3/3 — Criar primeiro site" + explanations: "Este é o último passo da instalação. Você pode enviar um tema como um arquivo zip. Nós temos alguns temas de graça para download aqui." + next: Criar Site diff --git a/config/locales/carrierwave.pt-BR.yml b/config/locales/carrierwave.pt-BR.yml new file mode 100644 index 00000000..61f9c3e9 --- /dev/null +++ b/config/locales/carrierwave.pt-BR.yml @@ -0,0 +1,4 @@ +pt-BR: + carrierwave: + errors: + integrity: 'não é um tipo de arquivo compatível.' \ No newline at end of file diff --git a/config/locales/default.pt-BR.yml b/config/locales/default.pt-BR.yml new file mode 100644 index 00000000..0bc166aa --- /dev/null +++ b/config/locales/default.pt-BR.yml @@ -0,0 +1,32 @@ +pt-BR: + date: + formats: + default: "%d/%m/%Y" + + errors: + messages: + domain_taken: "%{value} já está em uso." + invalid_domain: "%{value} é inválido." + needs_admin_account: "Uma conta de administrador é necessário pelo menos." + protected_page: "Você não pode remover a página inicial e a do erro 404" + extname_changed: "Novo arquivos não tem a mesma extensão que o original" + array_too_short: "é muito pequeno (mínimo de elementos é %{count})" + liquid_syntax: "Erro de sintaxe do Liquid, por favor verifique a sintaxe" + liquid_extend: "A página extende um template que não existe." + invalid_theme_file: "não pode ser vazio ou não é um arquivo zip" + + attributes: + defaults: + pages: + index: + title: "'Página Inicial" + body: "Conteúdo da página inicial" + "404": + title: "Página não encontrada" + body: "Conteúdo da página de erro 404" + other: + body: "Conteúdo vai aqui" + + pagination: + previous: "« Anterior" + next: "Próximo »" diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml new file mode 100644 index 00000000..6779953a --- /dev/null +++ b/config/locales/devise.pt-BR.yml @@ -0,0 +1,62 @@ +pt-BR: + errors: + messages: + not_found: "não encontrado" + already_confirmed: "já foi confirmado" + not_locked: "não está bloqueado" + + devise: + failure: + admin: + unauthenticated: 'Você precisa se cadasstrar ou fazer o login antes de continuar.' + unconfirmed: 'Você deve confirmar sua conta antes de continuar.' + locked: 'Sua conta está bloquada.' + invalid: 'Email ou senha inválidos.' + invalid_token: 'Autenticação inválida.' + timeout: 'Sua sessão expirou. Por favor, faça o login novamente para continuar.' + inactive: 'Sua conta não foi ativada ainda.' + sessions: + admin: + signed_in: 'Login feito com sucesso.' + signed_out: 'Logout feito com sucesso.' + passwords: + admin: + send_instructions: 'Você receberá um email com as instruções sobre como alterar sua senha em poucos minutos.' + updated: 'Sua senha foi alterada com sucesso. Você está logado.' + confirmations: + admin: + send_instructions: 'Você receberá um email com as instruções sobre como confirmar sua conta em poucos minutos.' + confirmed: 'Sua conta foi confirmada com sucesso. Você está logado.' + registrations: + admin: + signed_up: 'Você logou com sucesso.' + updated: 'Atualização da conta feita com sucesso.' + destroyed: 'Sua conta foi cancelada com sucesso. Logo logo esperamos te ver por aqui. Tchau! + unlocks: + admin: + send_instructions: 'Você receberá um email com as intruções de como desbloquear sua conta em poucos minutos.' + unlocked: 'Sua conta foi desbloqueada com sucesso. Você está logado.' + mailer: + admin: + confirmation_instructions: 'Instruções de confirmação' + reset_password_instructions: 'Instruções para resetar a senha.' + unlock_instructions: 'Instruções de desbloqueio' + + + admin: + mailer: + common: + hello: Olá + + confirmation_instructions: + you_can_confirm_your_account_through_the_link_below: "Você pode confirmar sua conta através do link abaixo.' + confirm_my_account: "Confirmar minha conta" + reset_password_instructions: + reset_password_instruction: "Alguém solicitou um link para alterar sua senha e você poderá fazer isto através do link abaixo:" + change_my_password: "Alterar minha senha" + wrong_request_instruction: "Se você não solicitou isto, por favor ignore este email." + unchange_password_message: "Sua senha não irá ser alterada até que você acesse o link acima e crie uma nova senha." + unlock_instructions: + locked_account_message: "Sua conta foi bloqueada devido a excessiva tentativa de logins sem sucesso." + unlock_account_instruction: "Clique no link abaixo para desbloquear sua conta:" + unlock_my_account: "Desbloquear minha conta" \ No newline at end of file diff --git a/config/locales/flash.pt-BR.yml b/config/locales/flash.pt-BR.yml new file mode 100644 index 00000000..19971750 --- /dev/null +++ b/config/locales/flash.pt-BR.yml @@ -0,0 +1,116 @@ +pt-BR: + flash: + admin: + pages: + create: + notice: "Página criada com sucesso." + alert: "Página não foi criada." + update: + notice: "Página atualizada com sucesso." + alert: "Página não foi atualizada." + sort: + notice: "Páginas foram ordenadas com sucesso." + destroy: + notice: "Páginas foram apagadas com sucesso." + + contents: + create: + notice: "Conteúdo criado com sucesso." + alert: "Conteúdo não foi criado." + update: + notice: "Conteúdo foi atualizado com sucesso." + alert: "Conteúdo não foi atualizado." + sort: + notice: "Conteúdos foram ordenados com sucesso." + destroy: + notice: "Conteúdos foram apagados com sucesso." + + content_types: + create: + notice: "Modelo foi criado com sucesso." + alert: "Modelo não foi criado." + update: + notice: "Modelo foi atualizado com sucesso." + alert: "Modelo não foi atualizado." + destroy: + notice: "Modelo foi apagado com sucesso." + + current_sites: + update: + notice: "Meu site foi atualizado com sucesso." + alert: "Meu site não foi atualizado." + + snippets: + create: + notice: "Fragmento foi criado com sucesso." + alert: "Fragmento não foi criado." + update: + notice: "Fragmento foi atualizado com sucesso." + alert: "Fragmento não foi atualizado." + destroy: + notice: "Fragmento foi apagado com sucesso." + + accounts: + create: + notice: "Conta foi criada com sucesso." + alert: "Conta não foi criada." + + my_accounts: + update: + notice: "Minha conta foi atualizada com sucesso." + alert: "Minha conta não foi atualizada." + + sites: + create: + notice: "Site foi criado com sucesso." + alert: "Site não foi criado com sucesso." + destroy: + notice: "Site foi apagado com sucesso." + + memberships: + create: + notice: "Adesão foi criada com sucesso." + alert: "Adesão não foi criada." + already_created: "Conta já foi adicionada ao site atual." + + asset_collections: + create: + notice: "Coleção criada com sucesso." + alert: "Coleção não foi criada." + update: + notice: "Coleção foi atualizada com sucesso." + alert: "Coleção não foi atualizada." + destroy: + notice: "Coleção foi apagada com sucesso." + + assets: + create: + notice: "Asset foi criada com sucesso." + alert: "Asset não foi criada." + update: + notice: "Asset foi atualizada com sucesso." + alert: "Asset não foi atualizada." + + theme_assets: + create: + notice: "Arquivo foi criado com sucesso." + alert: "Arquivo não foi criado." + update: + notice: "Arquivo foi atualizado com sucesso." + alert: "Arquivo não foi atualizado." + destroy: + notice: "Arquivo foi apagado com sucesso." + + custom_fields: + update: + alert: "Campo não foi atualizado." + + cross_domain_sessions: + create: + alert: "Você precisa fazer o login" + + imports: + create: + done: "Seu site foi atualizado com sucesso." + notice: "Seu site está sento atualizado." + alert: "A importação não foi feita." \ No newline at end of file diff --git a/config/locales/formtastic.pt-BR.yml b/config/locales/formtastic.pt-BR.yml new file mode 100644 index 00000000..3a7e28c8 --- /dev/null +++ b/config/locales/formtastic.pt-BR.yml @@ -0,0 +1,66 @@ +pt-BR: + formtastic: + titles: + information: Informação geral + meta: SEO Metadata + code: Código + raw_template: Template + credentials: Credenciais + language: Linguagem + sites: Sites + access_points: Pontos de acesso + memberships: Contas + membership_email: Conta de email + file: Arquivo + preview: Pré-visualizar + options: Opções avançadas + custom_fields: Compos customizados + other_fields: Outras informações + presentation: Apresentação + attributes: Atributos + upload: Upload + labels: + theme_asset: + plain_text_name: Nome do arquivo + content_type: Tipo do arquivo + new: + source: Arquivo + edit: + source: Substituir arquivo + custom_fields: + field: + _alias: Apelido + import: + new: + source: Fonte + samples: Amostra + reset: Reiniciar + content_type: + api_accounts: Contas notificadas + + hints: + page: + published: "Apenas contas autenticadas podem ver páginas não publicadas." + cache_strategy: "Faça o Cache da página para obter melhor desempenho. A escolha do "Simples" é um bom compromisso" + templatized: "Utilize a página como template para o modelo definido." + snippet: + slug: "Você precisa saber a ordem para inserir fragmentos dentro da página." + site: + meta_keywords: "Palavras chave usadas dentro da tag 'head' da página. Elas são separadas por um espaço em branco. Requerido para SEO." + meta_description: "Descrição chave usada dentro da tag 'head' da página. Requerido para SEO." + domain_name: "ex: locomotiveapp.org" + theme_asset: + slug: "Você não precisa adicionar as extensões do arquivo (.css or .js)" + edit: + source: "Você pode substituir por um arquivo com a mesma extensão." + custom_fields: + field: + _alias: "Propriedades disponíveis em templates líquidos." + hint: "Texto mostrado no formulário de modelo está abaixo do campo." + import: + source: "Um arquivo .zip contendo um database.yml com assets and templates" + samples: "Se habilitado, a importação também irá copiar conteúdos e assets." + reset: "Se habilitado, todos os dados do site serão apagados antes da importação do novo site." + content_type: + api_enabled: "Ele é utilizado para permitir que pessoas de fora criem novas instâncias (exemplo: mensagens no formulário de contato)" + api_accounts: "Um email de notificação será enviado para conta listada acima quando uma nova instância for criada." \ No newline at end of file diff --git a/lib/locomotive/configuration.rb b/lib/locomotive/configuration.rb index db5cb1cf..32f6d850 100644 --- a/lib/locomotive/configuration.rb +++ b/lib/locomotive/configuration.rb @@ -7,7 +7,7 @@ module Locomotive :reserved_subdomains => %w{www admin email blog webmail mail support help site sites}, # :forbidden_paths => %w{layouts snippets stylesheets javascripts assets admin system api}, :reserved_slugs => %w{stylesheets javascripts assets admin images api pages edit}, - :locales => %w{en fr}, + :locales => %w{en fr pt-BR}, :cookie_key => '_locomotive_session', :enable_logs => false, :heroku => false, diff --git a/public/javascripts/admin/locales/datepicker_pt-BR.js b/public/javascripts/admin/locales/datepicker_pt-BR.js new file mode 100644 index 00000000..bd9efe88 --- /dev/null +++ b/public/javascripts/admin/locales/datepicker_pt-BR.js @@ -0,0 +1,18 @@ +/* French initialisation for the jQuery UI date picker plugin. */ +/* Written by Keith Wood (kbwood@virginbroadband.com.au) and Stéphane Nahmani (sholby@sholby.net). */ +jQuery(function($){ + $.datepicker.regional['pt-BR'] = { + closeText: 'Fechar', + prevText: '<Ant', + nextText: 'Prox>', + currentText: 'Atual', + monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', + 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], + monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', + 'Jul','Ago','Set','Out','Nov','Dez'], + dayNames: ['Domingo','Segunda','Terça','Quarta','Quinta','Sexta','Sábado'], + dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'], + dayNamesMin: ['Do','Se','Te','Qua','Qu','Se','Sa'], + dateFormat: 'dd/mm/yy', firstDay: 1, + isRTL: false}; +}); \ No newline at end of file diff --git a/spec/factories.rb b/spec/factories.rb index 17ce2dfc..9f9f253a 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -39,6 +39,12 @@ Factory.define "frenchy user", :parent => :account do |a| a.locale 'fr' end +Factory.define "brazillian user", :parent => :account do |a| + a.name "José Carlos" + a.email "jose@carlos.com.br" + a.locale 'pt-BR' +end + ## Memberships ## Factory.define :membership do |m|