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.
Files changed (55) hide show
  1. data/Rakefile +41 -5
  2. data/config.ru +5 -3
  3. data/lib/olelo.rb +1 -0
  4. data/lib/olelo/application.rb +7 -6
  5. data/lib/olelo/helper.rb +9 -9
  6. data/lib/olelo/initializer.rb +3 -2
  7. data/lib/olelo/locale.rb +1 -3
  8. data/lib/olelo/locale.yml +5 -61
  9. data/lib/olelo/menu.rb +13 -13
  10. data/lib/olelo/middleware/static_cache.rb +20 -0
  11. data/lib/olelo/page.rb +1 -1
  12. data/lib/olelo/plugin.rb +28 -24
  13. data/lib/olelo/version.rb +1 -1
  14. data/lib/olelo/views/layout.slim +0 -1
  15. data/olelo.gemspec +7 -6
  16. data/plugins/aspects/documentbrowser.rb +3 -3
  17. data/plugins/aspects/download.rb +3 -3
  18. data/plugins/aspects/feed.rb +100 -0
  19. data/plugins/aspects/gallery/main.rb +1 -1
  20. data/plugins/aspects/highlight.rb +1 -1
  21. data/plugins/aspects/image.rb +4 -4
  22. data/plugins/aspects/imageinfo.rb +9 -3
  23. data/plugins/aspects/locale.yml +20 -0
  24. data/plugins/aspects/main.rb +25 -13
  25. data/plugins/aspects/pageinfo.rb +9 -3
  26. data/plugins/aspects/source.rb +1 -1
  27. data/plugins/aspects/subpages.rb +10 -6
  28. data/plugins/aspects/text.rb +1 -1
  29. data/plugins/authentication/locale.yml +16 -0
  30. data/plugins/blog/locale.yml +1 -1
  31. data/plugins/blog/main.rb +1 -1
  32. data/plugins/editor/preview.rb +1 -1
  33. data/plugins/editor/recaptcha.rb +1 -1
  34. data/plugins/filters/editsection.rb +1 -1
  35. data/plugins/filters/locale.yml +1 -1
  36. data/plugins/filters/toc.rb +1 -1
  37. data/plugins/history/locale.yml +1 -1
  38. data/plugins/history/main.rb +18 -14
  39. data/plugins/login/persistent.rb +8 -6
  40. data/plugins/misc/variables.rb +16 -5
  41. data/plugins/misc/webdav.rb +21 -19
  42. data/plugins/repositories/git_grep.rb +3 -2
  43. data/plugins/security/acl.rb +1 -1
  44. data/plugins/security/private_wiki.rb +3 -2
  45. data/plugins/utils/assets.rb +13 -18
  46. data/plugins/utils/cache.rb +18 -16
  47. data/static/script.js +1 -1
  48. data/static/script/14-olelo.tabwidget.js +2 -0
  49. data/static/themes/atlantis/menu.scss +3 -0
  50. data/static/themes/atlantis/style.css +1 -1
  51. data/test/request_test.rb +0 -1
  52. metadata +65 -53
  53. data/lib/rack/static_cache.rb +0 -93
  54. data/plugins/aspects/changelog.rb +0 -46
  55. 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
- files = {}
104
+ require 'set'
105
+
106
+ locales = {}
105
107
  Dir['**/*.rb'].each do |file|
106
108
  begin
107
- files[file] = Olelo::VirtualFS::Embedded.new(file).read('locale.yml')
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
- files[file] = File.read(file)
114
+ locales[file] = YAML.load_file(file)
113
115
  end
114
116
 
115
- files.each do |file, content|
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 Rack::StaticCache, urls: ['/static'], root: app_path
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
@@ -35,3 +35,4 @@ require 'olelo/version'
35
35
  require 'olelo/middleware/degrade_mime_type'
36
36
  require 'olelo/middleware/ua_header'
37
37
  require 'olelo/middleware/force_encoding'
38
+ require 'olelo/middleware/static_cache'
@@ -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 build_path(session.delete(:olelo_goto))
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(/:path)' do
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(/:path)' do
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(/:path)' do
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
- @@js_css_links ||=
321
- begin
322
- file = File.join(Config['themes_path'], Config['theme'], 'style.css')
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, @@js_css_links, *invoke_hook(:head)].join.html_safe
335
+ [base_path, @@head_links, *invoke_hook(:head)].join.html_safe
336
336
  end
337
337
 
338
338
  def session
@@ -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
- locale = virtual_fs.read('locale.yml') rescue nil
41
- Locale.add(YAML.load(locale)) if locale
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 !key.to_s.ends_with?('_plural') && args[:count] && args[:count] != 1
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
- cs_CZ:
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
- description: 'Popis'
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
- description: 'Beschreibung'
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
- description: 'Description'
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
- description: "Description"
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"