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.
- checksums.yaml +7 -0
- data/Gemfile +1 -0
- data/README.textile +2 -1
- data/app/assets/images/locomotive/icons/flags/bg.png +0 -0
- data/app/assets/images/locomotive/icons/flags/cs.png +0 -0
- data/app/assets/javascripts/locomotive/models/page.js.coffee +1 -1
- data/app/assets/javascripts/locomotive/utils/aloha_settings.js.coffee +2 -2
- data/app/assets/javascripts/locomotive/views/application_view.js.coffee +2 -2
- data/app/assets/javascripts/locomotive/views/content_assets/picker_view.js.coffee +2 -0
- data/app/assets/javascripts/locomotive/views/content_entries/_form_view.js.coffee +8 -0
- data/app/assets/javascripts/locomotive/views/editable_elements/text_view.js.coffee +2 -2
- data/app/assets/javascripts/locomotive/views/pages/edit_view.js.coffee +2 -0
- data/app/assets/javascripts/locomotive/views/shared/fields/belongs_to_view.js.coffee +2 -0
- data/app/assets/javascripts/locomotive/views/shared/form_view.js.coffee +7 -5
- data/app/assets/javascripts/tinymce/plugins/locomotive_media/editor_plugin.js +7 -3
- data/app/assets/javascripts/tinymce/plugins/locomotive_media/langs/cs.js +1 -0
- data/app/assets/stylesheets/locomotive/backoffice/datepicker.css.scss +66 -0
- data/app/assets/stylesheets/locomotive/backoffice/dialog_changes.css.scss +8 -2
- data/app/assets/stylesheets/locomotive/backoffice/formtastic_changes.css.scss +8 -0
- data/app/assets/stylesheets/locomotive/backoffice/menu/_colors.css.scss +1 -1
- data/app/controllers/locomotive/api/base_controller.rb +3 -0
- data/app/controllers/locomotive/api/content_entries_controller.rb +4 -4
- data/app/controllers/locomotive/api/tokens_controller.rb +4 -0
- data/app/controllers/locomotive/base_controller.rb +6 -3
- data/app/controllers/locomotive/public/base_controller.rb +3 -0
- data/app/controllers/locomotive/public/content_entries_controller.rb +2 -1
- data/app/helpers/locomotive/custom_fields_helper.rb +2 -2
- data/app/models/locomotive/content_type.rb +7 -0
- data/app/models/locomotive/editable_file.rb +1 -0
- data/app/models/locomotive/editable_text.rb +4 -1
- data/app/models/locomotive/extensions/page/editable_elements.rb +21 -0
- data/app/models/locomotive/extensions/page/templatized.rb +2 -2
- data/app/models/locomotive/extensions/page/tree.rb +5 -0
- data/app/models/locomotive/extensions/site/timezone.rb +7 -10
- data/app/models/locomotive/theme_asset.rb +2 -2
- data/app/presenters/locomotive/membership_presenter.rb +2 -1
- data/app/presenters/locomotive/site_presenter.rb +10 -1
- data/app/uploaders/locomotive/theme_asset_uploader.rb +7 -0
- data/app/views/locomotive/custom_fields/types/_date_time.html.haml +5 -0
- data/app/views/locomotive/notifications/new_content_entry.html.haml +1 -1
- data/app/views/locomotive/pages/_page.html.haml +2 -2
- data/config/locales/admin_ui.bg.yml +349 -0
- data/config/locales/admin_ui.cs.yml +359 -0
- data/config/locales/admin_ui.de.yml +25 -9
- data/config/locales/admin_ui.en.yml +3 -1
- data/config/locales/admin_ui.es.yml +2 -0
- data/config/locales/admin_ui.et.yml +3 -1
- data/config/locales/admin_ui.fr.yml +2 -0
- data/config/locales/admin_ui.it.yml +2 -0
- data/config/locales/admin_ui.ja.yml +2 -0
- data/config/locales/admin_ui.nb.yml +2 -0
- data/config/locales/admin_ui.nl.yml +2 -0
- data/config/locales/admin_ui.pl.yml +2 -0
- data/config/locales/admin_ui.pt-BR.yml +3 -1
- data/config/locales/admin_ui.ru.yml +2 -0
- data/config/locales/admin_ui.zh-CN.yml +2 -0
- data/config/locales/carrierwave.bg.yml +4 -0
- data/config/locales/carrierwave.cs.yml +4 -0
- data/config/locales/default.bg.yml +231 -0
- data/config/locales/default.cs.yml +249 -0
- data/config/locales/default.de.yml +24 -16
- data/config/locales/default.en.yml +4 -0
- data/config/locales/default.es.yml +1 -1
- data/config/locales/default.et.yml +1 -1
- data/config/locales/default.fr.yml +1 -1
- data/config/locales/default.it.yml +1 -1
- data/config/locales/default.ja.yml +4 -0
- data/config/locales/default.nb.yml +1 -1
- data/config/locales/default.nl.yml +1 -1
- data/config/locales/default.pl.yml +1 -1
- data/config/locales/default.pt-BR.yml +1 -1
- data/config/locales/default.ru.yml +1 -1
- data/config/locales/default.zh-CN.yml +1 -1
- data/config/locales/devise.bg.yml +64 -0
- data/config/locales/devise.cs.yml +64 -0
- data/config/locales/flash.bg.yml +115 -0
- data/config/locales/flash.cs.yml +115 -0
- data/config/locales/formtastic.bg.yml +113 -0
- data/config/locales/formtastic.cs.yml +125 -0
- data/config/locales/formtastic.de.yml +9 -0
- data/features/api/content_entries.feature +2 -0
- data/features/api/memberships.feature +26 -0
- data/features/backoffice/content_types/many_to_many.feature +3 -3
- data/features/backoffice/pages.feature +16 -0
- data/features/backoffice/regressions.feature +19 -0
- data/features/public/contact_form.feature +9 -0
- data/features/step_definitions/api_steps.rb +4 -1
- data/features/step_definitions/content_types_steps.rb +5 -0
- data/features/step_definitions/more_web_steps.rb +4 -0
- data/features/step_definitions/web_steps.rb +4 -0
- data/lib/generators/locomotive/install/templates/locomotive.rb +2 -2
- data/lib/locomotive.rb +1 -8
- data/lib/locomotive/action_controller.rb +1 -0
- data/lib/locomotive/action_controller/ssl.rb +11 -2
- data/lib/locomotive/action_controller/timezone.rb +13 -0
- data/lib/locomotive/configuration.rb +2 -2
- data/lib/locomotive/custom_fields.rb +1 -1
- data/lib/locomotive/dependencies.rb +2 -0
- data/lib/locomotive/engine.rb +10 -0
- data/lib/locomotive/httparty/webservice.rb +6 -5
- data/lib/locomotive/liquid/drops/base.rb +0 -2
- data/lib/locomotive/liquid/drops/content_entry.rb +11 -7
- data/lib/locomotive/liquid/drops/content_types.rb +46 -30
- data/lib/locomotive/liquid/drops/current_user.rb +3 -3
- data/lib/locomotive/liquid/drops/page.rb +15 -15
- data/lib/locomotive/liquid/drops/proxy_collection.rb +5 -1
- data/lib/locomotive/liquid/drops/site.rb +10 -6
- data/lib/locomotive/liquid/drops/uploader.rb +2 -2
- data/lib/locomotive/liquid/filters/date.rb +29 -3
- data/lib/locomotive/liquid/filters/resize.rb +3 -1
- data/lib/locomotive/liquid/filters/text.rb +4 -0
- data/lib/locomotive/liquid/tags/editable/control.rb +11 -1
- data/lib/locomotive/liquid/tags/link_to.rb +5 -3
- data/lib/locomotive/liquid/tags/nav.rb +19 -10
- data/lib/locomotive/liquid/tags/with_scope.rb +29 -31
- data/lib/locomotive/markdown.rb +23 -0
- data/lib/locomotive/render.rb +6 -2
- data/lib/locomotive/version.rb +1 -1
- data/lib/tasks/locomotive.rake +5 -2
- data/mongodb/migrate/20130511121956_generate_checksum_for_theme_assets.rb +5 -1
- data/mongodb/migrate/20130903145451_localize_redirect_urls_of_pages.rb +42 -0
- data/spec/dummy/config/initializers/locomotive.rb +2 -2
- data/spec/dummy/config/mongoid.yml +1 -0
- data/spec/lib/locomotive/httparty/webservice_spec.rb +1 -1
- data/spec/lib/locomotive/liquid/filters/date_spec.rb +61 -2
- data/spec/lib/locomotive/liquid/filters/text_spec.rb +4 -0
- data/spec/lib/locomotive/liquid/tags/consume_spec.rb +6 -2
- data/spec/lib/locomotive/liquid/tags/nav_spec.rb +1 -1
- data/spec/lib/locomotive/liquid/tags/with_scope_spec.rb +33 -27
- data/spec/lib/locomotive/render_spec.rb +2 -2
- data/spec/lib/locomotive/routing/site_dispatcher_spec.rb +1 -1
- data/spec/models/locomotive/content_entry_spec.rb +1 -1
- data/spec/models/locomotive/editable_control_spec.rb +9 -0
- data/spec/models/locomotive/extensions/page/editable_elements_spec.rb +6 -0
- data/spec/models/locomotive/page_spec.rb +13 -0
- data/spec/requests/admin_ssl_spec.rb +29 -7
- data/spec/support/factories.rb +6 -0
- data/vendor/assets/javascripts/locomotive/jquery-ui-timepicker-addon.js +2134 -0
- data/vendor/assets/stylesheets/select2/select2.css.scss +3 -3
- 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,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
|
-
|
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
|
@@ -8,27 +8,24 @@ module Locomotive
|
|
8
8
|
included do
|
9
9
|
|
10
10
|
## fields ##
|
11
|
-
field :timezone_name, type: ::String, default:
|
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,
|
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
|
-
|
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,
|
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
|
@@ -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 =
|
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> — <small>version</small> %{version}"
|
64
|
+
|
65
|
+
errors:
|
66
|
+
"500":
|
67
|
+
title: Грешка в приложението
|
68
|
+
notice: "Съжаляваме, но нещо се обърка"
|
69
|
+
link: "→ Назад към приложението"
|
70
|
+
"404":
|
71
|
+
title: Страницата не е намерена
|
72
|
+
notice: "Страницата която поискахте не съществува."
|
73
|
+
link: "→ Назад към приложението"
|
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: "«"
|
83
|
+
last: "»"
|
84
|
+
previous: "‹"
|
85
|
+
next: "›"
|
86
|
+
truncate: "…"
|
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: "→ Назад към страницата за вход"
|
127
|
+
email: "Вашият имейл"
|
128
|
+
edit:
|
129
|
+
title: Поднови парола
|
130
|
+
link: "→ Назад към страницата за вход"
|
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} — нов запис'
|
301
|
+
edit:
|
302
|
+
title: '%{type} — редактиране на запис'
|
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 — Създай профил"
|
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 — Създайте първия си сайт"
|
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: Отмени
|