locomotive_cms 2.2.3 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +1 -0
  3. data/README.textile +2 -1
  4. data/app/assets/images/locomotive/icons/flags/bg.png +0 -0
  5. data/app/assets/images/locomotive/icons/flags/cs.png +0 -0
  6. data/app/assets/javascripts/locomotive/models/page.js.coffee +1 -1
  7. data/app/assets/javascripts/locomotive/utils/aloha_settings.js.coffee +2 -2
  8. data/app/assets/javascripts/locomotive/views/application_view.js.coffee +2 -2
  9. data/app/assets/javascripts/locomotive/views/content_assets/picker_view.js.coffee +2 -0
  10. data/app/assets/javascripts/locomotive/views/content_entries/_form_view.js.coffee +8 -0
  11. data/app/assets/javascripts/locomotive/views/editable_elements/text_view.js.coffee +2 -2
  12. data/app/assets/javascripts/locomotive/views/pages/edit_view.js.coffee +2 -0
  13. data/app/assets/javascripts/locomotive/views/shared/fields/belongs_to_view.js.coffee +2 -0
  14. data/app/assets/javascripts/locomotive/views/shared/form_view.js.coffee +7 -5
  15. data/app/assets/javascripts/tinymce/plugins/locomotive_media/editor_plugin.js +7 -3
  16. data/app/assets/javascripts/tinymce/plugins/locomotive_media/langs/cs.js +1 -0
  17. data/app/assets/stylesheets/locomotive/backoffice/datepicker.css.scss +66 -0
  18. data/app/assets/stylesheets/locomotive/backoffice/dialog_changes.css.scss +8 -2
  19. data/app/assets/stylesheets/locomotive/backoffice/formtastic_changes.css.scss +8 -0
  20. data/app/assets/stylesheets/locomotive/backoffice/menu/_colors.css.scss +1 -1
  21. data/app/controllers/locomotive/api/base_controller.rb +3 -0
  22. data/app/controllers/locomotive/api/content_entries_controller.rb +4 -4
  23. data/app/controllers/locomotive/api/tokens_controller.rb +4 -0
  24. data/app/controllers/locomotive/base_controller.rb +6 -3
  25. data/app/controllers/locomotive/public/base_controller.rb +3 -0
  26. data/app/controllers/locomotive/public/content_entries_controller.rb +2 -1
  27. data/app/helpers/locomotive/custom_fields_helper.rb +2 -2
  28. data/app/models/locomotive/content_type.rb +7 -0
  29. data/app/models/locomotive/editable_file.rb +1 -0
  30. data/app/models/locomotive/editable_text.rb +4 -1
  31. data/app/models/locomotive/extensions/page/editable_elements.rb +21 -0
  32. data/app/models/locomotive/extensions/page/templatized.rb +2 -2
  33. data/app/models/locomotive/extensions/page/tree.rb +5 -0
  34. data/app/models/locomotive/extensions/site/timezone.rb +7 -10
  35. data/app/models/locomotive/theme_asset.rb +2 -2
  36. data/app/presenters/locomotive/membership_presenter.rb +2 -1
  37. data/app/presenters/locomotive/site_presenter.rb +10 -1
  38. data/app/uploaders/locomotive/theme_asset_uploader.rb +7 -0
  39. data/app/views/locomotive/custom_fields/types/_date_time.html.haml +5 -0
  40. data/app/views/locomotive/notifications/new_content_entry.html.haml +1 -1
  41. data/app/views/locomotive/pages/_page.html.haml +2 -2
  42. data/config/locales/admin_ui.bg.yml +349 -0
  43. data/config/locales/admin_ui.cs.yml +359 -0
  44. data/config/locales/admin_ui.de.yml +25 -9
  45. data/config/locales/admin_ui.en.yml +3 -1
  46. data/config/locales/admin_ui.es.yml +2 -0
  47. data/config/locales/admin_ui.et.yml +3 -1
  48. data/config/locales/admin_ui.fr.yml +2 -0
  49. data/config/locales/admin_ui.it.yml +2 -0
  50. data/config/locales/admin_ui.ja.yml +2 -0
  51. data/config/locales/admin_ui.nb.yml +2 -0
  52. data/config/locales/admin_ui.nl.yml +2 -0
  53. data/config/locales/admin_ui.pl.yml +2 -0
  54. data/config/locales/admin_ui.pt-BR.yml +3 -1
  55. data/config/locales/admin_ui.ru.yml +2 -0
  56. data/config/locales/admin_ui.zh-CN.yml +2 -0
  57. data/config/locales/carrierwave.bg.yml +4 -0
  58. data/config/locales/carrierwave.cs.yml +4 -0
  59. data/config/locales/default.bg.yml +231 -0
  60. data/config/locales/default.cs.yml +249 -0
  61. data/config/locales/default.de.yml +24 -16
  62. data/config/locales/default.en.yml +4 -0
  63. data/config/locales/default.es.yml +1 -1
  64. data/config/locales/default.et.yml +1 -1
  65. data/config/locales/default.fr.yml +1 -1
  66. data/config/locales/default.it.yml +1 -1
  67. data/config/locales/default.ja.yml +4 -0
  68. data/config/locales/default.nb.yml +1 -1
  69. data/config/locales/default.nl.yml +1 -1
  70. data/config/locales/default.pl.yml +1 -1
  71. data/config/locales/default.pt-BR.yml +1 -1
  72. data/config/locales/default.ru.yml +1 -1
  73. data/config/locales/default.zh-CN.yml +1 -1
  74. data/config/locales/devise.bg.yml +64 -0
  75. data/config/locales/devise.cs.yml +64 -0
  76. data/config/locales/flash.bg.yml +115 -0
  77. data/config/locales/flash.cs.yml +115 -0
  78. data/config/locales/formtastic.bg.yml +113 -0
  79. data/config/locales/formtastic.cs.yml +125 -0
  80. data/config/locales/formtastic.de.yml +9 -0
  81. data/features/api/content_entries.feature +2 -0
  82. data/features/api/memberships.feature +26 -0
  83. data/features/backoffice/content_types/many_to_many.feature +3 -3
  84. data/features/backoffice/pages.feature +16 -0
  85. data/features/backoffice/regressions.feature +19 -0
  86. data/features/public/contact_form.feature +9 -0
  87. data/features/step_definitions/api_steps.rb +4 -1
  88. data/features/step_definitions/content_types_steps.rb +5 -0
  89. data/features/step_definitions/more_web_steps.rb +4 -0
  90. data/features/step_definitions/web_steps.rb +4 -0
  91. data/lib/generators/locomotive/install/templates/locomotive.rb +2 -2
  92. data/lib/locomotive.rb +1 -8
  93. data/lib/locomotive/action_controller.rb +1 -0
  94. data/lib/locomotive/action_controller/ssl.rb +11 -2
  95. data/lib/locomotive/action_controller/timezone.rb +13 -0
  96. data/lib/locomotive/configuration.rb +2 -2
  97. data/lib/locomotive/custom_fields.rb +1 -1
  98. data/lib/locomotive/dependencies.rb +2 -0
  99. data/lib/locomotive/engine.rb +10 -0
  100. data/lib/locomotive/httparty/webservice.rb +6 -5
  101. data/lib/locomotive/liquid/drops/base.rb +0 -2
  102. data/lib/locomotive/liquid/drops/content_entry.rb +11 -7
  103. data/lib/locomotive/liquid/drops/content_types.rb +46 -30
  104. data/lib/locomotive/liquid/drops/current_user.rb +3 -3
  105. data/lib/locomotive/liquid/drops/page.rb +15 -15
  106. data/lib/locomotive/liquid/drops/proxy_collection.rb +5 -1
  107. data/lib/locomotive/liquid/drops/site.rb +10 -6
  108. data/lib/locomotive/liquid/drops/uploader.rb +2 -2
  109. data/lib/locomotive/liquid/filters/date.rb +29 -3
  110. data/lib/locomotive/liquid/filters/resize.rb +3 -1
  111. data/lib/locomotive/liquid/filters/text.rb +4 -0
  112. data/lib/locomotive/liquid/tags/editable/control.rb +11 -1
  113. data/lib/locomotive/liquid/tags/link_to.rb +5 -3
  114. data/lib/locomotive/liquid/tags/nav.rb +19 -10
  115. data/lib/locomotive/liquid/tags/with_scope.rb +29 -31
  116. data/lib/locomotive/markdown.rb +23 -0
  117. data/lib/locomotive/render.rb +6 -2
  118. data/lib/locomotive/version.rb +1 -1
  119. data/lib/tasks/locomotive.rake +5 -2
  120. data/mongodb/migrate/20130511121956_generate_checksum_for_theme_assets.rb +5 -1
  121. data/mongodb/migrate/20130903145451_localize_redirect_urls_of_pages.rb +42 -0
  122. data/spec/dummy/config/initializers/locomotive.rb +2 -2
  123. data/spec/dummy/config/mongoid.yml +1 -0
  124. data/spec/lib/locomotive/httparty/webservice_spec.rb +1 -1
  125. data/spec/lib/locomotive/liquid/filters/date_spec.rb +61 -2
  126. data/spec/lib/locomotive/liquid/filters/text_spec.rb +4 -0
  127. data/spec/lib/locomotive/liquid/tags/consume_spec.rb +6 -2
  128. data/spec/lib/locomotive/liquid/tags/nav_spec.rb +1 -1
  129. data/spec/lib/locomotive/liquid/tags/with_scope_spec.rb +33 -27
  130. data/spec/lib/locomotive/render_spec.rb +2 -2
  131. data/spec/lib/locomotive/routing/site_dispatcher_spec.rb +1 -1
  132. data/spec/models/locomotive/content_entry_spec.rb +1 -1
  133. data/spec/models/locomotive/editable_control_spec.rb +9 -0
  134. data/spec/models/locomotive/extensions/page/editable_elements_spec.rb +6 -0
  135. data/spec/models/locomotive/page_spec.rb +13 -0
  136. data/spec/requests/admin_ssl_spec.rb +29 -7
  137. data/spec/support/factories.rb +6 -0
  138. data/vendor/assets/javascripts/locomotive/jquery-ui-timepicker-addon.js +2134 -0
  139. data/vendor/assets/stylesheets/select2/select2.css.scss +3 -3
  140. metadata +54 -94
@@ -2,14 +2,14 @@ module Locomotive
2
2
  module CustomFieldsHelper
3
3
 
4
4
  def options_for_custom_field_type
5
- %w(string text integer float boolean email date file tags select belongs_to has_many many_to_many).map do |type|
5
+ %w(string text integer float boolean email date date_time file tags select belongs_to has_many many_to_many).map do |type|
6
6
  [t("custom_fields.type.#{type}"), type]
7
7
  end
8
8
  end
9
9
 
10
10
  def options_for_label_field(content_type)
11
11
  content_type.ordered_entries_custom_fields.find_all do |field|
12
- %w(string email date).include?(field.type)
12
+ %w(file string email date date_time).include?(field.type)
13
13
  end.map do |field|
14
14
  [field.label, field._id]
15
15
  end
@@ -29,6 +29,13 @@ module Locomotive
29
29
  any_of({ _id: id_or_permalink }, { _slug: id_or_permalink }).first
30
30
  end
31
31
 
32
+ def safe_create(attributes = {})
33
+ build.tap do |entry|
34
+ entry.from_presenter(attributes)
35
+ entry.save
36
+ end
37
+ end
38
+
32
39
  end
33
40
 
34
41
  ## named scopes ##
@@ -82,6 +82,7 @@ module Locomotive
82
82
 
83
83
  self.page.collection.find(self._selector).update(operations, multi: true)
84
84
  end
85
+ true
85
86
  end
86
87
 
87
88
  end
@@ -56,7 +56,10 @@ module Locomotive
56
56
  self.default_content = true
57
57
 
58
58
  self.content_will_change!
59
- self.attributes['content'][locale] = el.content
59
+
60
+ if self.attributes['content']
61
+ self.attributes['content'][locale] = el.content
62
+ end
60
63
  end
61
64
  end
62
65
 
@@ -82,6 +82,11 @@ module Locomotive
82
82
  elsif existing_el.from_parent? # it inherits from a parent page
83
83
  existing_el.disabled = false
84
84
 
85
+ # same type ? if not, convert it
86
+ if existing_el._type != el._type
87
+ existing_el = self.change_element_type(existing_el, el.class)
88
+ end
89
+
85
90
  # make sure the default content gets updated too
86
91
  existing_el.set_default_content_from(el)
87
92
 
@@ -91,6 +96,22 @@ module Locomotive
91
96
  end
92
97
  end
93
98
 
99
+ def change_element_type(element, klass)
100
+ # build the new element
101
+ self.editable_elements.build({}, klass).tap do |new_element|
102
+ # copy the most important mongoid internal attributes
103
+ %w{_id _index new_record}.each do |attr|
104
+ new_element.send(:"#{attr}=", element.send(attr.to_sym))
105
+ end
106
+
107
+ # copy the main attributes from the previous version
108
+ new_element.attributes = element.attributes.reject { |attr| !%w(slug block from_parent).include?(attr) }
109
+
110
+ # remove the old one
111
+ self.editable_elements.delete_one(element)
112
+ end
113
+ end
114
+
94
115
  def remove_disabled_editable_elements
95
116
  # get only those which are fully disabled, meaning in ALL the locales
96
117
  ids = self.editable_elements.find_all { |el| el.disabled_in_all_translations? }.map(&:_id)
@@ -19,7 +19,7 @@ module Locomotive
19
19
  ## callbacks ##
20
20
  before_validation :get_templatized_from_parent
21
21
  before_validation :ensure_target_klass_name_security
22
- after_validation :set_slug_if_templatized
22
+ before_validation :set_slug_if_templatized
23
23
  after_save :propagate_templatized
24
24
 
25
25
  ## scopes ##
@@ -35,7 +35,7 @@ module Locomotive
35
35
  #
36
36
  def content_type
37
37
  if self.target_klass_name =~ /^Locomotive::ContentEntry([a-z0-9]+)$/
38
- @content_type ||= self.site.content_types.find($1)
38
+ @content_type ||= self.site.content_types.find($1) rescue nil
39
39
  else
40
40
  nil
41
41
  end
@@ -28,6 +28,11 @@ module Locomotive
28
28
 
29
29
  module PatchedTreeMethods
30
30
 
31
+ def ancestors
32
+ # https://github.com/benhutton/mongoid-tree/commit/acb6eb0440dc003cd8536cb8cc6ff4b16c9c9402
33
+ super.order_by(:depth.asc)
34
+ end
35
+
31
36
  private
32
37
 
33
38
  def assign_default_position
@@ -8,27 +8,24 @@ module Locomotive
8
8
  included do
9
9
 
10
10
  ## fields ##
11
- field :timezone_name, type: ::String, default: "UTC"
12
-
11
+ field :timezone_name, type: ::String, default: 'UTC'
12
+
13
13
  # ## validations ##
14
14
  validate :wrong_timezone_name
15
- #
16
- # ## callbacks ##
17
- # after_validation :add_default_locale
18
- # before_update :verify_localized_default_pages_integrity
19
15
  end
20
-
16
+
21
17
  def timezone
22
18
  @timezone ||= ActiveSupport::TimeZone.new(self.timezone_name)
23
- end
24
-
19
+ end
20
+
25
21
  protected
22
+
26
23
  def wrong_timezone_name
27
24
  unless ActiveSupport::TimeZone.new(self.timezone_name)
28
25
  self.errors.add :timezone, I18n.t(:wrong_timezone_name, scope: [:errors, :messages, :site])
29
26
  end
30
27
  end
31
-
28
+
32
29
  end
33
30
  end
34
31
  end
@@ -128,7 +128,7 @@ module Locomotive
128
128
  self.folder = ActiveSupport::Inflector.transliterate(self.folder).gsub(/(\s)+/, '_').gsub(/^\//, '').gsub(/\/$/, '')
129
129
 
130
130
  # folder should begin by a root folder
131
- if (self.folder =~ /^(stylesheets|javascripts|images|media|fonts|others)($|\/)+/).nil?
131
+ if (self.folder =~ /^(stylesheets|javascripts|images|media|fonts|pdfs|others)($|\/)+/).nil?
132
132
  self.folder = File.join(self.content_type.to_s.pluralize, self.folder)
133
133
  end
134
134
  end
@@ -144,7 +144,7 @@ module Locomotive
144
144
  def escape_shortcut_urls(text)
145
145
  return if text.blank?
146
146
 
147
- text.gsub(/[("'](\/(stylesheets|javascripts|images|media|fonts|others)\/(([^;.]+)\/)*([a-zA-Z_\-0-9]+)\.[a-z]{2,3})(\?[0-9]+)?[)"']/) do |path|
147
+ text.gsub(/[("'](\/(stylesheets|javascripts|images|media|fonts|pdfs|others)\/(([^;.]+)\/)*([a-zA-Z_\-0-9]+)\.[a-z]{2,4})(\?[0-9]+)?[)"']/) do |path|
148
148
 
149
149
  sanitized_path = path.gsub(/[("')]/, '').gsub(/^\//, '').gsub(/\?[0-9]+$/, '')
150
150
 
@@ -6,7 +6,8 @@ module Locomotive
6
6
  property :role
7
7
  properties :role_name, :can_update, :grant_admin, only_getter: true
8
8
  property :account_id
9
- properties :name, :email, only_getter: true
9
+ property :name, only_getter: true
10
+ property :email
10
11
 
11
12
  ## other getters / setters ##
12
13
 
@@ -4,7 +4,8 @@ module Locomotive
4
4
  ## properties ##
5
5
 
6
6
  property :name
7
- properties :locales, type: Array
7
+ properties :locales, type: Array
8
+ property :timezone
8
9
 
9
10
  with_options if: Proc.new { Locomotive.config.multi_sites_or_manage_domains? } do |presenter|
10
11
  presenter.property :subdomain
@@ -25,6 +26,14 @@ module Locomotive
25
26
  Locomotive.config.domain
26
27
  end
27
28
 
29
+ def timezone
30
+ self.__source.timezone_name
31
+ end
32
+
33
+ def timezone=(timezone)
34
+ self.__source.timezone_name = timezone
35
+ end
36
+
28
37
  def memberships
29
38
  self.__source.memberships.map { |membership| membership.as_json(self.__options) }
30
39
  end
@@ -24,5 +24,12 @@ module Locomotive
24
24
  uploader
25
25
  end
26
26
 
27
+ def self.content_types
28
+ # pdf is not considered as a custom content type for theme assets.
29
+ list = super.clone
30
+ list.delete(:pdf)
31
+ list
32
+ end
33
+
27
34
  end
28
35
  end
@@ -0,0 +1,5 @@
1
+ = f.input :"formatted_#{name}",
2
+ label: field.label,
3
+ hint: field.hint,
4
+ wrapper_html: { class: 'date-time' },
5
+ input_html: { maxlength: 10 }
@@ -1,4 +1,4 @@
1
- %p= t('.title', name: @account.name, domain: @domain, date: I18n.l(Time.now), locale: @account.locale).html_safe
1
+ %p= t('.title', name: @account.name, domain: @domain, date: I18n.l(Time.zone.now), locale: @account.locale).html_safe
2
2
 
3
3
  %p
4
4
  %b= t('.type', type: @type.name, locale: @account.locale)
@@ -3,7 +3,7 @@
3
3
 
4
4
  %li{ id: "item-#{page.id}", class: "page #{css_for_page(page)}" }
5
5
 
6
- - children = can?(:manage, page) ? page.children : page.children.find_all { |p| !p.templatized? }
6
+ - children = page.children
7
7
 
8
8
  - with_children = !children.empty?
9
9
 
@@ -39,4 +39,4 @@
39
39
  - if with_children
40
40
  %ul{ id: "folder-#{page._id}", class: "page folder depth-#{(page.depth || 0) + 1}", :'data-url' => sort_page_url(page), style: "display: #{cookies["folder-#{page._id}"] || 'block'}" }
41
41
 
42
- = render children
42
+ = render children
@@ -0,0 +1,349 @@
1
+ en:
2
+ locomotive:
3
+ buttons:
4
+ login: Вход
5
+ send_password: Изпрати
6
+ change_password: Поднови
7
+ new_item: "+ добави"
8
+ switch_to_site: "Премини към сайт"
9
+ delete: "Изтрии"
10
+ close: "Затвори"
11
+
12
+ locales:
13
+ en: Английски
14
+ de: Немски
15
+ fr: Френски
16
+ pl: Полски
17
+ pt-BR: "Бразилски Португалски"
18
+ it: Италиански
19
+ nl: Холандски
20
+ nb: Норвежки
21
+ es: Испански
22
+ ru: Руски
23
+ et: Естонски
24
+ ja: Японски
25
+ zh-CN: Китайски
26
+ cs: Чешки
27
+ bg: Български
28
+
29
+ messages:
30
+ confirm: Сигурен ли си ?
31
+ sending_form: Вашата форма се предава
32
+
33
+ shared:
34
+ header:
35
+ welcome: Добре дошъл, %{name}
36
+ see: Виж сайта
37
+ switch: Премини към друг сайт
38
+ help: Помощ
39
+ logout: Изход
40
+ menu:
41
+ contents: Съдържание
42
+ assets: Asset-и
43
+ settings: Настройки
44
+ pages: Страници
45
+ snippets: Откъси
46
+ account: Моят профил
47
+ site: Сайт
48
+ theme_assets: Файлове за теми
49
+ translations: Преводи
50
+ form:
51
+ change_file: промени
52
+ delete_file: изтрий
53
+ cancel: отмени
54
+ form_actions:
55
+ back: Назад без запазване
56
+ create: Създай
57
+ update: Запази
58
+ send: Изпрати
59
+ disable_with: Изчакайте...
60
+ list:
61
+ untranslated: непреведено
62
+ footer:
63
+ who_is_behind: "LocomotiveCMS е разработен от %{development} и проектиран от <a href=\"http://www.sachagreif.com\">Sacha Greif</a> &mdash; <small>version</small> %{version}"
64
+
65
+ errors:
66
+ "500":
67
+ title: Грешка в приложението
68
+ notice: "Съжаляваме, но нещо се обърка"
69
+ link: "&rarr; Назад към приложението"
70
+ "404":
71
+ title: Страницата не е намерена
72
+ notice: "Страницата която поискахте не съществува."
73
+ link: "&rarr; Назад към приложението"
74
+
75
+ notifications:
76
+ new_content_entry:
77
+ subject: "[%{domain}][%{type}] нов запис"
78
+ title: "Здравей %{name}, осведомяваме ви че нова инстанция е създаден на %{date} за сайта <b>%{domain}</b>"
79
+ type: "Модел: %{type}"
80
+
81
+ pagination:
82
+ first: "&laquo;"
83
+ last: "&raquo;"
84
+ previous: "&lsaquo;"
85
+ next: "&rsaquo;"
86
+ truncate: "&hellip;"
87
+
88
+ sites_picker:
89
+ new: + нов сайт
90
+
91
+ api_key:
92
+ none: Моля натисни на бутона напред за да се генерира API ключ.
93
+ button: Възстанови
94
+
95
+ custom_fields:
96
+ edit:
97
+ title: Редактиране на пресонализирано поле
98
+ text_formatting:
99
+ none: Нищо
100
+ html: HTML
101
+ types:
102
+ file:
103
+ delete_file: Изтрий файл
104
+ has_many:
105
+ empty: Списъкът е празен
106
+ new_entry: + Добави нов запис
107
+ many_to_many:
108
+ empty: Списъкът е празен. Добавете запис от полето по-долу.
109
+
110
+ form:
111
+ required: Задължителен
112
+ default_label: Име на поле
113
+ select_options:
114
+ ask_name: "Въведете надписа на избора"
115
+
116
+ sessions:
117
+ new:
118
+ title: Вход
119
+ link: "Забравих паролата си"
120
+ email: "Имейл"
121
+ password: "Парола"
122
+
123
+ passwords:
124
+ new:
125
+ title: Забравена парола
126
+ link: "&rarr; Назад към страницата за вход"
127
+ email: "Вашият имейл"
128
+ edit:
129
+ title: Поднови парола
130
+ link: "&rarr; Назад към страницата за вход"
131
+ password: "Вашата нова парола"
132
+ password_confirmation: "Потвърждение на новата парола"
133
+
134
+ pages:
135
+ index:
136
+ title: Изброяване на страници
137
+ help: "Страниците са организирани в дървовидна структура. Може да нареждате както страници така и папки"
138
+ no_items: "Засега няма страници. Просто натиснете <a href=\"%{url}\">тук</a> за да създадете първата."
139
+ new: нова страница
140
+ latest_entries: Последните страници
141
+ new:
142
+ title: Нова страница
143
+ help: "Моля попълнете формата отдолу за да създадете вашата страница. Внимавайте, по подразбиране страницата не е публикувана."
144
+ page:
145
+ updated_at: обновена на
146
+ edit:
147
+ show: покажи
148
+ help: "Заглавието на страницата може да се обнови като се натисне на него. За да приложите вашите промени, натиснете на \"Запази\" бутона."
149
+ ask_for_title: "Моля въведете новото заглавие на страницата"
150
+ form:
151
+ change_file: промени
152
+ delete_file: изтрий
153
+ cancel: отмени
154
+ default_block: Подразбиране
155
+ cache_strategy:
156
+ none: Нищо
157
+ simple: Просто
158
+ hour: 1 час
159
+ day: 1 ден
160
+ week: 1 седмица
161
+ month: 1 месец
162
+ redirect_type:
163
+ permanent: "Постоянен (301)"
164
+ temporary: "Временен (302)"
165
+
166
+ snippets:
167
+ index:
168
+ title: Изброяване на откъси
169
+ help: "Откъсите са парче HTML код, който може да се намира на различни места в сайта (като футъра)."
170
+ no_items: "Няма откъси засега. Просто натиснете <a href=\"%{url}\">тук</a> за да създадете първия."
171
+ new: нов откъс
172
+ new:
173
+ title: Нов откъс
174
+ help: "Попълнете формата отдолу за да обновите вашият откъс."
175
+ edit:
176
+ title: Редактиране на откъс
177
+ help: "Добавете вашия откъс във вашите шаблони за страница със следния liquid код : <span class='code'>{% include '%{slug}' %}</span>."
178
+ snippet:
179
+ updated_at: Обновено на
180
+
181
+ sites:
182
+ new:
183
+ title: Нов сайт
184
+ help: "Попълнете формата отдолу за да създадете новия си сайт."
185
+ domains:
186
+ empty: "Няма домейни свързани към този сайт. Просто добавете вашите домейни отдолу. <b>Не забравията да обновите вашият DNS.</b>"
187
+
188
+ current_site:
189
+ edit:
190
+ new_membership: добави профил
191
+ help: "Този сайт може да бъде обновен чрез натискане върху него. За да запазите вашите промени, натиснете на \"Запази\" бутона."
192
+ ask_for_name: "Моля въведете името на новия сайт."
193
+
194
+ memberships:
195
+ roles:
196
+ admin: Администратор
197
+ designer: Дизайнер
198
+ author: Автор
199
+ new:
200
+ title: Ново членство
201
+ help: "Моля дайте имейла на профила за добавяне. Ако не съществува, ще бъдете пренасочени към формата за създаване на профил."
202
+
203
+ accounts:
204
+ new:
205
+ title: Нов профил
206
+ help: "Попълнете формата отдолу за да добавите нов профил."
207
+
208
+ my_account:
209
+ edit:
210
+ help: "Вашето име може да бъде обновено, чрез натискане върху него. За да приложите вашите промени, натиснете на \"Запази\" бутона."
211
+ new_site: нов сайт
212
+ ask_for_name: "Моля въведете вашето ново име"
213
+
214
+ theme_assets:
215
+ index:
216
+ title: Изреждане на теми
217
+ help: "Секцията за теми е място, където упралявате файловете нужни за вашето оформление, откъси и т.н.Ако ви трябва да управлявате галерия със снимки, създайте нов тип съдържание вместо това.<br/><b>Предупреждение:</b> може да не виждате всички asset-и, в зависимост от вашите права."
218
+ quick_upload: Бързо качване
219
+ new: нов файл
220
+ snippets: Откъси
221
+ css_and_js: Style и javascript
222
+ fonts: Шрифтове
223
+ images: Снимки
224
+ media: Медия
225
+ no_items: "За момента няма файлове."
226
+ asset:
227
+ updated_at: Обновено на
228
+ new:
229
+ title: Нов файл
230
+ help: "Имате избор или да качите файл или да копирате/вмъкнете stylesheet или javascript като обикновен текст."
231
+ edit:
232
+ title: "Редактиране на %{file}"
233
+ help: "Този asset е достъпен директно от следния линк: <a href='%{url}'>%{url}</a>"
234
+ help_image: "Добавете вашата снимка във вашите шаблони или откъси със следния liquid код : <span class='code'>{{ '%{path}' | theme_image_tag }}</span>.<br/>Сегашния размер на снимката: <b>%{width}px x %{height}px</b>.<br/>"
235
+ help_javascript: "Добавете вашия javascript файл във вашите шаблони или откъси със следния following код : <span class='code'>{{ '%{path}' | javascript_tag }}</span>.<br/>"
236
+ help_stylesheet: "Добавете вашия stylesheet файл във вашите шаблони или откъси със следния following код : <span class='code'>{{ '%{path}' | stylesheet_tag }}</span>.<br/>"
237
+ form:
238
+ picker_link: Вмъкни файл в кода
239
+ choose_file: Изберете файл
240
+ choose_plain_text: Изберете текст
241
+ image_picker:
242
+ title: "Вмъкни картинка за тема"
243
+ no_items: "Няма картинки за сега."
244
+ upload: "Качете картинка за тема"
245
+
246
+ translations:
247
+ untranslated: "Непреведени части: %{list}"
248
+ index:
249
+ title: Преводи
250
+ new: Нов превод
251
+ no_items: "Няма преводи за сега.Просто натиснете <a href=\"%{url}\">тук</a> за да създадете първия."
252
+ remove: Премахни %{key}
253
+ new:
254
+ title: "Нов превод"
255
+ help: "Страници/откъси могат да споделят един шаблон за всички части, с изключение на някой надписи, които може да се преведе с <b>translate</b> liquid тага."
256
+ edit:
257
+ title: "Редактиране на %{key}"
258
+ help: "Ключа за превод може да се използва със следния liquid код : <span class='code'>{{ '%{key}' | translate }}</span>."
259
+
260
+ content_assets:
261
+ picker:
262
+ title: "Вмъкни медия"
263
+ no_items: "Няма медия за сега."
264
+ upload: "Качете медия"
265
+
266
+ content_types:
267
+ index:
268
+ new: нов модел
269
+ edit: редактиране нa модел
270
+ new:
271
+ title: Нов модел
272
+ help: "Създайте ваш собствен модел(Проекти, Хора и т.н.). Вашият модел трябва да има поне едно поле. Първото поле на обектите създадени от този тип съдържание е задължително."
273
+ edit:
274
+ title: Редактиране на модел
275
+ help: "Вашият модел, трябва да има поне едно поле. Първото поле на обектите създадени от този тип съдържание е задължително. The items created from this content type would have their first field mandatory."
276
+ show_entries: Покажи записи
277
+ new_entry: нов запис
278
+ form:
279
+ order_by:
280
+ created_at: 'По дата на създаване'
281
+ updated_at: 'По дата на обновяване'
282
+ position_in_list: Ръчно
283
+ order_direction:
284
+ asc: Възходящ
285
+ desc: Низходящ
286
+
287
+ content_entries:
288
+ index:
289
+ title: 'Изброяване на "%{type}"'
290
+ edit: редактиране на модел
291
+ destroy: премахни модел
292
+ download: свали записи
293
+ new: нов запис
294
+ category_noname: "Няма име"
295
+ latest_entries: "Последни записи"
296
+ updated_at: "Обновено на"
297
+ list:
298
+ no_items: "Няма записи за сега. Просто натиснете <a href=\"%{url}\">тук</a> за да създадете първия."
299
+ new:
300
+ title: '%{type} &mdash; нов запис'
301
+ edit:
302
+ title: '%{type} &mdash; редактиране на запис'
303
+ form:
304
+ edit_select_options: редактиране на опциите
305
+ has_many:
306
+ new_entry: нов запис
307
+
308
+ code_editing:
309
+ image_picker: Добави картинка в кода
310
+ copy_template: Копирай шаблона от главния език
311
+
312
+ cross_domain_sessions:
313
+ new:
314
+ title: Между-домейнно разпознаване
315
+ notice: Ще бъдете пренасочени към сайта след няколко секунди.
316
+
317
+ installation:
318
+ common:
319
+ title: Пъравата Locomotive Инсталация
320
+ next: Следващ
321
+ step_1:
322
+ title: "Стъпка 1/2 &mdash; Създай профил"
323
+ name: Име на профила
324
+ email: Имейл
325
+ password: Парола
326
+ password_confirmation: Потвърждаване на паролата
327
+ done: "Вие вече сте добавили профила:<br/><strong>%{name}</strong>, <em>%{email}</em>"
328
+ next: Създай профил
329
+ step_2:
330
+ title: "Стъпка 2/2 &mdash; Създайте първия си сайт"
331
+ explanations: "Почти сте готови. Моля задайте име на вашият първи сайт и изберете език по подразбиране."
332
+ default_site_locale: Език на сайта
333
+ default_site_locales_hints: Сега можете да добавите още езици от панела Настройки.
334
+ next: Създай сайт
335
+
336
+ public:
337
+ pages:
338
+ show_toolbar:
339
+ statuses:
340
+ loading: "Зарежда...."
341
+ disabled: "Вградения редактор е изключен"
342
+ labels:
343
+ save_changes: "Запази промените: "
344
+ editing_mode: "Режим на редактиране: "
345
+ lang: "Език: "
346
+ buttons:
347
+ back: Назад към бек-офиса
348
+ confirm: Потвърди
349
+ cancel: Отмени