olelo 0.9.9 → 0.9.10
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.
- data/Rakefile +41 -5
- data/config.ru +5 -3
- data/lib/olelo.rb +1 -0
- data/lib/olelo/application.rb +7 -6
- data/lib/olelo/helper.rb +9 -9
- data/lib/olelo/initializer.rb +3 -2
- data/lib/olelo/locale.rb +1 -3
- data/lib/olelo/locale.yml +5 -61
- data/lib/olelo/menu.rb +13 -13
- data/lib/olelo/middleware/static_cache.rb +20 -0
- data/lib/olelo/page.rb +1 -1
- data/lib/olelo/plugin.rb +28 -24
- data/lib/olelo/version.rb +1 -1
- data/lib/olelo/views/layout.slim +0 -1
- data/olelo.gemspec +7 -6
- data/plugins/aspects/documentbrowser.rb +3 -3
- data/plugins/aspects/download.rb +3 -3
- data/plugins/aspects/feed.rb +100 -0
- data/plugins/aspects/gallery/main.rb +1 -1
- data/plugins/aspects/highlight.rb +1 -1
- data/plugins/aspects/image.rb +4 -4
- data/plugins/aspects/imageinfo.rb +9 -3
- data/plugins/aspects/locale.yml +20 -0
- data/plugins/aspects/main.rb +25 -13
- data/plugins/aspects/pageinfo.rb +9 -3
- data/plugins/aspects/source.rb +1 -1
- data/plugins/aspects/subpages.rb +10 -6
- data/plugins/aspects/text.rb +1 -1
- data/plugins/authentication/locale.yml +16 -0
- data/plugins/blog/locale.yml +1 -1
- data/plugins/blog/main.rb +1 -1
- data/plugins/editor/preview.rb +1 -1
- data/plugins/editor/recaptcha.rb +1 -1
- data/plugins/filters/editsection.rb +1 -1
- data/plugins/filters/locale.yml +1 -1
- data/plugins/filters/toc.rb +1 -1
- data/plugins/history/locale.yml +1 -1
- data/plugins/history/main.rb +18 -14
- data/plugins/login/persistent.rb +8 -6
- data/plugins/misc/variables.rb +16 -5
- data/plugins/misc/webdav.rb +21 -19
- data/plugins/repositories/git_grep.rb +3 -2
- data/plugins/security/acl.rb +1 -1
- data/plugins/security/private_wiki.rb +3 -2
- data/plugins/utils/assets.rb +13 -18
- data/plugins/utils/cache.rb +18 -16
- data/static/script.js +1 -1
- data/static/script/14-olelo.tabwidget.js +2 -0
- data/static/themes/atlantis/menu.scss +3 -0
- data/static/themes/atlantis/style.css +1 -1
- data/test/request_test.rb +0 -1
- metadata +65 -53
- data/lib/rack/static_cache.rb +0 -93
- data/plugins/aspects/changelog.rb +0 -46
- data/plugins/misc/fragment_cache.rb +0 -31
data/Rakefile
CHANGED
@@ -101,20 +101,21 @@ namespace :locale do
|
|
101
101
|
task :check do
|
102
102
|
require File.join(File.dirname(__FILE__), 'lib/olelo/virtualfs')
|
103
103
|
require 'yaml'
|
104
|
-
|
104
|
+
require 'set'
|
105
|
+
|
106
|
+
locales = {}
|
105
107
|
Dir['**/*.rb'].each do |file|
|
106
108
|
begin
|
107
|
-
|
109
|
+
locales[file] = YAML.load(Olelo::VirtualFS::Embedded.new(file).read('locale.yml'))
|
108
110
|
rescue
|
109
111
|
end
|
110
112
|
end
|
111
113
|
Dir['**/locale.yml'].each do |file|
|
112
|
-
|
114
|
+
locales[file] = YAML.load_file(file)
|
113
115
|
end
|
114
116
|
|
115
|
-
|
117
|
+
locales.each do |file, translations|
|
116
118
|
puts "Checking #{file}"
|
117
|
-
translations = YAML.load(content)
|
118
119
|
en = translations['en']
|
119
120
|
raise 'en locale missing' unless en
|
120
121
|
en_keys = en.keys
|
@@ -130,6 +131,41 @@ namespace :locale do
|
|
130
131
|
end
|
131
132
|
end
|
132
133
|
end
|
134
|
+
|
135
|
+
locale_defined = {}
|
136
|
+
locales.each do |file,translations|
|
137
|
+
translations.each do |locale, hash|
|
138
|
+
hash.keys.each do |key|
|
139
|
+
(locale_defined[key] ||= Set.new) << file
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
locale_used = {}
|
145
|
+
Dir['**/*.rb', '**/*.slim'].each do |file|
|
146
|
+
File.read(file).scan(/:(\w+)\.t[^\w]/) do
|
147
|
+
(locale_used[$1] ||= Set.new) << file
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
locale_defined.each do |key,files|
|
152
|
+
unless locale_used[key]
|
153
|
+
puts "#{key} defined in #{files.to_a.join(', ')} is unused"
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
locale_used.each do |key, files|
|
158
|
+
unless locale_defined[key]
|
159
|
+
puts "#{key} used in #{files.to_a.join(', ')} is undefined"
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
(locale_defined.keys & locale_used.keys).sort.each do |key|
|
164
|
+
if locale_defined[key] != locale_used[key] &&
|
165
|
+
!(locale_defined[key].all? {|file| file =~ %r{^lib} } && locale_used[key].any? {|file| file =~ %r{^lib} })
|
166
|
+
puts "#{key} - defined in #{locale_defined[key].to_a.join(', ')} - used in #{locale_used[key].to_a.join(', ')}"
|
167
|
+
end
|
168
|
+
end
|
133
169
|
end
|
134
170
|
end
|
135
171
|
|
data/config.ru
CHANGED
@@ -8,7 +8,6 @@ Encoding.default_external = Encoding::UTF_8
|
|
8
8
|
|
9
9
|
require 'fileutils'
|
10
10
|
require 'rack/relative_redirect'
|
11
|
-
require 'rack/static_cache'
|
12
11
|
require 'olelo'
|
13
12
|
require 'securerandom'
|
14
13
|
|
@@ -16,10 +15,11 @@ Olelo::Config.instance['app_path'] = app_path
|
|
16
15
|
Olelo::Config.instance['config_path'] = ::File.join(app_path, 'config')
|
17
16
|
Olelo::Config.instance['initializers_path'] = ::File.join(app_path, 'config', 'initializers')
|
18
17
|
Olelo::Config.instance['plugins_path'] = ::File.join(app_path, 'plugins')
|
19
|
-
Olelo::Config.instance['themes_path'] = ::File.join(app_path, 'static', 'themes')
|
20
18
|
Olelo::Config.instance['rack.session_secret'] = SecureRandom.hex
|
21
19
|
Olelo::Config.instance.load!(::File.join(app_path, 'config', 'config.yml.default'))
|
22
20
|
|
21
|
+
puts 'WARNING: Environment variable $WIKI_CONFIG is deprecated, use $OLELO_CONFIG instead' if ENV['WIKI_CONFIG']
|
22
|
+
|
23
23
|
config_file = ENV['OLELO_CONFIG'] || ENV['WIKI_CONFIG']
|
24
24
|
unless config_file
|
25
25
|
path = ::File.join(app_path, 'config', 'config.yml')
|
@@ -81,7 +81,9 @@ if Olelo::Config['rack.deflater']
|
|
81
81
|
use Rack::Deflater
|
82
82
|
end
|
83
83
|
|
84
|
-
use
|
84
|
+
use Olelo::Middleware::StaticCache
|
85
|
+
use Rack::Static, urls: ['/static'], root: app_path
|
86
|
+
|
85
87
|
use Rack::Session::Cookie, key: 'olelo.session', secret: Olelo::Config['rack.session_secret']
|
86
88
|
|
87
89
|
#require 'rack/perftools_profiler'
|
data/lib/olelo.rb
CHANGED
data/lib/olelo/application.rb
CHANGED
@@ -85,13 +85,14 @@ module Olelo
|
|
85
85
|
end
|
86
86
|
|
87
87
|
get '/login' do
|
88
|
+
session[:olelo_goto] ||= env['HTTP_REFERER']
|
88
89
|
render :login
|
89
90
|
end
|
90
91
|
|
91
92
|
post '/login' do
|
92
93
|
on_error :login
|
93
94
|
User.current = User.authenticate(params[:user], params[:password])
|
94
|
-
redirect
|
95
|
+
redirect(session.delete(:olelo_goto) || build_path('/'))
|
95
96
|
end
|
96
97
|
|
97
98
|
post '/signup' do
|
@@ -99,12 +100,12 @@ module Olelo
|
|
99
100
|
raise 'Sign-up is disabled' if !Config['authentication.enable_signup']
|
100
101
|
User.current = User.signup(params[:user], params[:password],
|
101
102
|
params[:confirm], params[:email])
|
102
|
-
redirect build_path('/')
|
103
|
+
redirect(session.delete(:olelo_goto) || build_path('/'))
|
103
104
|
end
|
104
105
|
|
105
106
|
get '/logout' do
|
106
107
|
User.current = User.anonymous(request)
|
107
|
-
redirect build_path('/')
|
108
|
+
redirect(env['HTTP_REFERER'] || build_path('/'))
|
108
109
|
end
|
109
110
|
|
110
111
|
get '/profile' do
|
@@ -149,13 +150,13 @@ module Olelo
|
|
149
150
|
end
|
150
151
|
end
|
151
152
|
|
152
|
-
get '/edit(
|
153
|
+
get '/edit(/(:path))' do
|
153
154
|
@page = Page.find!(params[:path])
|
154
155
|
flash.info!(:info_binary.t(page: page.title, type: "#{page.mime.comment} (#{page.mime})")) unless page.editable?
|
155
156
|
render :edit
|
156
157
|
end
|
157
158
|
|
158
|
-
get '/new(
|
159
|
+
get '/new(/(:path))' do
|
159
160
|
@page = Page.new(params[:path])
|
160
161
|
flash.error! :reserved_path.t if self.class.reserved_path?(page.path)
|
161
162
|
params[:path] = !page.root? && Page.find(page.path) ? page.path + '/' : page.path
|
@@ -222,7 +223,7 @@ module Olelo
|
|
222
223
|
end
|
223
224
|
end
|
224
225
|
|
225
|
-
get '/version/:version(
|
226
|
+
get '/version/:version(/(:path))' do
|
226
227
|
@page = Page.find!(params[:path], params[:version])
|
227
228
|
cache_control etag: page.etag
|
228
229
|
show_page
|
data/lib/olelo/helper.rb
CHANGED
@@ -316,15 +316,15 @@ module Olelo
|
|
316
316
|
end
|
317
317
|
end
|
318
318
|
|
319
|
+
def build_static_path(path)
|
320
|
+
file = File.join(Config['app_path'], 'static', path)
|
321
|
+
build_path "static-#{File.mtime(file).to_i}/#{path}"
|
322
|
+
end
|
323
|
+
|
319
324
|
def head
|
320
|
-
@@
|
321
|
-
|
322
|
-
|
323
|
-
css_path = build_path "static/themes/#{Config['theme']}/style.css?#{File.mtime(file).to_i}"
|
324
|
-
js_path = build_path "static/script.js?#{File.mtime(File.join(Config['app_path'], 'static', 'script.js')).to_i}"
|
325
|
-
%{<link rel="stylesheet" href="#{escape_html css_path}" type="text/css"/>
|
326
|
-
<script src="#{escape_html js_path}" type="text/javascript"></script>}
|
327
|
-
end
|
325
|
+
@@head_links ||= %{<link rel="shortcut icon" href="#{escape_html build_static_path('favicon.png')}" type="image/png"/>
|
326
|
+
<link rel="stylesheet" href="#{escape_html build_static_path("themes/#{Config['theme']}/style.css")}" type="text/css"/>
|
327
|
+
<script src="#{escape_html build_static_path("script.js")}" type="text/javascript"></script>}
|
328
328
|
# Add base path to root page to fix links in history browsing and for wikis with base_path
|
329
329
|
base_path = if page && page.root?
|
330
330
|
url = request.base_url
|
@@ -332,7 +332,7 @@ module Olelo
|
|
332
332
|
url << '/' << 'version'/page.tree_version if !page.head?
|
333
333
|
%{<base href="#{escape_html url}/"/>}.html_safe
|
334
334
|
end
|
335
|
-
[base_path, @@
|
335
|
+
[base_path, @@head_links, *invoke_hook(:head)].join.html_safe
|
336
336
|
end
|
337
337
|
|
338
338
|
def session
|
data/lib/olelo/initializer.rb
CHANGED
@@ -37,8 +37,9 @@ module Olelo
|
|
37
37
|
def init_plugins
|
38
38
|
# Load locale provided by plugin
|
39
39
|
Plugin.after(:load) do
|
40
|
-
|
41
|
-
|
40
|
+
virtual_fs.glob('locale.yml') do |fs, name|
|
41
|
+
Locale.add(YAML.load(fs.read(name)))
|
42
|
+
end
|
42
43
|
end
|
43
44
|
|
44
45
|
# Configure plugin system
|
data/lib/olelo/locale.rb
CHANGED
@@ -33,9 +33,7 @@ module Olelo
|
|
33
33
|
# @return [String] translated string
|
34
34
|
#
|
35
35
|
def translate(key, args = {})
|
36
|
-
if
|
37
|
-
translate("#{key}_plural", args)
|
38
|
-
elsif @translations[key]
|
36
|
+
if @translations[key]
|
39
37
|
@translations[key] % args
|
40
38
|
else
|
41
39
|
args[:fallback] || "##{key}"
|
data/lib/olelo/locale.yml
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
|
1
|
+
cs:
|
2
2
|
access_denied: 'Přístup odepřen'
|
3
|
-
actions: 'Akce'
|
4
3
|
already_exists: 'Stránka %{page} již existuje'
|
5
4
|
attribute_mime: 'Mime-Type'
|
6
5
|
attribute_no_title: 'Skrýt titulek'
|
@@ -14,11 +13,10 @@ cs_CZ:
|
|
14
13
|
comment: 'Komentář'
|
15
14
|
confirm_password: 'Potvrdit heslo'
|
16
15
|
create_page: 'Vytvořit stránku %{page}'
|
17
|
-
create_redirect: 'Vytvořit přesměrování'
|
18
16
|
delete: 'Smazat'
|
19
17
|
delete_page: 'Smazat stránku %{page}'
|
20
18
|
deleted: 'Smazáno'
|
21
|
-
|
19
|
+
attribute_description: 'Popis'
|
22
20
|
destination: 'Cíl'
|
23
21
|
edit: 'Editovat'
|
24
22
|
edit_page: 'Editace stránky %{page}'
|
@@ -28,14 +26,11 @@ cs_CZ:
|
|
28
26
|
error_occurred: 'Ouvej! Vyskytla se chyba.'
|
29
27
|
file: 'Soubor'
|
30
28
|
groups: 'Skupiny'
|
31
|
-
head: 'Nejnovější'
|
32
|
-
history: 'Historie'
|
33
29
|
info_binary: 'Stránka %{page} je binární typ %{type} a nemůže být editována jako textový soubor.'
|
34
30
|
invalid_email: 'e-mail je neplatný'
|
35
31
|
invalid_mime_type: 'mime-type je neplatný'
|
36
32
|
invalid_name: 'Jméno je neplatné'
|
37
33
|
invalid_path: 'Neplatná cesta'
|
38
|
-
last_modified: 'Poslední modifikace'
|
39
34
|
login: 'Přihlášení'
|
40
35
|
logout: 'Odhlášení'
|
41
36
|
menu_actions_edit: 'Editovat'
|
@@ -45,12 +40,10 @@ cs_CZ:
|
|
45
40
|
menu_actions_view: 'Zobrazit'
|
46
41
|
move: 'Přesunout'
|
47
42
|
move_page: 'Přesunout stránku %{page}'
|
48
|
-
name: 'Jméno'
|
49
43
|
new_page: 'Nová stránka'
|
50
44
|
no_changes: 'Žádné změny'
|
51
45
|
not_found_text: 'Pardon, stránka, kterou hledáte, nebyla nalezena.'
|
52
46
|
old_password: 'Staré heslo'
|
53
|
-
page: 'Stránka'
|
54
47
|
page_deleted: 'Stránka %{page} smazána.'
|
55
48
|
page_edited: 'Stránka %{page} editována'#
|
56
49
|
not_found_title: '404 Not found'
|
@@ -71,23 +64,15 @@ cs_CZ:
|
|
71
64
|
settings: 'Nastavení'
|
72
65
|
signup: 'Registrovat se'
|
73
66
|
summary: 'Souhrn'
|
74
|
-
text: 'Text'
|
75
|
-
title: 'Titulek'
|
76
|
-
tree: 'Strom'
|
77
67
|
type_select: 'Vybrat hodnotu'
|
78
68
|
type_stringlist: 'Řetězce oddělené čárkou'
|
79
69
|
upload: 'Nahrát'
|
80
70
|
upload_file: 'Nahrát soubor'
|
81
71
|
user: 'Uživatel'
|
82
|
-
user_already_exists: 'Uživatel %{name} již existuje'
|
83
|
-
version: 'Verze'
|
84
72
|
version_by: 'Verze %{version} od %{author}, %{date}'
|
85
73
|
version_conflict: 'Detekován konflikt verzí'
|
86
|
-
wrong_password: 'Chybné heslo'
|
87
|
-
wrong_user_or_pw: 'Chybné jméno uživatele nebo heslo'
|
88
74
|
de:
|
89
75
|
access_denied: 'Zugriff verweigert'
|
90
|
-
actions: 'Aktionen'
|
91
76
|
already_exists: '%{page} existiert bereits'
|
92
77
|
attribute_mime: 'Mime-Typ'
|
93
78
|
attribute_no_title: 'Titel deaktivieren'
|
@@ -101,11 +86,10 @@ de:
|
|
101
86
|
comment: 'Kommentar'
|
102
87
|
confirm_password: 'Bestätige Passwort'
|
103
88
|
create_page: 'Neue %{page}'
|
104
|
-
create_redirect: 'Weiterleitung'
|
105
89
|
delete: 'Löschen'
|
106
90
|
delete_page: 'Lösche %{page}'
|
107
91
|
deleted: 'Gelöscht'
|
108
|
-
|
92
|
+
attribute_description: 'Beschreibung'
|
109
93
|
destination: 'Ziel'
|
110
94
|
edit: 'Bearbeiten'
|
111
95
|
edit_page: 'Bearbeite %{page}'
|
@@ -115,14 +99,11 @@ de:
|
|
115
99
|
error_occurred: 'Hoppla! Es ist ein Fehler aufgetreten.'
|
116
100
|
file: 'Datei'
|
117
101
|
groups: 'Gruppen'
|
118
|
-
head: 'Kopf'
|
119
|
-
history: 'Historie'
|
120
102
|
info_binary: '%{page} ist eine Datei mit dem Typ %{type} und kann nicht wie eine Textdatei bearbeitet werden.'
|
121
103
|
invalid_email: 'E-Mail ist ungültig'
|
122
104
|
invalid_mime_type: 'Mime-Typ ist ungültig'
|
123
105
|
invalid_name: 'Name ist ungültig'
|
124
106
|
invalid_path: 'Ungültiger Pfad'
|
125
|
-
last_modified: 'Letzte Änderung'
|
126
107
|
login: 'Anmelden'
|
127
108
|
logout: 'Abmelden'
|
128
109
|
menu_actions_edit: 'Bearbeiten'
|
@@ -132,13 +113,11 @@ de:
|
|
132
113
|
menu_actions_view: 'Ansicht'
|
133
114
|
move: 'Verschieben'
|
134
115
|
move_page: 'Verschiebe %{page}'
|
135
|
-
name: 'Name'
|
136
116
|
new_page: 'Neue Seite'
|
137
117
|
no_changes: 'Keine Änderungen'
|
138
118
|
not_found_text: 'Die Seite wurde leider nicht gefunden.'
|
139
119
|
not_found_title: '404 Nicht gefunden'
|
140
120
|
old_password: 'Altes Passwort'
|
141
|
-
page: 'Seite'
|
142
121
|
page_deleted: '%{page} gelöscht.'
|
143
122
|
page_edited: '%{page} bearbeitet'
|
144
123
|
page_moved: '%{page} verschoben nach %{destination}.'
|
@@ -158,23 +137,15 @@ de:
|
|
158
137
|
settings: 'Einstellungen'
|
159
138
|
signup: 'Konto anlegen'
|
160
139
|
summary: 'Zusammenfassung'
|
161
|
-
text: 'Text'
|
162
|
-
title: 'Titel'
|
163
|
-
tree: 'Baum'
|
164
140
|
type_select: 'Wert auswählen'
|
165
141
|
type_stringlist: 'Durch Komma getrennte Strings'
|
166
142
|
upload: 'Hochladen'
|
167
143
|
upload_file: 'Datei hochladen'
|
168
144
|
user: 'Benutzer'
|
169
|
-
user_already_exists: 'Benutzer %{name} existiert bereits'
|
170
|
-
version: 'Version'
|
171
145
|
version_by: 'Version %{version} von %{author}, %{date}'
|
172
146
|
version_conflict: 'Versionskonflikt aufgetreten'
|
173
|
-
wrong_password: 'Falsches Passwort'
|
174
|
-
wrong_user_or_pw: 'Falscher Benutzername oder falsches Passwort'
|
175
147
|
en:
|
176
148
|
access_denied: 'Access denied'
|
177
|
-
actions: 'Actions'
|
178
149
|
already_exists: '%{page} exists already'
|
179
150
|
attribute_mime: 'Mime-Type'
|
180
151
|
attribute_no_title: 'Disable title'
|
@@ -188,11 +159,10 @@ en:
|
|
188
159
|
comment: 'Comment'
|
189
160
|
confirm_password: 'Confirm password'
|
190
161
|
create_page: 'Create %{page}'
|
191
|
-
create_redirect: 'Create redirect'
|
192
162
|
delete: 'Delete'
|
193
163
|
delete_page: 'Delete %{page}'
|
194
164
|
deleted: 'Deleted'
|
195
|
-
|
165
|
+
attribute_description: 'Description'
|
196
166
|
destination: 'Destination'
|
197
167
|
edit: 'Edit'
|
198
168
|
edit_page: 'Editing %{page}'
|
@@ -202,26 +172,21 @@ en:
|
|
202
172
|
error_occurred: 'Oh snap! An error occurred.'
|
203
173
|
file: 'File'
|
204
174
|
groups: 'Groups'
|
205
|
-
head: 'Head'
|
206
|
-
history: 'History'
|
207
175
|
info_binary: '%{page} is a binary %{type} and cannot be edited like a text file.'
|
208
176
|
invalid_email: 'E-Mail is invalid'
|
209
177
|
invalid_mime_type: 'Invalid mime type'
|
210
178
|
invalid_name: 'Name is invalid'
|
211
179
|
invalid_path: 'Invalid path'
|
212
|
-
last_modified: 'Last modified'
|
213
180
|
login: 'Login'
|
214
181
|
logout: 'Logout'
|
215
182
|
menu_actions_edit_new: 'New Page'
|
216
183
|
move: 'Move'
|
217
184
|
move_page: 'Move %{page}'
|
218
|
-
name: 'Name'
|
219
185
|
new_page: 'New Page'
|
220
186
|
no_changes: 'No changes'
|
221
187
|
not_found_text: 'Sorry, the page you were looking for was not found.'
|
222
188
|
not_found_title: '404 Not found'
|
223
189
|
old_password: 'Old password'
|
224
|
-
page: 'Page'
|
225
190
|
page_deleted: '%{page} deleted.'
|
226
191
|
page_edited: '%{page} edited'
|
227
192
|
page_moved: '%{page} moved to %{destination}.'
|
@@ -241,23 +206,15 @@ en:
|
|
241
206
|
settings: 'Settings'
|
242
207
|
signup: 'Sign up'
|
243
208
|
summary: 'Summary'
|
244
|
-
text: 'Text'
|
245
|
-
title: 'Title'
|
246
|
-
tree: 'Tree'
|
247
209
|
type_select: 'Select value'
|
248
210
|
type_stringlist: 'Comma-separated strings'
|
249
211
|
upload: 'Upload'
|
250
212
|
upload_file: 'Upload file'
|
251
213
|
user: 'User'
|
252
|
-
user_already_exists: 'User %{name} already exists'
|
253
|
-
version: 'Version'
|
254
214
|
version_by: 'Version %{version} by %{author}, %{date}'
|
255
215
|
version_conflict: 'Version conflict detected'
|
256
|
-
wrong_password: 'Wrong password'
|
257
|
-
wrong_user_or_pw: 'Wrong username or password'
|
258
216
|
fr:
|
259
217
|
access_denied: "Accès refusé"
|
260
|
-
actions: "Actions"
|
261
218
|
already_exists: "%{page} existe déjà"
|
262
219
|
attribute_mime: "Type MIME"
|
263
220
|
attribute_no_title: "Désactiver le titre"
|
@@ -271,11 +228,10 @@ fr:
|
|
271
228
|
comment: "Commentaire"
|
272
229
|
confirm_password: "Confirmer le mot de passe"
|
273
230
|
create_page: "Créer %{page}"
|
274
|
-
create_redirect: "Créer une redirection"
|
275
231
|
delete: "Effacer"
|
276
232
|
delete_page: "Effacer %{page}"
|
277
233
|
deleted: "Supprimé"
|
278
|
-
|
234
|
+
attribute_description: "Description"
|
279
235
|
destination: "Destination"
|
280
236
|
edit: "Éditer"
|
281
237
|
edit_page: "Modifier %{page}"
|
@@ -285,26 +241,21 @@ fr:
|
|
285
241
|
error_occurred: "Oops ! Une erreur est survenue."
|
286
242
|
file: "Fichier"
|
287
243
|
groups: "Groupes"
|
288
|
-
head: "Tête"
|
289
|
-
history: "Historique"
|
290
244
|
info_binary: "%{page} est un binaire %{type} et ne peut pas être édité comme un fichier texte."
|
291
245
|
invalid_email: "Courriel invalide"
|
292
246
|
invalid_mime_type: "Type MIME invalide"
|
293
247
|
invalid_name: "Nom invalide"
|
294
248
|
invalid_path: "Chemin invalide"
|
295
|
-
last_modified: "Dernière modification"
|
296
249
|
login: "Connexion"
|
297
250
|
logout: "Déconnexion"
|
298
251
|
menu_actions_edit_new: "Nouvelle page"
|
299
252
|
move: "Déplacer"
|
300
253
|
move_page: "Déplacer %{page}"
|
301
|
-
name: "Nom"
|
302
254
|
new_page: "Nouvelle page"
|
303
255
|
no_changes: "Aucun changement"
|
304
256
|
not_found_text: "Désolé, la page que vous recherchez n'a pas été trouvée."
|
305
257
|
not_found_title: '404 Non trouvé'
|
306
258
|
old_password: "Ancien mot de passe"
|
307
|
-
page: "Page"
|
308
259
|
page_deleted: "%{page} supprimé."
|
309
260
|
page_edited: "%{page} éditée"
|
310
261
|
page_moved: "%{page} déplacer vers %{destination}."
|
@@ -324,17 +275,10 @@ fr:
|
|
324
275
|
settings: "Paramètres"
|
325
276
|
signup: "S'enregistrer"
|
326
277
|
summary: "Sommaire"
|
327
|
-
text: "Texte"
|
328
|
-
title: "Titre"
|
329
|
-
tree: "Arbre"
|
330
278
|
type_select: "Sélectionnez une valeur"
|
331
279
|
type_stringlist: "Chaînes séparées par des virgules"
|
332
280
|
upload: "Téléverser"
|
333
281
|
upload_file: "Téléverser un fichier"
|
334
282
|
user: "Utilisateur"
|
335
|
-
user_already_exists: "L'utilisateur %{name} existe déjà"
|
336
|
-
version: "Version"
|
337
283
|
version_by: 'Version %{version} par %{author}, %{date}'
|
338
284
|
version_conflict: "Conflit de version détecté"
|
339
|
-
wrong_password: "Mot de passe incorect"
|
340
|
-
wrong_user_or_pw: "Nom d'utilisateur ou mot de passe incorect"
|