decidim-core 0.31.2 → 0.31.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/cells/decidim/content_blocks/highlighted_elements_with_cell_for_list_cell.rb +5 -1
- data/app/cells/decidim/report_button/already_reported_modal.erb +1 -1
- data/app/cells/decidim/report_button/flag_modal.erb +1 -1
- data/app/cells/decidim/report_user_button/already_reported_modal.erb +1 -1
- data/app/cells/decidim/report_user_button/flag_modal.erb +1 -1
- data/app/cells/decidim/share_text_widget/modal.erb +1 -1
- data/app/cells/decidim/upload_modal/files.erb +5 -1
- data/app/cells/decidim/upload_modal_cell.rb +10 -1
- data/app/commands/decidim/multiple_attachments_methods.rb +20 -3
- data/app/jobs/decidim/find_and_update_descendants_job.rb +8 -2
- data/app/jobs/decidim/update_search_indexes_job.rb +2 -2
- data/app/packs/src/decidim/a11y.js +29 -0
- data/app/packs/src/decidim/a11y.test.js +81 -0
- data/app/packs/src/decidim/confirm.js +8 -1
- data/app/packs/src/decidim/confirm.test.js +225 -0
- data/app/packs/src/decidim/controllers/language_change/controller.js +1 -0
- data/app/packs/src/decidim/controllers/language_change/language_change.test.js +13 -0
- data/app/packs/src/decidim/datepicker/datepicker_functions.js +26 -0
- data/app/packs/src/decidim/datepicker/generate_datepicker.js +2 -1
- data/app/packs/src/decidim/datepicker/generate_timepicker.js +3 -2
- data/app/packs/src/decidim/datepicker/test/datepicker_functions_adjust_picker_position.test.js +234 -0
- data/app/packs/src/decidim/refactor/moved/focus_guard.js +4 -4
- data/app/packs/stylesheets/decidim/_cards.scss +12 -4
- data/app/packs/stylesheets/decidim/_flash.scss +1 -1
- data/app/views/decidim/devise/invitations/edit.html.erb +3 -3
- data/config/initializers/devise.rb +6 -0
- data/config/locales/ar.yml +3 -3
- data/config/locales/bg.yml +0 -4
- data/config/locales/ca-IT.yml +7 -6
- data/config/locales/ca.yml +7 -6
- data/config/locales/cs.yml +5 -8
- data/config/locales/de.yml +4 -8
- data/config/locales/el.yml +0 -2
- data/config/locales/en.yml +5 -4
- data/config/locales/es-MX.yml +10 -9
- data/config/locales/es-PY.yml +10 -9
- data/config/locales/es.yml +12 -11
- data/config/locales/eu.yml +4 -5
- data/config/locales/fi-plain.yml +5 -4
- data/config/locales/fi.yml +6 -5
- data/config/locales/fr-CA.yml +7 -5
- data/config/locales/fr.yml +8 -7
- data/config/locales/gl.yml +0 -2
- data/config/locales/hu.yml +4 -8
- data/config/locales/id-ID.yml +0 -2
- data/config/locales/it.yml +1 -3
- data/config/locales/ja.yml +7 -8
- data/config/locales/lb.yml +0 -2
- data/config/locales/lt.yml +1 -3
- data/config/locales/lv.yml +0 -2
- data/config/locales/nl.yml +0 -2
- data/config/locales/no.yml +0 -2
- data/config/locales/pl.yml +0 -4
- data/config/locales/pt-BR.yml +4 -5
- data/config/locales/pt.yml +0 -2
- data/config/locales/ro-RO.yml +1 -5
- data/config/locales/ru.yml +0 -2
- data/config/locales/sk.yml +0 -4
- data/config/locales/sv.yml +8 -7
- data/config/locales/tr-TR.yml +17 -5
- data/config/locales/zh-CN.yml +0 -2
- data/config/locales/zh-TW.yml +1 -3
- data/lib/decidim/assets/tailwind/tailwind.config.js.erb +1 -1
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/form_builder.rb +58 -36
- data/lib/decidim/maintenance/taxonomy_importer.rb +1 -1
- data/lib/decidim/searchable.rb +4 -4
- metadata +9 -6
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/* eslint max-lines: ["error", 310] */
|
|
3
3
|
|
|
4
4
|
import icon from "src/decidim/refactor/moved/icon"
|
|
5
|
-
import { changeHourDisplay, changeMinuteDisplay, formatDate, hourDisplay, minuteDisplay, formatTime, setHour, setMinute, updateTimeValue, updateInputValue } from "src/decidim/datepicker/datepicker_functions"
|
|
5
|
+
import { changeHourDisplay, changeMinuteDisplay, formatDate, hourDisplay, minuteDisplay, formatTime, setHour, setMinute, updateTimeValue, updateInputValue, adjustPickerPosition } from "src/decidim/datepicker/datepicker_functions"
|
|
6
6
|
import { timeKeyDownListener, timeBeforeInputListener } from "src/decidim/datepicker/datepicker_listeners";
|
|
7
7
|
import { getDictionary } from "src/decidim/refactor/moved/i18n";
|
|
8
8
|
|
|
@@ -29,7 +29,6 @@ export default function generateTimePicker(input, row, formats) {
|
|
|
29
29
|
clock.setAttribute("disabled", input.attributes.disabled);
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
-
|
|
33
32
|
timeColumn.appendChild(time);
|
|
34
33
|
timeColumn.appendChild(clock);
|
|
35
34
|
|
|
@@ -279,6 +278,8 @@ export default function generateTimePicker(input, row, formats) {
|
|
|
279
278
|
event.preventDefault();
|
|
280
279
|
timePicker.style.display = "block";
|
|
281
280
|
document.addEventListener("click", timePickerDisplay);
|
|
281
|
+
adjustPickerPosition(time, timePicker, ".datepicker__time-column")
|
|
282
|
+
|
|
282
283
|
hours.value = hourDisplay(hour);
|
|
283
284
|
minutes.value = minuteDisplay(minute);
|
|
284
285
|
});
|
data/app/packs/src/decidim/datepicker/test/datepicker_functions_adjust_picker_position.test.js
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/* global jest */
|
|
2
|
+
|
|
3
|
+
import { adjustPickerPosition } from "src/decidim/datepicker/datepicker_functions";
|
|
4
|
+
|
|
5
|
+
describe("adjustDatePickerPosition", () => {
|
|
6
|
+
let input = null;
|
|
7
|
+
let parent = null;
|
|
8
|
+
let datePickerContainer = null;
|
|
9
|
+
|
|
10
|
+
let originalInnerHeight = window.innerHeight;
|
|
11
|
+
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
// Setup DOM structure
|
|
14
|
+
parent = document.createElement("div");
|
|
15
|
+
parent.className = "datepicker__date-column";
|
|
16
|
+
document.body.appendChild(parent);
|
|
17
|
+
|
|
18
|
+
input = document.createElement("input");
|
|
19
|
+
Reflect.defineProperty(input, "offsetHeight", {
|
|
20
|
+
configurable: true,
|
|
21
|
+
value: 40
|
|
22
|
+
});
|
|
23
|
+
parent.appendChild(input);
|
|
24
|
+
|
|
25
|
+
datePickerContainer = document.createElement("div");
|
|
26
|
+
datePickerContainer.className = "datepicker__container";
|
|
27
|
+
parent.appendChild(datePickerContainer);
|
|
28
|
+
|
|
29
|
+
// Mock offsetHeight for calendar
|
|
30
|
+
Reflect.defineProperty(datePickerContainer, "offsetHeight", {
|
|
31
|
+
configurable: true,
|
|
32
|
+
value: 300
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// store original viewport height
|
|
36
|
+
originalInnerHeight = window.innerHeight;
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
afterEach(() => {
|
|
40
|
+
document.body.removeChild(parent);
|
|
41
|
+
|
|
42
|
+
Reflect.defineProperty(window, "innerHeight", {
|
|
43
|
+
writable: true,
|
|
44
|
+
configurable: true,
|
|
45
|
+
value: originalInnerHeight
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
jest.restoreAllMocks();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("sets parent position to relative when static", () => {
|
|
52
|
+
parent.style.position = "static";
|
|
53
|
+
|
|
54
|
+
adjustPickerPosition(input, datePickerContainer, ".datepicker__date-column");
|
|
55
|
+
|
|
56
|
+
expect(parent.style.position).toBe("relative");
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it("does not change parent position when already positioned", () => {
|
|
60
|
+
parent.style.position = "absolute";
|
|
61
|
+
|
|
62
|
+
adjustPickerPosition(input, datePickerContainer, ".datepicker__date-column");
|
|
63
|
+
|
|
64
|
+
expect(parent.style.position).toBe("absolute");
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it("opens below when sufficient space below", () => {
|
|
68
|
+
jest.spyOn(input, "getBoundingClientRect").mockReturnValue({
|
|
69
|
+
top: 100,
|
|
70
|
+
bottom: 140
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
Reflect.defineProperty(window, "innerHeight", {
|
|
74
|
+
writable: true,
|
|
75
|
+
configurable: true,
|
|
76
|
+
value: 800
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
adjustPickerPosition(input, datePickerContainer, ".datepicker__date-column");
|
|
80
|
+
|
|
81
|
+
expect(datePickerContainer.style.top).toBe("40px");
|
|
82
|
+
expect(datePickerContainer.style.bottom).toBe("");
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it("opens above when insufficient space below", () => {
|
|
86
|
+
jest.spyOn(input, "getBoundingClientRect").mockReturnValue({
|
|
87
|
+
top: 400,
|
|
88
|
+
bottom: 440
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
Reflect.defineProperty(window, "innerHeight", {
|
|
92
|
+
writable: true,
|
|
93
|
+
configurable: true,
|
|
94
|
+
value: 500
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
adjustPickerPosition(input, datePickerContainer, ".datepicker__date-column");
|
|
98
|
+
|
|
99
|
+
expect(datePickerContainer.style.top).toBe("");
|
|
100
|
+
expect(datePickerContainer.style.bottom).toBe("40px");
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it("prefers opening below when space is equal above and below", () => {
|
|
104
|
+
jest.spyOn(input, "getBoundingClientRect").mockReturnValue({
|
|
105
|
+
top: 250,
|
|
106
|
+
bottom: 290
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
Reflect.defineProperty(window, "innerHeight", {
|
|
110
|
+
writable: true,
|
|
111
|
+
configurable: true,
|
|
112
|
+
value: 540
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
adjustPickerPosition(input, datePickerContainer, ".datepicker__date-column");
|
|
116
|
+
|
|
117
|
+
expect(datePickerContainer.style.top).toBe("40px");
|
|
118
|
+
expect(datePickerContainer.style.bottom).toBe("");
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it("always sets right position to 0px", () => {
|
|
122
|
+
jest.spyOn(input, "getBoundingClientRect").mockReturnValue({
|
|
123
|
+
top: 100,
|
|
124
|
+
bottom: 140
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
adjustPickerPosition(input, datePickerContainer, ".datepicker__date-column");
|
|
128
|
+
|
|
129
|
+
expect(datePickerContainer.style.right).toBe("0px");
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
describe("adjustTimePickerPosition", () => {
|
|
135
|
+
let input = null;
|
|
136
|
+
let parent = null;
|
|
137
|
+
let timePicker = null;
|
|
138
|
+
|
|
139
|
+
let originalInnerHeight = window.innerHeight;
|
|
140
|
+
|
|
141
|
+
beforeEach(() => {
|
|
142
|
+
parent = document.createElement("div");
|
|
143
|
+
parent.className = "datepicker__time-column";
|
|
144
|
+
document.body.appendChild(parent);
|
|
145
|
+
|
|
146
|
+
input = document.createElement("input");
|
|
147
|
+
Reflect.defineProperty(input, "offsetHeight", {
|
|
148
|
+
configurable: true,
|
|
149
|
+
value: 30
|
|
150
|
+
});
|
|
151
|
+
parent.appendChild(input);
|
|
152
|
+
|
|
153
|
+
timePicker = document.createElement("div");
|
|
154
|
+
timePicker.className = "timepicker__container";
|
|
155
|
+
parent.appendChild(timePicker);
|
|
156
|
+
|
|
157
|
+
Reflect.defineProperty(timePicker, "offsetHeight", {
|
|
158
|
+
configurable: true,
|
|
159
|
+
value: 200
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
// store original value before any test mutates it
|
|
163
|
+
originalInnerHeight = window.innerHeight;
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
afterEach(() => {
|
|
167
|
+
// restore DOM
|
|
168
|
+
document.body.removeChild(parent);
|
|
169
|
+
|
|
170
|
+
// restore window.innerHeight (fix for CodeRabbit warning)
|
|
171
|
+
Reflect.defineProperty(window, "innerHeight", {
|
|
172
|
+
writable: true,
|
|
173
|
+
configurable: true,
|
|
174
|
+
value: originalInnerHeight
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
jest.restoreAllMocks();
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it("sets parent position to relative when static", () => {
|
|
181
|
+
parent.style.position = "static";
|
|
182
|
+
|
|
183
|
+
adjustPickerPosition(input, timePicker, ".datepicker__time-column");
|
|
184
|
+
|
|
185
|
+
expect(parent.style.position).toBe("relative");
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it("opens below when there is enough space", () => {
|
|
189
|
+
jest.spyOn(input, "getBoundingClientRect").mockReturnValue({
|
|
190
|
+
top: 100,
|
|
191
|
+
bottom: 130
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
Reflect.defineProperty(window, "innerHeight", {
|
|
195
|
+
writable: true,
|
|
196
|
+
configurable: true,
|
|
197
|
+
value: 700
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
adjustPickerPosition(input, timePicker, ".datepicker__time-column");
|
|
201
|
+
|
|
202
|
+
expect(timePicker.style.top).toBe("30px");
|
|
203
|
+
expect(timePicker.style.bottom).toBe("");
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
it("opens above when there is not enough space below", () => {
|
|
207
|
+
jest.spyOn(input, "getBoundingClientRect").mockReturnValue({
|
|
208
|
+
top: 400,
|
|
209
|
+
bottom: 430
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
Reflect.defineProperty(window, "innerHeight", {
|
|
213
|
+
writable: true,
|
|
214
|
+
configurable: true,
|
|
215
|
+
value: 500
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
adjustPickerPosition(input, timePicker, ".datepicker__time-column");
|
|
219
|
+
|
|
220
|
+
expect(timePicker.style.top).toBe("");
|
|
221
|
+
expect(timePicker.style.bottom).toBe("30px");
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it("always aligns to the right", () => {
|
|
225
|
+
jest.spyOn(input, "getBoundingClientRect").mockReturnValue({
|
|
226
|
+
top: 100,
|
|
227
|
+
bottom: 130
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
adjustPickerPosition(input, timePicker, ".datepicker__time-column");
|
|
231
|
+
|
|
232
|
+
expect(timePicker.style.right).toBe("0px");
|
|
233
|
+
});
|
|
234
|
+
});
|
|
@@ -78,16 +78,16 @@ export default class FocusGuard {
|
|
|
78
78
|
|
|
79
79
|
let target = null;
|
|
80
80
|
if (guard.dataset.position === "start") {
|
|
81
|
-
// Focus at the start guard, so focus the
|
|
82
|
-
for (let ind =
|
|
81
|
+
// Focus at the start guard, so focus the last focusable element (cycle forward to end)
|
|
82
|
+
for (let ind = visibleNodes.length - 1; ind >= 0; ind -= 1) {
|
|
83
83
|
if (!this.isFocusGuard(visibleNodes[ind]) && this.isFocusable(visibleNodes[ind])) {
|
|
84
84
|
target = visibleNodes[ind];
|
|
85
85
|
break;
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
} else {
|
|
89
|
-
// Focus at the end guard, so focus the first focusable element
|
|
90
|
-
for (let ind =
|
|
89
|
+
// Focus at the end guard, so focus the first focusable element (cycle back to start)
|
|
90
|
+
for (let ind = 0; ind < visibleNodes.length; ind += 1) {
|
|
91
91
|
if (!this.isFocusGuard(visibleNodes[ind]) && this.isFocusable(visibleNodes[ind])) {
|
|
92
92
|
target = visibleNodes[ind];
|
|
93
93
|
break;
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
&__calendar {
|
|
119
|
-
@apply w-
|
|
119
|
+
@apply w-20 flex flex-col justify-start rounded overflow-hidden bg-background text-center;
|
|
120
120
|
|
|
121
121
|
/* overwrite defaults */
|
|
122
122
|
&-list__reset {
|
|
@@ -128,17 +128,25 @@
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
&-day {
|
|
131
|
-
@apply text-black text-
|
|
131
|
+
@apply text-black text-xl font-semibold;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
&-year {
|
|
135
|
-
@apply text-black text-xs;
|
|
135
|
+
@apply text-black text-xs mb-0.5;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
&-month,
|
|
139
139
|
&-day,
|
|
140
140
|
&-year {
|
|
141
|
-
@apply inline-flex items-center justify-
|
|
141
|
+
@apply inline-flex items-center justify-center empty:[&>div]:hidden;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
&-separator {
|
|
145
|
+
@apply mx-2 font-normal text-sm;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.card__list-content {
|
|
149
|
+
@apply mt-0.5;
|
|
142
150
|
}
|
|
143
151
|
}
|
|
144
152
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<h1 class="title-decorator inline-block text-left mb-12"><%= t "devise.invitations.edit.header" %></h1>
|
|
5
5
|
|
|
6
6
|
<p class="text-lg text-gray-2">
|
|
7
|
-
<%= t("devise.invitations.edit.subtitle").html_safe %>
|
|
7
|
+
<%= current_organization.users_registration_mode_disabled? ? t("devise.invitations.edit.subtitle_no_password").html_safe : t("devise.invitations.edit.subtitle").html_safe %>
|
|
8
8
|
</p>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
<%= f.text_field :nickname, help_text: t("devise.invitations.edit.nickname_help", organization: current_organization_name), required: "required", autocomplete: "nickname" %>
|
|
18
18
|
|
|
19
|
-
<%
|
|
20
|
-
<%= render partial: "decidim/account/password_fields", locals: { form: f, user: :user } %>
|
|
19
|
+
<% unless current_organization.users_registration_mode_disabled? %>
|
|
20
|
+
<%= render partial: "decidim/account/password_fields", locals: { form: f, user: resource.admin? ? :admin : :user } %>
|
|
21
21
|
<% end %>
|
|
22
22
|
</div>
|
|
23
23
|
|
|
@@ -175,6 +175,12 @@ Devise.setup do |config|
|
|
|
175
175
|
# Default: true
|
|
176
176
|
config.allow_insecure_sign_in_after_accept = true
|
|
177
177
|
|
|
178
|
+
# Require password when user accepts the invitation.
|
|
179
|
+
# Disable if you do not want to ask for or enforce setting a password while accepting,
|
|
180
|
+
# because it is set when the user is invited or will be set later.
|
|
181
|
+
# Default: true
|
|
182
|
+
config.require_password_on_accepting = false
|
|
183
|
+
|
|
178
184
|
# A period that the user is allowed to confirm their account before their
|
|
179
185
|
# token becomes invalid. For example, if set to 3.days, the user can confirm
|
|
180
186
|
# their account within 3 days after the mail was sent, but on the fourth day
|
data/config/locales/ar.yml
CHANGED
|
@@ -1123,8 +1123,6 @@ ar:
|
|
|
1123
1123
|
submit_button: ارسل دعوة
|
|
1124
1124
|
no_invitations_remaining: لا توجد دعوات متبقية
|
|
1125
1125
|
send_instructions: تم إرسال دعوة بريد إلكتروني إلى %{email}.
|
|
1126
|
-
updated: تم ضبط كلمة مرورك بنجاح. انت الآن مسجل دخولك.
|
|
1127
|
-
updated_not_active: تم ضبط كلمة مرورك بنجاح.
|
|
1128
1126
|
mailer:
|
|
1129
1127
|
confirmation_instructions:
|
|
1130
1128
|
action: تأكيد حسابي
|
|
@@ -1186,6 +1184,7 @@ ar:
|
|
|
1186
1184
|
links:
|
|
1187
1185
|
back: الى الخلف
|
|
1188
1186
|
forgot_your_password: نسيت رقمك السري؟
|
|
1187
|
+
log_in: تسجيل الدخول
|
|
1189
1188
|
log_in_with_provider: تسجيل الدخول باستخدام %{provider}
|
|
1190
1189
|
minimum_password_length:
|
|
1191
1190
|
zero: "(%{count} حرف كحد أدنى)"
|
|
@@ -1274,7 +1273,7 @@ ar:
|
|
|
1274
1273
|
description: وصف
|
|
1275
1274
|
name: اسم
|
|
1276
1275
|
service: الخدمة
|
|
1277
|
-
type:
|
|
1276
|
+
type: النوع
|
|
1278
1277
|
items:
|
|
1279
1278
|
_session_id:
|
|
1280
1279
|
description: يسمح للمواقع بتذكر المستخدم داخل الموقع عندما ينتقل بين صفحات الويب.
|
|
@@ -1324,6 +1323,7 @@ ar:
|
|
|
1324
1323
|
data_consent_settings: إعدادات ملفات تعريف الارتباط
|
|
1325
1324
|
decidim_logo: شعار Decidim
|
|
1326
1325
|
decidim_title: Decidim
|
|
1326
|
+
log_in: تسجيل الدخول
|
|
1327
1327
|
made_with_open_source: موقع تم إنشاؤه <a target="_blank" href="https://github.com/decidim/decidim">بالبرمجيات الحرة</a>.
|
|
1328
1328
|
resources: الموارد
|
|
1329
1329
|
header:
|
data/config/locales/bg.yml
CHANGED
|
@@ -1314,8 +1314,6 @@ bg:
|
|
|
1314
1314
|
submit_button: Изпрати покана
|
|
1315
1315
|
no_invitations_remaining: Няма останали покани
|
|
1316
1316
|
send_instructions: Писмо с покана беше изпратено до %{email}.
|
|
1317
|
-
updated: Вашата парола беше зададена успешно. Вече сте влезли.
|
|
1318
|
-
updated_not_active: Вашата парола беше зададена успешно.
|
|
1319
1317
|
mailer:
|
|
1320
1318
|
confirmation_instructions:
|
|
1321
1319
|
action: Потвърди профила ми
|
|
@@ -1372,8 +1370,6 @@ bg:
|
|
|
1372
1370
|
confirm_new_password: Потвърди нова парола
|
|
1373
1371
|
new_password: Нова парола
|
|
1374
1372
|
old_password_help: За да потвърдите промените във вашия акаунт, моля, въведете текущата си парола.
|
|
1375
|
-
password_help: "Минимум %{minimum_characters} символа, не трябва да са разпространени (например, 123456) и трябва да са различни от вашите име и ел. поща."
|
|
1376
|
-
password_help_admin: "Минимум %{minimum_characters} символа, не трябва да са разпространени (например, 123456) и трябва да са различни от вашите име и ел. поща."
|
|
1377
1373
|
title: Промяна на паролата
|
|
1378
1374
|
new:
|
|
1379
1375
|
forgot_your_password: Забравили сте паролата си?
|
data/config/locales/ca-IT.yml
CHANGED
|
@@ -1422,7 +1422,7 @@ ca-IT:
|
|
|
1422
1422
|
download:
|
|
1423
1423
|
components: Components
|
|
1424
1424
|
core: Nucli
|
|
1425
|
-
spaces:
|
|
1425
|
+
spaces: Espais de participació
|
|
1426
1426
|
title: Descarregar recursos
|
|
1427
1427
|
download_open_data: Descarrega tots els fitxers de dades obertes
|
|
1428
1428
|
download_resource: Descarregar "%{resource_name}" en format CSV
|
|
@@ -1550,7 +1550,7 @@ ca-IT:
|
|
|
1550
1550
|
user:
|
|
1551
1551
|
actions:
|
|
1552
1552
|
disabled_message: Missatge
|
|
1553
|
-
edit_profile:
|
|
1553
|
+
edit_profile: Editar el perfil
|
|
1554
1554
|
message: Missatge
|
|
1555
1555
|
resend_email_confirmation_instructions: Reenvia un correu electrònic amb les instruccions de confirmació
|
|
1556
1556
|
qr:
|
|
@@ -1819,6 +1819,7 @@ ca-IT:
|
|
|
1819
1819
|
nickname_help: El teu àlies a %{organization}. Només pot contenir lletres, números, '-' i '_'.
|
|
1820
1820
|
submit_button: Desa
|
|
1821
1821
|
subtitle: Si acceptes la invitació, si us plau, estableix el teu àlies i contrasenya.
|
|
1822
|
+
subtitle_no_password: Si acceptes la invitació, si us plau, estableix el teu àlies o sobrenom.
|
|
1822
1823
|
invitation_removed: S'ha eliminat la teva invitació.
|
|
1823
1824
|
invitation_token_invalid: El token de invitació proporcionat no és vàlid!
|
|
1824
1825
|
new:
|
|
@@ -1826,8 +1827,8 @@ ca-IT:
|
|
|
1826
1827
|
submit_button: Enviar una invitació
|
|
1827
1828
|
no_invitations_remaining: No queden invitacions
|
|
1828
1829
|
send_instructions: S'ha enviat una invitació via correu electrònic a %{email}.
|
|
1829
|
-
updated: La
|
|
1830
|
-
updated_not_active: La
|
|
1830
|
+
updated: La invitació s'ha acceptat correctament. S'ha iniciat la teva sessió.
|
|
1831
|
+
updated_not_active: La invitació s'ha acceptat correctament.
|
|
1831
1832
|
mailer:
|
|
1832
1833
|
confirmation_instructions:
|
|
1833
1834
|
action: Confirma el meu compte
|
|
@@ -1886,8 +1887,8 @@ ca-IT:
|
|
|
1886
1887
|
confirm_new_password: Confirmar la nova contrasenya
|
|
1887
1888
|
new_password: Nova contrasenya
|
|
1888
1889
|
old_password_help: Per tal de confirmar els canvis al teu compte, si us plau, proporciona'ns la teva contrasenya actual.
|
|
1889
|
-
password_help: "%{minimum_characters} caràcters
|
|
1890
|
-
password_help_admin: "%{minimum_characters} caràcters
|
|
1890
|
+
password_help: "La contrasenya ha de tenir com a mínim %{minimum_characters} caràcters, d'aquests, almenys 5 caràcters han de ser diferents, no han de ser massa comuns (p. ex. 123456) i ha de ser diferent del número, sobrenom, correu electrònic i del domini de la plataforma."
|
|
1891
|
+
password_help_admin: "La contrasenya ha de tenir com a mínim %{minimum_characters} caràcters, d'aquests, almenys 5 caràcters han de ser diferents, no han de ser massa comuns (p. ex. 123456) i ha de ser diferent del número, sobrenom, correu electrònic, domini de la plataforma o contrasenyes antigues."
|
|
1891
1892
|
title: Canvi de contrasenya
|
|
1892
1893
|
new:
|
|
1893
1894
|
forgot_your_password: Has oblidat la teva contrasenya?
|
data/config/locales/ca.yml
CHANGED
|
@@ -1422,7 +1422,7 @@ ca:
|
|
|
1422
1422
|
download:
|
|
1423
1423
|
components: Components
|
|
1424
1424
|
core: Nucli
|
|
1425
|
-
spaces:
|
|
1425
|
+
spaces: Espais de participació
|
|
1426
1426
|
title: Descarregar recursos
|
|
1427
1427
|
download_open_data: Descarrega tots els fitxers de dades obertes
|
|
1428
1428
|
download_resource: Descarregar "%{resource_name}" en format CSV
|
|
@@ -1550,7 +1550,7 @@ ca:
|
|
|
1550
1550
|
user:
|
|
1551
1551
|
actions:
|
|
1552
1552
|
disabled_message: Missatge
|
|
1553
|
-
edit_profile:
|
|
1553
|
+
edit_profile: Editar el perfil
|
|
1554
1554
|
message: Missatge
|
|
1555
1555
|
resend_email_confirmation_instructions: Reenvia un correu electrònic amb les instruccions de confirmació
|
|
1556
1556
|
qr:
|
|
@@ -1819,6 +1819,7 @@ ca:
|
|
|
1819
1819
|
nickname_help: El teu àlies a %{organization}. Només pot contenir lletres, números, '-' i '_'.
|
|
1820
1820
|
submit_button: Desa
|
|
1821
1821
|
subtitle: Si acceptes la invitació, si us plau, estableix el teu àlies i contrasenya.
|
|
1822
|
+
subtitle_no_password: Si acceptes la invitació, si us plau, estableix el teu àlies o sobrenom.
|
|
1822
1823
|
invitation_removed: S'ha eliminat la teva invitació.
|
|
1823
1824
|
invitation_token_invalid: El token de invitació proporcionat no és vàlid!
|
|
1824
1825
|
new:
|
|
@@ -1826,8 +1827,8 @@ ca:
|
|
|
1826
1827
|
submit_button: Enviar una invitació
|
|
1827
1828
|
no_invitations_remaining: No queden invitacions
|
|
1828
1829
|
send_instructions: S'ha enviat una invitació via correu electrònic a %{email}.
|
|
1829
|
-
updated: La
|
|
1830
|
-
updated_not_active: La
|
|
1830
|
+
updated: La invitació s'ha acceptat correctament. S'ha iniciat la teva sessió.
|
|
1831
|
+
updated_not_active: La invitació s'ha acceptat correctament.
|
|
1831
1832
|
mailer:
|
|
1832
1833
|
confirmation_instructions:
|
|
1833
1834
|
action: Confirma el meu compte
|
|
@@ -1886,8 +1887,8 @@ ca:
|
|
|
1886
1887
|
confirm_new_password: Confirmar la nova contrasenya
|
|
1887
1888
|
new_password: Nova contrasenya
|
|
1888
1889
|
old_password_help: Per tal de confirmar els canvis al teu compte, si us plau, proporciona'ns la teva contrasenya actual.
|
|
1889
|
-
password_help: "%{minimum_characters} caràcters
|
|
1890
|
-
password_help_admin: "%{minimum_characters} caràcters
|
|
1890
|
+
password_help: "La contrasenya ha de tenir com a mínim %{minimum_characters} caràcters, d'aquests, almenys 5 caràcters han de ser diferents, no han de ser massa comuns (p. ex. 123456) i ha de ser diferent del número, sobrenom, correu electrònic i del domini de la plataforma."
|
|
1891
|
+
password_help_admin: "La contrasenya ha de tenir com a mínim %{minimum_characters} caràcters, d'aquests, almenys 5 caràcters han de ser diferents, no han de ser massa comuns (p. ex. 123456) i ha de ser diferent del número, sobrenom, correu electrònic, domini de la plataforma o contrasenyes antigues."
|
|
1891
1892
|
title: Canvi de contrasenya
|
|
1892
1893
|
new:
|
|
1893
1894
|
forgot_your_password: Has oblidat la teva contrasenya?
|
data/config/locales/cs.yml
CHANGED
|
@@ -307,7 +307,7 @@ cs:
|
|
|
307
307
|
delete: "%{user_name} odstranila %{resource_name} aplikaci OAuth"
|
|
308
308
|
update: "%{user_name} aktualizovala %{resource_name} aplikaci OAuth"
|
|
309
309
|
organization:
|
|
310
|
-
update: "%{user_name}
|
|
310
|
+
update: "%{user_name} aktualizoval nastavení organizace"
|
|
311
311
|
update_external_domain: "%{user_name} aktualizoval externí domény organizace"
|
|
312
312
|
participatory_space_private_user:
|
|
313
313
|
create: "%{user_name} pozval %{resource_name} aby se stal soukromým uživatelem"
|
|
@@ -625,7 +625,7 @@ cs:
|
|
|
625
625
|
global_menu:
|
|
626
626
|
name: Globální menu
|
|
627
627
|
hero:
|
|
628
|
-
name: Obrázek hrdiny a
|
|
628
|
+
name: Obrázek hrdiny a výzva k akci
|
|
629
629
|
hero_settings_form:
|
|
630
630
|
background_image: Obrázek pozadí
|
|
631
631
|
cta_button_path: URL tlačítka Výzvy k akci
|
|
@@ -1142,7 +1142,7 @@ cs:
|
|
|
1142
1142
|
description: Odznaky jsou uznání akcí účastníků a pokrok v platformě. Jakmile začnete objevovat, účastnit se a spolupracovat v platformě, získáte různé odznaky.
|
|
1143
1143
|
level: Úroveň %{level}
|
|
1144
1144
|
reached_top: Dosáhli jste nejvyšší úrovně tohoto odznaku.
|
|
1145
|
-
title:
|
|
1145
|
+
title: Co jsou odznaky?
|
|
1146
1146
|
groups:
|
|
1147
1147
|
roles:
|
|
1148
1148
|
admin: Správce
|
|
@@ -1575,7 +1575,7 @@ cs:
|
|
|
1575
1575
|
user:
|
|
1576
1576
|
actions:
|
|
1577
1577
|
disabled_message: Zpráva
|
|
1578
|
-
edit_profile:
|
|
1578
|
+
edit_profile: Upravit profil
|
|
1579
1579
|
message: Zpráva
|
|
1580
1580
|
resend_email_confirmation_instructions: Znovu odeslat pokyny pro potvrzení e-mailu
|
|
1581
1581
|
qr:
|
|
@@ -1847,8 +1847,6 @@ cs:
|
|
|
1847
1847
|
submit_button: Odeslat pozvánku
|
|
1848
1848
|
no_invitations_remaining: Žádné zbývající pozvánky
|
|
1849
1849
|
send_instructions: Pozvánka byla odeslána na %{email}.
|
|
1850
|
-
updated: Vaše heslo bylo úspěšně nastaveno. Nyní jste přihlášeni.
|
|
1851
|
-
updated_not_active: Vaše heslo bylo úspěšně nastaveno.
|
|
1852
1850
|
mailer:
|
|
1853
1851
|
confirmation_instructions:
|
|
1854
1852
|
action: Potvrďte svůj účet
|
|
@@ -1908,8 +1906,6 @@ cs:
|
|
|
1908
1906
|
confirm_new_password: Potvrďte nové heslo
|
|
1909
1907
|
new_password: Nové heslo
|
|
1910
1908
|
old_password_help: Chcete-li potvrdit změny vašeho účtu, zadejte prosím své aktuální heslo.
|
|
1911
|
-
password_help: "minimální počet znaků je %{minimum_characters}, nesmí být příliš obvyklý (např. 123456) a musí se lišit od vašeho uživatelského jména a e-mailu."
|
|
1912
|
-
password_help_admin: "minimální počet znaků je %{minimum_characters}, nesmí být příliš časté (např. 123456), musí se lišit od vaší přezdívky a e-mailu a musí se lišit od vašich starých hesel."
|
|
1913
1909
|
title: Změna hesla
|
|
1914
1910
|
new:
|
|
1915
1911
|
forgot_your_password: Zapomněli jste heslo?
|
|
@@ -2159,6 +2155,7 @@ cs:
|
|
|
2159
2155
|
confirm_title_close_ephemeral_session: Před opuštěním této stránky…
|
|
2160
2156
|
log_in: Přihlásit
|
|
2161
2157
|
main_menu: Hlavní menu
|
|
2158
|
+
mobile_account_greeting: Dobrý den %{user_name}
|
|
2162
2159
|
user_menu: Uživatelské Menu
|
|
2163
2160
|
impersonation_warning:
|
|
2164
2161
|
close_session: Zavřít sezení
|
data/config/locales/de.yml
CHANGED
|
@@ -108,7 +108,7 @@ de:
|
|
|
108
108
|
date:
|
|
109
109
|
buttons:
|
|
110
110
|
close: Schliessen
|
|
111
|
-
select:
|
|
111
|
+
select: Auswählen
|
|
112
112
|
formats:
|
|
113
113
|
decidim_short: "%d/%m/%Y"
|
|
114
114
|
decidim_short_dashed: "%d-%m-%Y"
|
|
@@ -1523,7 +1523,7 @@ de:
|
|
|
1523
1523
|
error: Es gab ein Problem bei der Aktualisierung des Passwortes.
|
|
1524
1524
|
success: Passwort erfolgreich aktualisiert.
|
|
1525
1525
|
profile:
|
|
1526
|
-
deleted: Gelöschter
|
|
1526
|
+
deleted: Gelöschter Teilnehmer
|
|
1527
1527
|
inaccessible_message: Dieses Profil ist wegen Verletzung der Nutzungsbedingungen nicht zugänglich!
|
|
1528
1528
|
profiles:
|
|
1529
1529
|
default_officialization_text_for_users: Dieser Teilnehmer ist öffentlich verifiziert, sein/ihr Name oder seine/ihre Rolle wurde auf Übereinstimmung mit dem wirklichen Namen und der wirklichen Rolle überprüft.
|
|
@@ -1540,7 +1540,7 @@ de:
|
|
|
1540
1540
|
disabled_message: Nachricht
|
|
1541
1541
|
edit_profile: Profil bearbeiten
|
|
1542
1542
|
message: Nachricht
|
|
1543
|
-
resend_email_confirmation_instructions:
|
|
1543
|
+
resend_email_confirmation_instructions: E-Mail-Bestätigungsanweisungen erneut versenden
|
|
1544
1544
|
qr:
|
|
1545
1545
|
show:
|
|
1546
1546
|
scan: QR-Code scannen
|
|
@@ -1799,8 +1799,6 @@ de:
|
|
|
1799
1799
|
submit_button: Eine Einladung schicken
|
|
1800
1800
|
no_invitations_remaining: Keine Einladungen übrig
|
|
1801
1801
|
send_instructions: Eine Einladungs-E-Mail wurde an %{email}gesendet.
|
|
1802
|
-
updated: Ihr Passwort wurde erfolgreich vergeben. Sie sind jetzt angemeldet.
|
|
1803
|
-
updated_not_active: Ihr Passwort wurde erfolgreich vergeben.
|
|
1804
1802
|
mailer:
|
|
1805
1803
|
confirmation_instructions:
|
|
1806
1804
|
action: Konto bestätigen
|
|
@@ -1858,8 +1856,6 @@ de:
|
|
|
1858
1856
|
confirm_new_password: Bestätige neues Passwort
|
|
1859
1857
|
new_password: Neues Passwort
|
|
1860
1858
|
old_password_help: Um die Änderungen an Ihrem Konto zu bestätigen, geben Sie bitte Ihr aktuelles Passwort ein.
|
|
1861
|
-
password_help: "Das Passwort muss aus mindestens %{minimum_characters} Zeichen bestehen, darf nicht zu gewöhnlich sein (z. B. 123456) oder Ihren Kontonamen bzw. Ihre E-Mail-Adresse enthalten."
|
|
1862
|
-
password_help_admin: "Das Passwort muss aus mindestens %{minimum_characters} Zeichen bestehen, darf nicht zu gewöhnlich sein (z. B. 123456) oder Ihren Kontonamen oder Ihre E-Mail-Adresse enthalten und muss sich von Ihren alten Passwörtern unterscheiden."
|
|
1863
1859
|
title: Passwort ändern
|
|
1864
1860
|
new:
|
|
1865
1861
|
forgot_your_password: Haben Sie Ihr Passwort vergessen?
|
|
@@ -2202,7 +2198,7 @@ de:
|
|
|
2202
2198
|
buttons:
|
|
2203
2199
|
close: Schliessen
|
|
2204
2200
|
reset: Zurücksetzen
|
|
2205
|
-
select:
|
|
2201
|
+
select: Auswählen
|
|
2206
2202
|
formats:
|
|
2207
2203
|
day_of_month: "%d. %b"
|
|
2208
2204
|
day_of_week: "%a"
|
data/config/locales/el.yml
CHANGED
|
@@ -975,8 +975,6 @@ el:
|
|
|
975
975
|
submit_button: Στείλτε μια πρόσκληση
|
|
976
976
|
no_invitations_remaining: Δεν απομένουν προσκλήσεις
|
|
977
977
|
send_instructions: Στάλθηκε ένα email πρόσκλησης στη διεύθυνση %{email}.
|
|
978
|
-
updated: Ο κωδικός πρόσβασης ορίστηκε με επιτυχία. Έχετε συνδεθεί.
|
|
979
|
-
updated_not_active: Ο κωδικός πρόσβασης ορίστηκε με επιτυχία.
|
|
980
978
|
mailer:
|
|
981
979
|
confirmation_instructions:
|
|
982
980
|
action: Επιβεβαίωση του λογαριασμού μου
|