locomotive_cms 2.5.5 → 2.5.6.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -2
  3. data/README.textile +3 -3
  4. data/app/assets/images/locomotive/icons/flags/pt.png +0 -0
  5. data/app/assets/javascripts/locomotive/utils/aloha_settings.js.coffee +1 -1
  6. data/app/assets/javascripts/locomotive/views/current_site/edit_view.js.coffee +5 -0
  7. data/app/assets/stylesheets/locomotive/backoffice/menu/main.css.scss +1 -1
  8. data/app/controllers/locomotive/api/theme_assets_controller.rb +1 -1
  9. data/app/controllers/locomotive/public/content_entries_controller.rb +6 -11
  10. data/app/controllers/locomotive/public/pages_controller.rb +1 -1
  11. data/app/controllers/locomotive/public/sitemaps_controller.rb +1 -1
  12. data/app/models/locomotive/extensions/content_type/sync.rb +16 -5
  13. data/app/models/locomotive/extensions/page/tree.rb +7 -3
  14. data/app/models/locomotive/extensions/site/locales.rb +12 -9
  15. data/app/models/locomotive/site.rb +10 -0
  16. data/app/views/locomotive/current_site/_form.html.haml +1 -0
  17. data/config/locales/admin_ui.cs.yml +2 -0
  18. data/config/locales/admin_ui.de.yml +3 -2
  19. data/config/locales/admin_ui.en.yml +1 -0
  20. data/config/locales/admin_ui.es.yml +2 -1
  21. data/config/locales/admin_ui.et.yml +1 -0
  22. data/config/locales/admin_ui.fr.yml +2 -1
  23. data/config/locales/admin_ui.it.yml +23 -0
  24. data/config/locales/admin_ui.ja.yml +1 -0
  25. data/config/locales/admin_ui.nb.yml +1 -0
  26. data/config/locales/admin_ui.nl.yml +4 -0
  27. data/config/locales/admin_ui.pl.yml +1 -0
  28. data/config/locales/admin_ui.pt-BR.yml +6 -5
  29. data/config/locales/admin_ui.pt.yml +320 -0
  30. data/config/locales/admin_ui.ru.yml +1 -0
  31. data/config/locales/admin_ui.sk.yml +2 -0
  32. data/config/locales/admin_ui.sr.yml +1 -0
  33. data/config/locales/admin_ui.zh-CN.yml +1 -0
  34. data/config/locales/carrierwave.pt.yml +4 -0
  35. data/config/locales/default.pt.yml +212 -0
  36. data/config/locales/devise.pt.yml +62 -0
  37. data/config/locales/flash.pt.yml +106 -0
  38. data/config/locales/formtastic.pt.yml +70 -0
  39. data/config/routes.rb +5 -6
  40. data/features/api/authorization/theme_assets.feature +4 -4
  41. data/features/public/contact_form.feature +1 -1
  42. data/features/public/new_contact_form.feature +95 -0
  43. data/features/public/pages.feature +2 -2
  44. data/features/step_definitions/relationships_steps.rb +37 -34
  45. data/lib/generators/locomotive/install/install_generator.rb +2 -0
  46. data/lib/generators/locomotive/install/templates/README +3 -2
  47. data/lib/generators/locomotive/install/templates/devise.rb +175 -0
  48. data/lib/generators/locomotive/install/templates/dragonfly.rb +1 -1
  49. data/lib/generators/locomotive/install/templates/locomotive.rb +2 -2
  50. data/lib/locomotive.rb +9 -0
  51. data/lib/locomotive/action_controller/public_responder.rb +45 -28
  52. data/lib/locomotive/configuration.rb +2 -2
  53. data/lib/locomotive/liquid/drops/content_entry.rb +6 -8
  54. data/lib/locomotive/liquid/drops/site.rb +1 -5
  55. data/lib/locomotive/liquid/filters/translate.rb +1 -1
  56. data/lib/locomotive/liquid/tags/fetch_page.rb +14 -6
  57. data/lib/locomotive/liquid/tags/model_form.rb +75 -0
  58. data/lib/locomotive/middlewares.rb +5 -1
  59. data/lib/locomotive/middlewares/base.rb +45 -0
  60. data/lib/locomotive/middlewares/locale.rb +32 -0
  61. data/lib/locomotive/middlewares/locale_redirection.rb +46 -0
  62. data/lib/locomotive/middlewares/seo_trailing_slash.rb +7 -28
  63. data/lib/locomotive/middlewares/site.rb +26 -0
  64. data/lib/locomotive/regexps.rb +1 -1
  65. data/lib/locomotive/render.rb +22 -2
  66. data/lib/locomotive/routing.rb +1 -0
  67. data/lib/locomotive/routing/post_content_entry_constraint.rb +11 -0
  68. data/lib/locomotive/routing/site_dispatcher.rb +1 -12
  69. data/lib/locomotive/version.rb +1 -1
  70. data/spec/dummy/config/boot.rb +1 -1
  71. data/spec/dummy/config/initializers/dragonfly.rb +1 -1
  72. data/spec/dummy/config/initializers/locomotive.rb +2 -2
  73. data/spec/lib/locomotive/liquid/drops/content_entry_spec.rb +23 -18
  74. data/spec/lib/locomotive/liquid/drops/site_spec.rb +25 -15
  75. data/spec/lib/locomotive/liquid/tags/model_form_spec.rb +46 -0
  76. data/spec/lib/locomotive/routing/site_dispatcher_spec.rb +0 -41
  77. data/spec/models/locomotive/site_spec.rb +1 -1
  78. data/spec/requests/locale_redirection_spec.rb +109 -0
  79. data/spec/requests/locale_spec.rb +85 -0
  80. data/spec/requests/seo_trailing_slash_spec.rb +1 -1
  81. data/spec/requests/site_spec.rb +27 -0
  82. data/spec/support/factories.rb +6 -0
  83. data/spec/support/middlewares.rb +3 -0
  84. metadata +48 -10
@@ -0,0 +1,4 @@
1
+ pt:
2
+ carrierwave:
3
+ errors:
4
+ integrity: 'não é um tipo de arquivo compatível.'
@@ -0,0 +1,212 @@
1
+ pt:
2
+ errors:
3
+ # The default format use in full error messages.
4
+ format: "%{attribute} %{message}"
5
+
6
+ messages:
7
+ inclusion: "não está incluído na lista"
8
+ exclusion: "não está disponível"
9
+ invalid: "não é válido"
10
+ confirmation: "não está de acordo com a confirmação"
11
+ accepted: "deve ser aceite"
12
+ empty: "não pode ficar vazio"
13
+ blank: "não pode ficar em branco"
14
+ too_long: "é muito longo (máximo: %{count} caracteres)"
15
+ too_short: "é muito curto (mínimo: %{count} caracteres)"
16
+ wrong_length: "não possui o tamanho esperado (%{count} caracteres)"
17
+ not_a_number: "não é um número"
18
+ not_an_integer: "não é um número inteiro"
19
+ greater_than: "deve ser maior do que %{count}"
20
+ greater_than_or_equal_to: "deve ser maior ou igual a %{count}"
21
+ equal_to: "deve ser igual a %{count}"
22
+ less_than: "deve ser menor do que %{count}"
23
+ less_than_or_equal_to: "deve ser menor ou igual a %{count}"
24
+ odd: "deve ser ímpar"
25
+ even: "deve ser par"
26
+
27
+ domain_taken: "%{value} já está em uso."
28
+ invalid_domain: "%{value} é inválido."
29
+ needs_admin_account: "É necessário pelo menos uma conta de administrador."
30
+ protected_page: "Não pode remover a página inicial e a de erro 404"
31
+ extname_changed: "O novo ficheiro não tem a mesma extensão que o original"
32
+ array_too_short: "é muito pequeno (o número mínimo de elementos é %{count})"
33
+ liquid_syntax: "Erro na sintaxe Liquid, por favor verifique a sintaxe ('%{error}')"
34
+ invalid_theme_file: "não pode ser vazio ou não é um arquivo zip"
35
+ page:
36
+ liquid_syntax: "Erro de sintaxe Liquid, por favor verifique a sintaxe"
37
+ liquid_extend: "A página estende um template que não existe."
38
+
39
+ date:
40
+ formats:
41
+ default: "%d/%m/%Y"
42
+
43
+ attributes:
44
+ defaults:
45
+ pages:
46
+ index:
47
+ title: "Página Inicial"
48
+ body: "Conteúdo da página inicial"
49
+ "404":
50
+ title: "Página não encontrada"
51
+ body: "Conteúdo da página de erro 404"
52
+ other:
53
+ body: "{% extends 'parent' %}"
54
+
55
+ mongoid:
56
+ errors:
57
+ messages:
58
+ blank_in_locale: "não pode ficar em branco"
59
+ attributes:
60
+ page:
61
+ title: Título
62
+ parent: Pai
63
+ slug: Slug
64
+ templatized: Template
65
+ published: Publicado
66
+ cache_strategy: Cache
67
+ content_type:
68
+ name: Nome
69
+ description: Descrição
70
+ slug: Slug
71
+ order_by: Ordenar por
72
+ highlighted_field_name: Nome do Campo em destaque
73
+ group_by_field_name: Agrupar por name do campo
74
+ api_enabled: Activation API
75
+ asset:
76
+ source: Ficheiro
77
+ account:
78
+ email: Email
79
+ name: Nome
80
+ language: Lingua
81
+ password: Password
82
+ password_confirmation: Confirmação da password
83
+ snippet:
84
+ body: Código
85
+ slug: slug
86
+ name: Nome
87
+ theme_asset:
88
+ content_type: Tipo de conteúdo
89
+ site:
90
+ name: Nome do Site
91
+ domain_name: Domínio
92
+ subdomain: Sub-domínio
93
+ restricted_access: Restrito ?
94
+ access_login: Login
95
+ access_password: "password"
96
+
97
+ pagination:
98
+ previous: "« Anterior"
99
+ next: "Próximo »"
100
+
101
+ date:
102
+ formats:
103
+ default: "%d/%m/%Y"
104
+ short: "%e %b"
105
+ long: "%e %B %Y"
106
+ long_ordinal: "%e %B %Y"
107
+ only_day: "%e"
108
+
109
+ day_names: [Domingo, Segunda, Terça, Quarta, Quinta, Sexta, Sábado]
110
+ abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb]
111
+
112
+ month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro]
113
+ abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez]
114
+ order: [day, month, year]
115
+
116
+
117
+ time:
118
+ formats:
119
+ default: "%d/%m/%Y %H:%M"
120
+ time: "%H:%M"
121
+ short: "%d %b %H:%M"
122
+ long: "%A %d %B %Y %H:%M:%S %Z"
123
+ long_ordinal: "%A %d %B %Y %H:%M:%S %Z"
124
+ only_second: "%S"
125
+ am: 'am'
126
+ pm: 'pm'
127
+
128
+ datetime:
129
+ distance_in_words:
130
+ half_a_minute: 'meio minuto'
131
+ less_than_x_seconds:
132
+ one: 'menos de 1 segundo'
133
+ other: 'menos de %{count} segundos'
134
+
135
+ x_seconds:
136
+ one: '1 segundo'
137
+ other: '%{count} segundos'
138
+
139
+ less_than_x_minutes:
140
+ one: 'menos de um minuto'
141
+ other: 'menos de %{count} minutos'
142
+
143
+ x_minutes:
144
+ one: '1 minuto'
145
+ other: '%{count} minutos'
146
+
147
+ about_x_hours:
148
+ one: 'aproximadamente 1 hora'
149
+ other: 'aproximadamente %{count} horas'
150
+
151
+ x_days:
152
+ one: '1 dia'
153
+ other: '%{count} dias'
154
+
155
+ about_x_months:
156
+ one: 'aproximadamente 1 mês'
157
+ other: 'aproximadamente %{count} meses'
158
+
159
+ x_months:
160
+ one: '1 mês'
161
+ other: '%{count} meses'
162
+
163
+ about_x_years:
164
+ one: 'aproximadamente 1 ano'
165
+ other: 'aproximadamente %{count} anos'
166
+
167
+ over_x_years:
168
+ one: 'mais de 1 ano'
169
+ other: 'mais de %{count} anos'
170
+
171
+ almost_x_years:
172
+ one: 'quase 1 ano'
173
+ other: 'quase %{count} anos'
174
+
175
+ prompts:
176
+ year: "Ano"
177
+ month: "Mês"
178
+ day: "Dia"
179
+ hour: "Hora"
180
+ minute: "Minuto"
181
+ second: "Segundos"
182
+
183
+
184
+ number:
185
+ format:
186
+ precision: 3
187
+ separator: ','
188
+ delimiter: '. '
189
+ currency:
190
+ format:
191
+ unit: '€'
192
+ precision: 2
193
+ format: '%n %u'
194
+ human:
195
+ format:
196
+ precision: 2
197
+ storage_units:
198
+ format: '%n %u'
199
+ units:
200
+ byte: 'Byte'
201
+ kb: 'Kb'
202
+ mb: 'Mb'
203
+ gb: 'Gb'
204
+ tb: 'Tb'
205
+
206
+ support:
207
+ array:
208
+ sentence_connector: ' e '
209
+ skip_last_comma: true
210
+ words_connector: ", "
211
+ two_words_connector: " e "
212
+ last_word_connector: " e "
@@ -0,0 +1,62 @@
1
+ pt:
2
+ errors:
3
+ messages:
4
+ not_found: "não encontrado"
5
+ already_confirmed: "já foi confirmado"
6
+ not_locked: "não está bloqueado"
7
+
8
+ devise:
9
+ failure:
10
+ locomotive_account:
11
+ unauthenticated: 'É necessário registar ou fazer o login antes de continuar.'
12
+ unconfirmed: 'Deve confirmar sua conta antes de continuar.'
13
+ locked: 'A sua conta está bloqueada.'
14
+ invalid: 'Email ou senha inválidos.'
15
+ not_found_in_database: 'Email ou senha inválidos.'
16
+ invalid_token: 'Autenticação inválida.'
17
+ timeout: 'A sua sessão expirou. Por favor, faça o login novamente para continuar.'
18
+ inactive: 'A sua conta ainda não foi ativada.'
19
+ sessions:
20
+ locomotive_account:
21
+ signed_in: 'Login efectuado com sucesso.'
22
+ signed_out: 'Logout efectuado com sucesso.'
23
+ passwords:
24
+ locomotive_account:
25
+ send_instructions: 'Vai receber um email com as instruções sobre como alterar a sua password em poucos minutos.'
26
+ updated: 'A sua password foi alterada com sucesso. Está autenticado.'
27
+ confirmations:
28
+ locomotive_account:
29
+ send_instructions: 'Vai receber um email com as instruções sobre como confirmar a sua conta em poucos minutos.'
30
+ confirmed: 'A sua conta foi confirmada com sucesso. Está autenticado.'
31
+ registrations:
32
+ locomotive_account:
33
+ signed_up: 'Autenticou com sucesso.'
34
+ updated: 'Atualização da conta feita com sucesso.'
35
+ destroyed: 'A sua conta foi cancelada com sucesso. Esperamos voltar a vê-lo por aqui, obrigado e Adeus!'
36
+ unlocks:
37
+ locomotive_account:
38
+ send_instructions: 'Irá receber um email com as intruções de como desbloquear a sua conta em poucos minutos.'
39
+ unlocked: 'A sua conta foi desbloqueada com sucesso. Está autenticado.'
40
+ mailer:
41
+ locomotive_account:
42
+ confirmation_instructions: 'Instruções de confirmação'
43
+ reset_password_instructions: 'Instruções para fazer o reset á password.'
44
+ unlock_instructions: 'Instruções de desbloqueio'
45
+
46
+
47
+ locomotive:
48
+ devise_mailer:
49
+ common:
50
+ hello: Olá
51
+ confirmation_instructions:
52
+ you_can_confirm_your_account_through_the_link_below: "Pode confirmar a sua conta através do link em baixo."
53
+ confirm_my_account: "Confirmar a minha conta"
54
+ reset_password_instructions:
55
+ reset_password_instruction: "Alguém solicitou um link para alterar a sua password. Você poderá fazer isto através do link em baixo:"
56
+ change_my_password: "Alterar a minha password"
57
+ wrong_request_instruction: "Se você não solicitou esta operação, por favor ignore este email."
58
+ unchange_password_message: "A sua password não irá ser alterada até que você aceda ao link em cima e crie uma nova password."
59
+ unlock_instructions:
60
+ locked_account_message: "A sua conta foi bloqueada devido a excessivas tentativas de autenticação sem sucesso."
61
+ unlock_account_instruction: "Clique no link em baixo para desbloquear a sua conta:"
62
+ unlock_my_account: "Desbloquear a minha conta"
@@ -0,0 +1,106 @@
1
+ pt:
2
+ flash:
3
+ locomotive:
4
+ pages:
5
+ create:
6
+ notice: "Página criada com sucesso."
7
+ alert: "Página não criada."
8
+ update:
9
+ notice: "Página atualizada com sucesso."
10
+ alert: "Página não atualizada."
11
+ sort:
12
+ notice: "Páginas ordenadas com sucesso."
13
+ destroy:
14
+ notice: "Páginas apagadas com sucesso."
15
+
16
+ content_entries:
17
+ create:
18
+ notice: "Conteúdo criado com sucesso."
19
+ alert: "Conteúdo não criado."
20
+ update:
21
+ notice: "Conteúdo atualizado com sucesso."
22
+ alert: "Conteúdo não atualizado."
23
+ sort:
24
+ notice: "Conteúdos ordenados com sucesso."
25
+ destroy:
26
+ notice: "Conteúdos apagados com sucesso."
27
+
28
+ content_types:
29
+ create:
30
+ notice: "Modelo criado com sucesso."
31
+ alert: "Modelo não criado."
32
+ update:
33
+ notice: "Modelo atualizado com sucesso."
34
+ alert: "Modelo não atualizado."
35
+ destroy:
36
+ notice: "Modelo apagado com sucesso."
37
+
38
+ current_site:
39
+ update:
40
+ notice: "Site atualizado com sucesso."
41
+ alert: "Site não atualizado."
42
+
43
+ snippets:
44
+ create:
45
+ notice: "Bloco criado com sucesso."
46
+ alert: "Bloco não criado."
47
+ update:
48
+ notice: "Bloco atualizado com sucesso."
49
+ alert: "Bloco não atualizado."
50
+ destroy:
51
+ notice: "Bloco apagado com sucesso."
52
+
53
+ accounts:
54
+ create:
55
+ notice: "Conta criada com sucesso."
56
+ alert: "Conta não criada."
57
+
58
+ my_account:
59
+ update:
60
+ notice: "A minha conta foi atualizada com sucesso."
61
+ alert: "A minha conta não foi atualizada."
62
+
63
+ sites:
64
+ create:
65
+ notice: "Site criado com sucesso."
66
+ alert: "Site não criado."
67
+ destroy:
68
+ notice: "Site removido com sucesso."
69
+
70
+ memberships:
71
+ create:
72
+ notice: "Conta adicionada com sucesso."
73
+ alert: "Conta não adicionada."
74
+ already_created: "A conta já foi adicionada ao site atual."
75
+
76
+ assets:
77
+ create:
78
+ notice: "Recurso criado com sucesso."
79
+ alert: "Recurso não criado."
80
+ update:
81
+ notice: "Recurso atualizado com sucesso."
82
+ alert: "Recurso não atualizado."
83
+
84
+ theme_assets:
85
+ create:
86
+ notice: "Ficheiro criado com sucesso."
87
+ alert: "Ficheiro não criado."
88
+ update:
89
+ notice: "Ficheiro atualizado com sucesso."
90
+ alert: "Ficheiro não atualizado."
91
+ destroy:
92
+ notice: "Ficheiro removido com sucesso."
93
+
94
+ custom_fields:
95
+ update:
96
+ alert: "Campo não atualizado."
97
+
98
+ cross_domain_sessions:
99
+ create:
100
+ alert: "É necessário autenticar"
101
+
102
+ import:
103
+ create:
104
+ done: "O seu site foi atualizado com sucesso."
105
+ notice: "O seu site está em atualização."
106
+ alert: "A importação não foi efetuada."
@@ -0,0 +1,70 @@
1
+ pt:
2
+ formtastic:
3
+ titles:
4
+ information: Informação geral
5
+ meta: Metadata SEO
6
+ code: Código
7
+ raw_template: Template
8
+ credentials: Credenciais
9
+ language: Língua
10
+ sites: Sites
11
+ access_points: Pontos de acesso
12
+ memberships: Contas
13
+ membership_email: Conta de email
14
+ file: Ficheiro
15
+ preview: Pré-visualizar
16
+ options: Opções avançadas
17
+ custom_fields: Campos personalizáveis
18
+ other_fields: Outras informações
19
+ presentation: Apresentação
20
+ attributes: Atributos
21
+ upload: Upload
22
+ labels:
23
+ theme_asset:
24
+ plain_text_name: Nome do ficheiro
25
+ content_type: Tipo do ficheiro
26
+ new:
27
+ source: Ficheiro
28
+ edit:
29
+ source: Substituir ficheiro
30
+ custom_fields:
31
+ field:
32
+ name: Apelido
33
+ import:
34
+ new:
35
+ source: Ficheiro
36
+ samples: Amostras
37
+ reset: Reiniciar site
38
+ content_type:
39
+ api_accounts: Contas notificadas
40
+ account:
41
+ edit:
42
+ password: Nova password
43
+ password_confirmation: Confirmação da nova password
44
+
45
+ hints:
46
+ page:
47
+ published: "Apenas contas autenticadas podem ver as páginas não publicadas."
48
+ cache_strategy: 'Faça o Cache da página para obter melhor desempenho. A escolha do "Simples" é um bom compromisso'
49
+ templatized: "Utilize a página como template para o modelo definido."
50
+ snippet:
51
+ slug: "Necessita de saber a ordem para inserir blocos dentro da página."
52
+ site:
53
+ meta_keywords: "Palavras chave utilizadas dentro da tag 'head' da página. Elas são separadas por um espaço em branco. Necessário para SEO."
54
+ meta_description: "Descrição chave utilizada dentro da tag 'head' da página. Necessário para SEO."
55
+ domain_name: "ex: locomotiveapp.org"
56
+ theme_asset:
57
+ slug: "Não necessita de adicionar as extensões do arquivo (.css or .js)"
58
+ edit:
59
+ source: "Pode substituir por um ficheiro com a mesma extensão."
60
+ custom_fields:
61
+ field:
62
+ name: "Propriedades disponíveis em templates LIQUID."
63
+ hint: "Texto apresentado no formulário do modelo encontra-se por baixo do campo."
64
+ import:
65
+ source: "Um ficheiro .zip contendo um ficheiro database.yml com recursos e templates"
66
+ samples: "Se activado, a importação também irá copiar conteúdos e recursos."
67
+ reset: "Se activado, todos os dados do site serão apagados antes da importação do novo site."
68
+ content_type:
69
+ api_enabled: "É utilizado para permitir que as pessoas de fora possam criar novas instâncias (exemplo: mensagens no formulário de contato)"
70
+ api_accounts: "Um email de notificação será enviado para os emails contidos na lista quando uma nova instância for criada."