olelo 0.9.9 → 0.9.10
Sign up to get free protection for your applications and to get access to all the features.
- 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"
|