diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index e69de29b..00000000 diff --git a/config/assets.yml b/config/assets.yml index 156926eb..55f54446 100644 --- a/config/assets.yml +++ b/config/assets.yml @@ -20,6 +20,7 @@ javascripts: - public/javascripts/admin/plugins/cookie.js - public/javascripts/admin/plugins/selectmenu.js - public/javascripts/admin/locales/datepicker_fr.js + - public/javascripts/admin/locales/datepicker_pt-BR.js - public/javascripts/admin/application.js custom_fields: - public/javascripts/admin/plugins/fancybox.js 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 f39e2979..49b57131 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..2882a12e --- /dev/null +++ b/config/locales/default.pt-BR.yml @@ -0,0 +1,214 @@ +pt-BR: + errors: + # The default format use in full error messages. + format: "%{attribute} %{message}" + + messages: + inclusion: "não está incluído na lista" + exclusion: "não está disponível" + invalid: "não é válido" + confirmation: "não está de acordo com a confirmação" + accepted: "deve ser aceito" + empty: "não pode ficar vazio" + blank: "não pode ficar em branco" + too_long: "é muito longo (máximo: %{count} caracteres)" + too_short: "é muito curto (mínimo: %{count} caracteres)" + wrong_length: "não possui o tamanho esperado (%{count} caracteres)" + not_a_number: "não é um número" + not_an_integer: "não é um número inteiro" + greater_than: "deve ser maior do que %{count}" + greater_than_or_equal_to: "deve ser maior ou igual a %{count}" + equal_to: "deve ser igual a %{count}" + less_than: "deve ser menor do que %{count}" + less_than_or_equal_to: "deve ser menor ou igual a %{count}" + odd: "deve ser ímpar" + even: "deve ser par" + + 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" + + + date: + formats: + default: "%d/%m/%Y" + + + 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" + + activemodel: + attributes: + page: + title: Título + parent: Pai + slug: Slug + templatized: Template + published: Publicado + cache_strategy: Cache + content_type: + name: Nome + description: Descrição + slug: Slug + order_by: Ordenar por + highlighted_field_name: Nome do Campo em destaque + group_by_field_name: Agrupar por name do campo + api_enabled: Activation API + asset_collection: + name: Nome + slug: Slug + asset: + name: Nome + source: Arquivo + account: + email: Email + name: Nome + language: Lingugaem + new_password: "Nova senha" + new_password_confirmation: "Confirmação da nova senha" + snippet: + body: Código + slug: slug + name: Nome + theme_asset: + content_type: Tipo de conteúdo + site: + name: Nome do Site + domain_name: Domínio + subdomain: Sub-domínio + restricted_access: Restrito ? + access_login: Login + access_password: "senha" + + pagination: + previous: "« Anterior" + next: "Próximo »" + + date: + formats: + default: "%d/%m/%Y" + short: "%e %b" + long: "%e %B %Y" + long_ordinal: "%e %B %Y" + only_day: "%e" + + day_names: [Domingo, Segunda, Terça, Quarta, Quinta, Sexta, Sábado] + abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb] + + month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro] + abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez] + order: [ :day, :month, :year ] + + + time: + formats: + default: "%d %B %Y %H:%M" + time: "%H:%M" + short: "%d %b %H:%M" + long: "%A %d %B %Y %H:%M:%S %Z" + long_ordinal: "%A %d %B %Y %H:%M:%S %Z" + only_second: "%S" + am: 'am' + pm: 'pm' + + datetime: + distance_in_words: + half_a_minute: 'meio minuto' + less_than_x_seconds: + one: 'menos de 1 segundo' + other: 'menos de %{count} segundos' + + x_seconds: + one: '1 segundo' + other: '%{count} segundos' + + less_than_x_minutes: + one: 'menos de um minuto' + other: 'menos de %{count} minutos' + + x_minutes: + one: '1 minuto' + other: '%{count} minutos' + + about_x_hours: + one: 'aproximadamente 1 hora' + other: 'aproximadamente %{count} horas' + + x_days: + one: '1 dia' + other: '%{count} dias' + + about_x_months: + one: 'aproximadamente 1 mês' + other: 'aproximadamente %{count} meses' + + x_months: + one: '1 mês' + other: '%{count} meses' + + about_x_years: + one: 'aproximadamente 1 ano' + other: 'aproximadamente %{count} anos' + + over_x_years: + one: 'mais de 1 ano' + other: 'mais de %{count} anos' + + almost_x_years: + one: 'quase 1 ano' + other: 'quase %{count} anos' + + prompts: + year: "Ano" + month: "Mês" + day: "Dia" + hour: "Hora" + minute: "Minuto" + second: "Segundos" + + + number: + format: + precision: 3 + separator: ',' + delimiter: '. ' + currency: + format: + unit: 'R$' + precision: 2 + format: '%n %u' + human: + format: + precision: 2 + storage_units: + format: '%n %u' + units: + byte: 'Byte' + kb: 'Kb' + mb: 'Mb' + gb: 'Gb' + tb: 'Tb' + + support: + array: + sentence_connector: ' e ' + skip_last_comma: true + words_connector: ", " + two_words_connector: " e " + last_word_connector: " e " + \ No newline at end of file diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml new file mode 100644 index 00000000..6cff714d --- /dev/null +++ b/config/locales/devise.pt-BR.yml @@ -0,0 +1,61 @@ +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..9796246e --- /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: Língua + 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 customizáveis + 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: Arquivo + samples: Amostras de cópia + reset: Reiniciar site + 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/generators/locomotive/install/templates/locomotive.rb b/lib/generators/locomotive/install/templates/locomotive.rb index f93eaf05..9e00d5e9 100644 --- a/lib/generators/locomotive/install/templates/locomotive.rb +++ b/lib/generators/locomotive/install/templates/locomotive.rb @@ -35,7 +35,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/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/images/admin/icons/flags/pt-BR.png b/public/images/admin/icons/flags/pt-BR.png new file mode 100644 index 00000000..2c4e4e71 Binary files /dev/null and b/public/images/admin/icons/flags/pt-BR.png differ diff --git a/public/javascripts/admin/aloha/i18n/fr.dict b/public/javascripts/admin/aloha/i18n/fr.dict index d605ec2c..b03b6f56 100644 --- a/public/javascripts/admin/aloha/i18n/fr.dict +++ b/public/javascripts/admin/aloha/i18n/fr.dict @@ -2,4 +2,6 @@ floatingmenu.tab.format=Mise en page floatingmenu.tab.insert=Insertion yes=Oui no=Non -cancel=Annuler \ No newline at end of file +cancel=Annuler +repository.no_item_found=Aucun élément trouvé. +repository.loading=Chargement \ No newline at end of file diff --git a/public/javascripts/admin/aloha/i18n/pt-BR.dict b/public/javascripts/admin/aloha/i18n/pt-BR.dict new file mode 100644 index 00000000..676ad8af --- /dev/null +++ b/public/javascripts/admin/aloha/i18n/pt-BR.dict @@ -0,0 +1,7 @@ +floatingmenu.tab.format=Formato +floatingmenu.tab.insert=Inserir +yes=Sim +no=Não +cancel=Cancelar +repository.no_item_found=Nenhum item encotrado. +repository.loading=Carregando \ No newline at end of file diff --git a/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Format b/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Format deleted file mode 160000 index c71edba4..00000000 --- a/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Format +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c71edba41798a4be621197a7418747252884a34d diff --git a/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.HighlightEditables b/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.HighlightEditables deleted file mode 160000 index 11d45d8d..00000000 --- a/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.HighlightEditables +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 11d45d8df725f0e15501c1447975b84473b8c116 diff --git a/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link b/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link deleted file mode 160000 index a148845e..00000000 --- a/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Link +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a148845e30f7a1f6aa2640d12070dbfa44773370 diff --git a/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.List b/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.List deleted file mode 160000 index ada3208a..00000000 --- a/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.List +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ada3208a19a31251ad0a58f136bbb09fea68fd70 diff --git a/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.TOC b/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.TOC deleted file mode 160000 index 7d622b36..00000000 --- a/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.TOC +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7d622b36dc1501f993f39e74649fef64c403ba67 diff --git a/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Table b/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Table deleted file mode 160000 index e7153647..00000000 --- a/public/javascripts/admin/aloha/plugins/com.gentics.aloha.plugins.Table +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e71536475f32b7ee191087f76c2d7acbadad14be diff --git a/public/javascripts/admin/inline_editor.js b/public/javascripts/admin/inline_editor.js index 532557fb..29a85eab 100644 --- a/public/javascripts/admin/inline_editor.js +++ b/public/javascripts/admin/inline_editor.js @@ -25,6 +25,9 @@ if (typeof GENTICS != 'undefined') { '.editable-short-text' : [ ] } } + }, + i18n: { + available: ['en', 'fr', 'pt-BR'] } }; @@ -36,7 +39,7 @@ jQuery(document).ready(function($) { InlineEditorToolbar.initialize(); if (InlineEditorToolbar.editingMode) { - GENTICS.Aloha.settings['i18n'] = { 'current': InlineEditorToolbar.locale }; + GENTICS.Aloha.settings.i18n['current'] = InlineEditorToolbar.locale; // add 'edit' at the end of each url of the page $('a').each(function() { diff --git a/public/javascripts/admin/inline_editor_toolbar.js b/public/javascripts/admin/inline_editor_toolbar.js index c642711c..24c522bd 100644 --- a/public/javascripts/admin/inline_editor_toolbar.js +++ b/public/javascripts/admin/inline_editor_toolbar.js @@ -165,6 +165,14 @@ var InlineEditorToolbar = { 'cancel': 'annuler', 'back': 'fin mode edition', 'saving': 'sauvegarde en cours' + }, + 'pt-BR': { + 'home': 'admin', + 'edit': 'editar', + 'save': 'salvar', + 'cancel': 'cancelar', + 'back': 'terminar edição', + 'saving': 'salvando' } } }; \ No newline at end of file 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..d19bc5a4 --- /dev/null +++ b/public/javascripts/admin/locales/datepicker_pt-BR.js @@ -0,0 +1,18 @@ +/* Brazilian Portuguese initialisation for the jQuery UI date picker plugin. */ +/* Written by Raphael Costa (raphael@experia.com.br) */ +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/public/javascripts/admin/plugins/tiny_mce/langs/pt-BR.js b/public/javascripts/admin/plugins/tiny_mce/langs/pt-BR.js new file mode 100644 index 00000000..8021c701 --- /dev/null +++ b/public/javascripts/admin/plugins/tiny_mce/langs/pt-BR.js @@ -0,0 +1,170 @@ +tinyMCE.addI18n({en:{ +common:{ +edit_confirm:"Do you want to use the WYSIWYG mode for this textarea?", +apply:"Aplicar", +insert:"Inserir", +update:"Update", +cancel:"Cancel", +close:"Close", +browse:"Browse", +class_name:"Class", +not_set:"-- Not set --", +clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?", +clipboard_no_support:"Currently not supported by your browser, use keyboard shortcuts instead.", +popup_blocked:"Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.", +invalid_data:"Error: Invalid values entered, these are marked in red.", +more_colors:"More colors" +}, +contextmenu:{ +align:"Alignment", +left:"Left", +center:"Center", +right:"Right", +full:"Full" +}, +insertdatetime:{ +date_fmt:"%Y-%m-%d", +time_fmt:"%H:%M:%S", +insertdate_desc:"Insert date", +inserttime_desc:"Insert time", +months_long:"January,February,March,April,May,June,July,August,September,October,November,December", +months_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", +day_long:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday", +day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun" +}, +print:{ +print_desc:"Print" +}, +preview:{ +preview_desc:"Preview" +}, +directionality:{ +ltr_desc:"Direction left to right", +rtl_desc:"Direction right to left" +}, +layer:{ +insertlayer_desc:"Insert new layer", +forward_desc:"Move forward", +backward_desc:"Move backward", +absolute_desc:"Toggle absolute positioning", +content:"New layer..." +}, +save:{ +save_desc:"Save", +cancel_desc:"Cancel all changes" +}, +nonbreaking:{ +nonbreaking_desc:"Insert non-breaking space character" +}, +iespell:{ +iespell_desc:"Run spell checking", +download:"ieSpell not detected. Do you want to install it now?" +}, +advhr:{ +advhr_desc:"Horizontal rule" +}, +emotions:{ +emotions_desc:"Emotions" +}, +searchreplace:{ +search_desc:"Find", +replace_desc:"Find/Replace" +}, +advimage:{ +image_desc:"Insert/edit image" +}, +advlink:{ +link_desc:"Insert/edit link" +}, +xhtmlxtras:{ +cite_desc:"Citation", +abbr_desc:"Abbreviation", +acronym_desc:"Acronym", +del_desc:"Deletion", +ins_desc:"Insertion", +attribs_desc:"Insert/Edit Attributes" +}, +style:{ +desc:"Edit CSS Style" +}, +paste:{ +paste_text_desc:"Paste as Plain Text", +paste_word_desc:"Paste from Word", +selectall_desc:"Select All", +plaintext_mode_sticky:"Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.", +plaintext_mode:"Paste is now in plain text mode. Click again to toggle back to regular paste mode." +}, +paste_dlg:{ +text_title:"Use CTRL+V on your keyboard to paste the text into the window.", +text_linebreaks:"Keep linebreaks", +word_title:"Use CTRL+V on your keyboard to paste the text into the window." +}, +table:{ +desc:"Inserts a new table", +row_before_desc:"Insert row before", +row_after_desc:"Insert row after", +delete_row_desc:"Delete row", +col_before_desc:"Insert column before", +col_after_desc:"Insert column after", +delete_col_desc:"Remove column", +split_cells_desc:"Split merged table cells", +merge_cells_desc:"Merge table cells", +row_desc:"Table row properties", +cell_desc:"Table cell properties", +props_desc:"Table properties", +paste_row_before_desc:"Paste table row before", +paste_row_after_desc:"Paste table row after", +cut_row_desc:"Cut table row", +copy_row_desc:"Copy table row", +del:"Delete table", +row:"Row", +col:"Column", +cell:"Cell" +}, +autosave:{ +unload_msg:"The changes you made will be lost if you navigate away from this page.", +restore_content:"Restore auto-saved content.", +warning_message:"If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?." +}, +fullscreen:{ +desc:"Toggle fullscreen mode" +}, +media:{ +desc:"Insert / edit embedded media", +edit:"Edit embedded media" +}, +fullpage:{ +desc:"Document properties" +}, +template:{ +desc:"Insert predefined template content" +}, +visualchars:{ +desc:"Visual control characters on/off." +}, +spellchecker:{ +desc:"Toggle spellchecker", +menu:"Spellchecker settings", +ignore_word:"Ignore word", +ignore_words:"Ignore all", +langs:"Languages", +wait:"Please wait...", +sug:"Suggestions", +no_sug:"No suggestions", +no_mpell:"No misspellings found." +}, +pagebreak:{ +desc:"Insert page break." +}, +advlist:{ +types:"Types", +def:"Default", +lower_alpha:"Lower alpha", +lower_greek:"Lower greek", +lower_roman:"Lower roman", +upper_alpha:"Upper alpha", +upper_roman:"Upper roman", +circle:"Circle", +disc:"Disc", +square:"Square" +}}}); \ No newline at end of file diff --git a/public/javascripts/admin/plugins/tiny_mce/themes/advanced/langs/pt-BR.js b/public/javascripts/admin/plugins/tiny_mce/themes/advanced/langs/pt-BR.js new file mode 100644 index 00000000..52989e39 --- /dev/null +++ b/public/javascripts/admin/plugins/tiny_mce/themes/advanced/langs/pt-BR.js @@ -0,0 +1,62 @@ +tinyMCE.addI18n('en.advanced',{ +style_select:"Styles", +font_size:"Font size", +fontdefault:"Font family", +block:"Format", +paragraph:"Paragraph", +div:"Div", +address:"Address", +pre:"Preformatted", +h1:"Heading 1", +h2:"Heading 2", +h3:"Heading 3", +h4:"Heading 4", +h5:"Heading 5", +h6:"Heading 6", +blockquote:"Blockquote", +code:"Code", +samp:"Code sample", +dt:"Definition term ", +dd:"Definition description", +bold_desc:"Bold (Ctrl+B)", +italic_desc:"Italic (Ctrl+I)", +underline_desc:"Underline (Ctrl+U)", +striketrough_desc:"Strikethrough", +justifyleft_desc:"Align left", +justifycenter_desc:"Align center", +justifyright_desc:"Align right", +justifyfull_desc:"Align full", +bullist_desc:"Unordered list", +numlist_desc:"Ordered list", +outdent_desc:"Outdent", +indent_desc:"Indent", +undo_desc:"Undo (Ctrl+Z)", +redo_desc:"Redo (Ctrl+Y)", +link_desc:"Insert/edit link", +unlink_desc:"Unlink", +image_desc:"Insert/edit image", +cleanup_desc:"Cleanup messy code", +code_desc:"Edit HTML Source", +sub_desc:"Subscript", +sup_desc:"Superscript", +hr_desc:"Insert horizontal ruler", +removeformat_desc:"Remove formatting", +custom1_desc:"Your custom description here", +forecolor_desc:"Select text color", +backcolor_desc:"Select background color", +charmap_desc:"Insert custom character", +visualaid_desc:"Toggle guidelines/invisible elements", +anchor_desc:"Insert/edit anchor", +cut_desc:"Cut", +copy_desc:"Copy", +paste_desc:"Paste", +image_props_desc:"Image properties", +newdocument_desc:"New document", +help_desc:"Help", +blockquote_desc:"Blockquote", +clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\r\nDo you want more information about this issue?", +path:"Path", +newdocument:"Are you sure you want clear all contents?", +toolbar_focus:"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X", +more_colors:"More colors" +}); \ No newline at end of file diff --git a/public/javascripts/admin/plugins/tiny_mce/themes/advanced/langs/pt-BR_dlg.js b/public/javascripts/admin/plugins/tiny_mce/themes/advanced/langs/pt-BR_dlg.js new file mode 100644 index 00000000..80e49419 --- /dev/null +++ b/public/javascripts/admin/plugins/tiny_mce/themes/advanced/langs/pt-BR_dlg.js @@ -0,0 +1,51 @@ +tinyMCE.addI18n('en.advanced_dlg',{ +about_title:"About TinyMCE", +about_general:"About", +about_help:"Help", +about_license:"License", +about_plugins:"Plugins", +about_plugin:"Plugin", +about_author:"Author", +about_version:"Version", +about_loaded:"Loaded plugins", +anchor_title:"Insert/edit anchor", +anchor_name:"Anchor name", +code_title:"HTML Source Editor", +code_wordwrap:"Word wrap", +colorpicker_title:"Select a color", +colorpicker_picker_tab:"Picker", +colorpicker_picker_title:"Color picker", +colorpicker_palette_tab:"Palette", +colorpicker_palette_title:"Palette colors", +colorpicker_named_tab:"Named", +colorpicker_named_title:"Named colors", +colorpicker_color:"Color:", +colorpicker_name:"Name:", +charmap_title:"Select custom character", +image_title:"Insert/edit image", +image_src:"Image URL", +image_alt:"Image description", +image_list:"Image list", +image_border:"Border", +image_dimensions:"Dimensions", +image_vspace:"Vertical space", +image_hspace:"Horizontal space", +image_align:"Alignment", +image_align_baseline:"Baseline", +image_align_top:"Top", +image_align_middle:"Middle", +image_align_bottom:"Bottom", +image_align_texttop:"Text top", +image_align_textbottom:"Text bottom", +image_align_left:"Left", +image_align_right:"Right", +link_title:"Insert/edit link", +link_url:"Link URL", +link_target:"Target", +link_target_same:"Open link in the same window", +link_target_blank:"Open link in a new window", +link_titlefield:"Title", +link_is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?", +link_is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?", +link_list:"Link list" +}); \ 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|