olelo 0.9.9 → 0.9.10

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