Commit 4f934665dd9fad8d6417b2313d1e91d980ec68a7

Authored by Antonio Terceiro
1 parent 312532a1

Online documentation support

    * Documentation browser at /doc
    * Infra-structure for generating and translating the docs
    * Added a :release take task for doing th release, which already
      updates the docs.
Showing 64 changed files with 4599 additions and 2539 deletions   Show diff stats
.mailmap
1   -Antonio Terceiro <AntonioTerceiro@3f533792-8f58-4932-b0fe-aaf55b0a4547>
2   -Antonio Terceiro <terceiro@softwarelivre.org>
3   -Aurelio A. Heckert <AurelioAHeckert@3f533792-8f58-4932-b0fe-aaf55b0a4547>
4   -Daniela Feitosa <DanielaFeitosa@3f533792-8f58-4932-b0fe-aaf55b0a4547>
5   -Daniela Feitosa <danielafeitosa@colivre.coop.br>
6   -Daniela Feitosa <daniela@sede.colivre.coop.br>
7   -Daniela Feitosa <dani@lindinha.(none)>
8   -Joenio Costa <JoenioCosta@3f533792-8f58-4932-b0fe-aaf55b0a4547>
9   -Joenio Costa <joenio@perl.org.br>
10   -Grazieno Pellegrino <GrazienoPellegrino@3f533792-8f58-4932-b0fe-aaf55b0a4547>
11   -Leandro Nunes dos Santos <LeandroNunes@3f533792-8f58-4932-b0fe-aaf55b0a4547>
12   -Moises Machado <MoisesMachado@3f533792-8f58-4932-b0fe-aaf55b0a4547>
13   -Valessio S Brito <ValessioBrito@3f533792-8f58-4932-b0fe-aaf55b0a4547>
14   -Valessio S Brito <valessio@rohit.colivre.coop.br>
  1 +Antonio Terceiro <terceiro@colivre.coop.br> <AntonioTerceiro@3f533792-8f58-4932-b0fe-aaf55b0a4547>
  2 +Antonio Terceiro <terceiro@colivre.coop.br> <terceiro@softwarelivre.org>
  3 +Aurelio A. Heckert <aurelio@colivre.coop.br> <AurelioAHeckert@3f533792-8f58-4932-b0fe-aaf55b0a4547>
  4 +Daniela Soares Feitosa <danielafeitosa@colivre.coop.br> <DanielaFeitosa@3f533792-8f58-4932-b0fe-aaf55b0a4547>
  5 +Daniela Soares Feitosa <danielafeitosa@colivre.coop.br> <danielafeitosa@colivre.coop.br>
  6 +Daniela Soares Feitosa <danielafeitosa@colivre.coop.br> <daniela@sede.colivre.coop.br>
  7 +Daniela Soares Feitosa <danielafeitosa@colivre.coop.br> <dani@lindinha.(none)>
  8 +Joenio Costa <joenio@colivre.coop.br> <JoenioCosta@3f533792-8f58-4932-b0fe-aaf55b0a4547>
  9 +Joenio Costa <joenio@colivre.coop.br> <joenio@perl.org.br>
  10 +Grazieno Pellegrino <grazieno@gmail.com> <GrazienoPellegrino@3f533792-8f58-4932-b0fe-aaf55b0a4547>
  11 +Leandro Nunes dos Santos <leandronunes@gmail.com> <LeandroNunes@3f533792-8f58-4932-b0fe-aaf55b0a4547>
  12 +Moises Machado <moises@colivre.coop.br> <MoisesMachado@3f533792-8f58-4932-b0fe-aaf55b0a4547>
  13 +Valessio Brito <valessio@gmail.com> <ValessioBrito@3f533792-8f58-4932-b0fe-aaf55b0a4547>
  14 +Valessio Brito <valessio@gmail.com> <valessio@rohit.colivre.coop.br>
... ...
AUTHORS
... ... @@ -9,11 +9,16 @@ Developers
9 9 Antonio Terceiro <terceiro@colivre.coop.br>
10 10 Aurelio A. Heckert <aurelio@colivre.coop.br>
11 11 Daniela Soares Feitosa <danielafeitosa@colivre.coop.br>
12   -Grazieno Pellegrino <grazieno@colivre.coop.br>
  12 +Grazieno Pellegrino <grazieno@gmail.com>
13 13 Joenio Costa <joenio@colivre.coop.br>
14   -Leandro Nunes <leandronunes@gmail.com>
  14 +Josef Spillner <josef.spillner@tu-dresden.de>
  15 +Leandro Nunes dos Santos <leandronunes@gmail.com>
15 16 Moises Machado <moises@colivre.coop.br>
  17 +Raphaël Rousseau <raph@r4f.org>
  18 +Rodrigo Souto <rodrigo@colivre.coop.br>
  19 +Ronny Kursawe <kursawe.ronny@googlemail.com>
16 20 Valessio Brito <valessio@gmail.com>
  21 +Yann Lugrin <yann.lugrin@liquid-concept.ch>
17 22  
18 23 Ideas, specifications and incentive
19 24 ===================================
... ...
app/controllers/public/doc_controller.rb 0 → 100644
... ... @@ -0,0 +1,28 @@
  1 +class DocController < PublicController
  2 +
  3 + include LanguageHelper
  4 +
  5 + no_design_blocks
  6 +
  7 + before_filter :load_toc
  8 +
  9 + def index
  10 + @index = DocSection.root(language)
  11 + end
  12 +
  13 + def section
  14 + @section = DocSection.find(params[:section], language)
  15 + end
  16 +
  17 + def topic
  18 + @section = DocSection.find(params[:section], language)
  19 + @topic = @section.find(params[:topic])
  20 + end
  21 +
  22 + protected
  23 +
  24 + def load_toc
  25 + @toc = DocSection.root(language).find('toc')
  26 + end
  27 +
  28 +end
... ...
app/helpers/doc_helper.rb 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +module DocHelper
  2 + def display_doc(text)
  3 + content_tag(
  4 + 'div',
  5 + wrap_main_content(
  6 + render(:partial => 'path') +
  7 + content_tag(
  8 + 'div',
  9 + text,
  10 + :id => 'online-doc-text'
  11 + )
  12 + ),
  13 + :id => 'online-doc'
  14 + )
  15 + end
  16 +end
... ...
app/models/doc_item.rb 0 → 100644
... ... @@ -0,0 +1,36 @@
  1 +class DocItem
  2 + attr_accessor :id, :title, :text, :language
  3 + def initialize(attrs = {})
  4 + attrs.each do |name,value|
  5 + self.send("#{name}=", value)
  6 + end
  7 + self.language ||= 'en'
  8 + end
  9 +
  10 + def html(theme = nil)
  11 + text.gsub(/<img src="([^"]+\.en\.png)"/) do |match|
  12 + path = $1
  13 + translation = find_image_replacement(path, theme)
  14 + if translation
  15 + "<img src=\"#{translation}\""
  16 + else
  17 + match
  18 + end
  19 + end
  20 + end
  21 +
  22 + private
  23 +
  24 + def find_image_replacement(image, theme)
  25 + translation = image.sub(/\.en\.png$/, '.' + language + '.png')
  26 + search_path = [
  27 + translation
  28 + ]
  29 + if theme
  30 + search_path.unshift("/designs/themes/#{theme}#{translation}") # higher priority
  31 + search_path.push("/designs/themes/#{theme}#{image}") # lower priority
  32 + end
  33 + search_path.find {|file| File.exist?("#{RAILS_ROOT}/public#{file}") }
  34 + end
  35 +
  36 +end
... ...
app/models/doc_section.rb 0 → 100644
... ... @@ -0,0 +1,76 @@
  1 +class DocSection < DocItem
  2 +
  3 + def items
  4 + @items ||= load_items
  5 + end
  6 +
  7 + def find(id)
  8 + items.find {|item| item.id == id }
  9 + end
  10 +
  11 + def self.all(language = 'en', force = false)
  12 + if force
  13 + @all = nil
  14 + end
  15 + @all ||= {}
  16 + @all[language] ||= load_dirs(language)
  17 + end
  18 +
  19 + def self.find(id, language = 'en', force = false)
  20 + if id.blank?
  21 + root(language)
  22 + else
  23 + all(language, force).find {|item| item.id == id }
  24 + end
  25 + end
  26 +
  27 + def self.root(language = 'en')
  28 + @root ||= {}
  29 + @root[language] ||= load(File.join(RAILS_ROOT, 'doc', 'noosfero'), language)
  30 + end
  31 +
  32 + private
  33 +
  34 + attr_accessor :directory
  35 +
  36 + def self.load_dirs(language)
  37 + Dir.glob(File.join(RAILS_ROOT, 'doc', 'noosfero', '*')).select {|item| File.directory?(item) }.map do |dir|
  38 + load(dir, language)
  39 + end
  40 + end
  41 +
  42 + def self.load(dir, language)
  43 + index = DocTopic.loadfile(self._find_topic(dir, 'index', language))
  44 + toc = DocTopic.loadfile(self._find_topic(dir, 'toc', language))
  45 + new(:id => File.basename(dir), :title => index.title, :text => index.text + toc.text, :language => language, :directory => dir)
  46 + end
  47 +
  48 + def self._find_topic(dir, id, language)
  49 + language_suffix = _language_suffix(language)
  50 + [
  51 + File.join(dir, "#{id}#{language_suffix}.xhtml"),
  52 + File.join(dir, "#{id}.en.xhtml")
  53 + ].find {|file| File.exist?(file) }
  54 + end
  55 +
  56 + def load_items
  57 + if directory
  58 + language_suffix = self.class._language_suffix(language)
  59 + Dir.glob(File.join(directory, "*.en.xhtml")).map do |file|
  60 + # extract the available id's from the English versions
  61 + File.basename(file).sub(/\.en.xhtml$/, '')
  62 + end.map do |id|
  63 + # load a translation, if available, or the original English topic
  64 + DocTopic.loadfile(self.class._find_topic(directory, id, language))
  65 + end
  66 + else
  67 + []
  68 + end
  69 + end
  70 +
  71 + def self._language_suffix(language)
  72 + (!language || language == 'en') ? '' : ('.' + language)
  73 + end
  74 +
  75 +
  76 +end
... ...
app/models/doc_topic.rb 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +class DocTopic < DocItem
  2 + def self.loadfile(file)
  3 + lines = File.readlines(file)
  4 + title = _find_title(lines)
  5 + File.basename(file) =~ /(.*)\.([^\.]+)\.xhtml$/
  6 + id = $1
  7 + language = $2
  8 + new(:id => id, :title => title, :text => lines.join, :language => language)
  9 + end
  10 +
  11 + def self._find_title(lines)
  12 + lines.find {|line| line =~ /^<h1>(.*)<\/h1>/ }
  13 + $1
  14 + end
  15 +end
... ...
app/models/environment.rb
... ... @@ -703,4 +703,12 @@ class Environment &lt; ActiveRecord::Base
703 703 end
704 704 end
705 705  
  706 + def local_docs
  707 + settings[:local_docs] || []
  708 + end
  709 +
  710 + def local_docs=(value)
  711 + settings[:local_docs] = value
  712 + end
  713 +
706 714 end
... ...
app/views/doc/_path.html.erb 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +<div id='online-doc-path'>
  2 + <%= _('You are here:') %>
  3 + <%= link_to _('Documentation'), doc_path %>
  4 + <% if @section %>
  5 + &raquo; <%= link_to @section.title, doc_section_path(@section.id) %>
  6 + <% end %>
  7 + <% if @topic %>
  8 + &raquo; <%= @topic.title %>
  9 + <% end %>
  10 +</div>
... ...
app/views/doc/_toc.html.erb 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +<div id='online-doc-navigation'>
  2 + <h1><%= _('On-line documentation') %></h1>
  3 + <ul>
  4 + <% @environment.local_docs.each do |link,text| %>
  5 + <li><%= link_to text, link, :target => '_blank' %></li>
  6 + <% end %>
  7 + </ul>
  8 + <%= @toc.text %>
  9 +</div>
... ...
app/views/doc/index.html.erb 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +<%= render :partial => 'toc' %>
  2 +<%= display_doc @index.html %>
... ...
app/views/doc/section.html.erb 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +<%= render :partial => 'toc' %>
  2 +<%= display_doc @section.html %>
... ...
app/views/doc/topic.html.erb 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +<%= render :partial => 'toc' %>
  2 +<%= display_doc @topic.html %>
... ...
config/routes.rb
... ... @@ -29,6 +29,11 @@ ActionController::Routing::Routes.draw do |map|
29 29 map.connect 'thumbnails/*stuff', :controller => 'not_found', :action => 'index'
30 30 map.connect 'user_themes/*stuff', :controller => 'not_found', :action => 'index'
31 31  
  32 + # online documentation
  33 + map.doc 'doc', :controller => 'doc', :action => 'index'
  34 + map.doc_section 'doc/:section', :controller => 'doc', :action => 'section'
  35 + map.doc_topic 'doc/:section/:topic', :controller => 'doc', :action => 'topic'
  36 +
32 37 # user account controller
33 38 map.connect 'account/new_password/:code', :controller => 'account', :action => 'new_password'
34 39 map.connect 'account/:action', :controller => 'account'
... ...
doc/noosfero/admin/100-email.en.xhtml 0 → 100644
... ... @@ -0,0 +1 @@
  1 +<h1>E-mail settings</h1>
0 2 \ No newline at end of file
... ...
doc/noosfero/admin/100-email.pt.xhtml 0 → 100644
... ... @@ -0,0 +1 @@
  1 +<h1>Configurações de e-mail</h1>
0 2 \ No newline at end of file
... ...
doc/noosfero/admin/100-email.textile 0 → 100644
... ... @@ -0,0 +1 @@
  1 +h1. E-mail settings
... ...
doc/noosfero/admin/200-roles.en.xhtml 0 → 100644
... ... @@ -0,0 +1 @@
  1 +<h1>Managing user roles</h1>
0 2 \ No newline at end of file
... ...
doc/noosfero/admin/200-roles.pt.xhtml 0 → 100644
... ... @@ -0,0 +1 @@
  1 +<h1>Gerenciando papéis de usuários</h1>
0 2 \ No newline at end of file
... ...
doc/noosfero/admin/200-roles.textile 0 → 100644
... ... @@ -0,0 +1 @@
  1 +h1. Managing user roles
... ...
doc/noosfero/admin/index.en.xhtml 0 → 100644
... ... @@ -0,0 +1 @@
  1 +<h1>Administration</h1>
0 2 \ No newline at end of file
... ...
doc/noosfero/admin/index.pt.xhtml 0 → 100644
... ... @@ -0,0 +1 @@
  1 +<h1>Administração</h1>
0 2 \ No newline at end of file
... ...
doc/noosfero/admin/index.textile 0 → 100644
... ... @@ -0,0 +1 @@
  1 +h1. Administration
... ...
doc/noosfero/admin/toc.en.xhtml 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +<!-- THIS FILE IS AUTOGENERATED. DO NOT EDIT -->
  2 +<ul>
  3 +<li> <a href="/doc/admin/200-roles">Managing user roles</a> </li>
  4 +<li> <a href="/doc/admin/100-email">E-mail settings</a> </li>
  5 +</ul>
... ...
doc/noosfero/admin/toc.pt.xhtml 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +
  2 +<!-- THIS FILE IS AUTOGENERATED. DO NOT EDIT -->
  3 +<ul>
  4 +<li> <a href="/doc/admin/200-roles">Gerenciando papéis de usuário</a> </li>
  5 +<li> <a href="/doc/admin/100-email">Configurações de e-mail</a> </li>
  6 +</ul>
... ...
doc/noosfero/index.en.xhtml 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +<h1>Noosfero online documentation</h1>
  2 +
  3 + <p>This is the Noosfero online documentation. In these pages you will find useful
  4 +information on how to use Noosfero, manage a Noosfero environment and customize
  5 +Noosfero in several ways.</p>
  6 +
  7 +
  8 + <p>To display documentation about a given topic, first choose a section in the
  9 +left menu, and then choose a topic within the section.</p>
0 10 \ No newline at end of file
... ...
doc/noosfero/index.pt.xhtml 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +<h1>Documentação online do Noosfero</h1>
  2 +
  3 + <p>Esta é a documentação online do Noosfero. Nessa páginas você vai encontrar
  4 +informaçoes úteis para usar o Noosfero, gerenciar um ambiente Noosfero e
  5 +personalizar Noosfero de várias formas.</p>
  6 +
  7 +
  8 + <p>Para exibir documentação sobre um dado tópico, primeiro escolha uma seção no
  9 +menu à esquerda, e então escolha um tópico na seção.</p>
0 10 \ No newline at end of file
... ...
doc/noosfero/index.textile 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +h1. Noosfero online documentation
  2 +
  3 +This is the Noosfero online documentation. In these pages you will find useful
  4 +information on how to use Noosfero, manage a Noosfero environment and customize
  5 +Noosfero in several ways.
  6 +
  7 +To display documentation about a given topic, first choose a section in the
  8 +left menu, and then choose a topic within the section.
... ...
doc/noosfero/toc.en.xhtml 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +<!-- THIS FILE IS AUTOGENERATED. DO NOT EDIT -->
  2 +<ul>
  3 +<li> <a href="/doc/admin">Administration</a> </li>
  4 +<li> <a href="/doc/user">User features</a> </li>
  5 +</ul>
... ...
doc/noosfero/toc.pt.xhtml 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +
  2 +<!-- THIS FILE IS AUTOGENERATED. DO NOT EDIT -->
  3 +<ul>
  4 +<li> <a href="/doc/admin">Administração de ambiente</a> </li>
  5 +<li> <a href="/doc/user">Manual do usuário</a> </li>
  6 +</ul>
... ...
doc/noosfero/user/adding-friends.en.xhtml 0 → 100644
... ... @@ -0,0 +1 @@
  1 +<h1>Adding new friends</h1>
0 2 \ No newline at end of file
... ...
doc/noosfero/user/adding-friends.pt.xhtml 0 → 100644
... ... @@ -0,0 +1 @@
  1 +<h1>Adicionando novos amigos</h1>
0 2 \ No newline at end of file
... ...
doc/noosfero/user/adding-friends.textile 0 → 100644
... ... @@ -0,0 +1 @@
  1 +h1. Adding new friends
... ...
doc/noosfero/user/index.en.xhtml 0 → 100644
... ... @@ -0,0 +1 @@
  1 +<h1>User features</h1>
0 2 \ No newline at end of file
... ...
doc/noosfero/user/index.pt.xhtml 0 → 100644
... ... @@ -0,0 +1 @@
  1 +<h1>Funcionalidades de Usuário</h1>
0 2 \ No newline at end of file
... ...
doc/noosfero/user/index.textile 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +h1. User features
  2 +
... ...
doc/noosfero/user/toc.en.xhtml 0 → 100644
... ... @@ -0,0 +1,4 @@
  1 +<!-- THIS FILE IS AUTOGENERATED. DO NOT EDIT -->
  2 +<ul>
  3 +<li> <a href="/doc/user/adding-friends">Adding new friends</a> </li>
  4 +</ul>
... ...
doc/noosfero/user/toc.pt.xhtml 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +
  2 +<!-- THIS FILE IS AUTOGENERATED. DO NOT EDIT -->
  3 +<ul>
  4 +<li> <a href="/doc/admin/200-roles">Adicionando novos amigos</a> </li>
  5 +</ul>
... ...
features/online_documenation.feature 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +Feature: online documentation
  2 + As a user
  3 + I want to read the documentation
  4 + So that I know how to do something in Noosfero
  5 +
  6 + Scenario: initial page of online documentation
  7 + When I go to /doc
  8 + Then I should see "Noosfero online documentation"
  9 +
  10 + Scenario: displaying index content
  11 + When I go to /doc
  12 + Then I should see "Administration"
  13 + And I should see "User features"
  14 +
... ...
lib/tasks/doc.rake 0 → 100644
... ... @@ -0,0 +1,101 @@
  1 +namespace :noosfero do
  2 + namespace :doc do
  3 + input = Dir.glob('doc/noosfero/**/*.textile')
  4 + topics_xhtml = input.map { |item| item.sub('.textile', '.en.xhtml') }
  5 + sections = Dir.glob('doc/noosfero/*').select {|item| File.directory?(item) }
  6 + toc_sections = sections.map {|item| File.join(item, 'toc.en.xhtml')}
  7 + index_sections = sections.map {|item| File.join(item, 'index.en.xhtml')}
  8 +
  9 + def build_textile(input, output)
  10 + begin
  11 + File.open(output ,'w') do |output_file|
  12 + output_file.write(RedCloth.new(File.read(input)).to_html)
  13 + puts "#{input} -> #{output}"
  14 + end
  15 + rescue Exception => e
  16 + rm_f output
  17 + raise e
  18 + end
  19 + end
  20 +
  21 + topics_xhtml.each do |target|
  22 + source = target.sub('.en.xhtml', '.textile')
  23 + file target => source do |t|
  24 + build_textile(source, target)
  25 + end
  26 + end
  27 +
  28 + toc_sections.each do |toc|
  29 + section_topics = Dir.glob(File.dirname(toc) + '/*.textile').map {|item| item.sub('.textile', '.en.xhtml') }.reject {|item| ['index.en.xhtml', 'toc.en.xhtml' ].include?(File.basename(item))}
  30 + file toc => section_topics do |t|
  31 + begin
  32 + File.open(toc, 'w') do |output_file|
  33 + section = File.basename(File.dirname(toc))
  34 + output_file.puts "<!-- THIS FILE IS AUTOGENERATED. DO NOT EDIT -->"
  35 + output_file.puts "<ul>"
  36 + section_topics.each do |item|
  37 + topic = DocTopic.loadfile(item)
  38 + output_file.puts "<li> <a href=\"/doc/#{section}/#{topic.id}\">#{topic.title}</a> </li>"
  39 + end
  40 + output_file.puts "</ul>"
  41 + puts "#{section_topics.join(', ')} -> #{toc}"
  42 + end
  43 + rescue Exception => e
  44 + rm_rf toc
  45 + raise e
  46 + end
  47 + end
  48 + end
  49 +
  50 + top_level_toc = 'doc/noosfero/toc.en.xhtml'
  51 + file top_level_toc => index_sections do
  52 + begin
  53 + File.open(top_level_toc, 'w') do |output_file|
  54 + output_file.puts "<!-- THIS FILE IS AUTOGENERATED. DO NOT EDIT -->"
  55 + output_file.puts "<ul>"
  56 + index_sections.each do |item|
  57 + section = File.basename(File.dirname(item))
  58 + topic = DocTopic.loadfile(item)
  59 + output_file.puts "<li> <a href=\"/doc/#{section}\">#{topic.title}</a> </li>"
  60 + end
  61 + output_file.puts "</ul>"
  62 + end
  63 + rescue Exception => e
  64 + rm_f top_level_toc
  65 + raise e
  66 + end
  67 + end
  68 +
  69 +
  70 + english_xhtml = (topics_xhtml + toc_sections + [top_level_toc])
  71 + task :english => english_xhtml
  72 +
  73 + po4a_conf = 'tmp/po4a.conf'
  74 + file po4a_conf => english_xhtml do
  75 + begin
  76 + File.open(po4a_conf, 'w') do |file|
  77 + file.puts "[po4a_langs] #{(Noosfero.locales.keys - ['en']).join(' ')}"
  78 + file.puts "[po4a_paths] po/noosfero-doc.pot $lang:po/$lang/noosfero-doc.po"
  79 + english_xhtml.each do |item|
  80 + file.puts "[type: xhtml] #{item} $lang:#{item.sub(/\.en\.xhtml/, '.$lang.xhtml')}"
  81 + end
  82 + end
  83 + rescue Exception => e
  84 + rm_f po4a_conf
  85 + raise e
  86 + end
  87 + end
  88 +
  89 + task :build => po4a_conf do
  90 + sh "po4a #{po4a_conf}"
  91 + end
  92 +
  93 + task :clean do
  94 + sh 'rm -f doc/noosfero/*.xhtml'
  95 + sh 'rm -f doc/noosfero/*/*.xhtml'
  96 + rm_f po4a_conf
  97 + end
  98 +
  99 + task :rebuild => [:clean, :build]
  100 + end
  101 +end
... ...
lib/tasks/release.rake 0 → 100644
... ... @@ -0,0 +1,65 @@
  1 +namespace :noosfero do
  2 +
  3 + desc 'checks if there are uncommitted changes in the repo'
  4 + task :check_repo do
  5 + sh "git status | grep 'nothing.*commit'" do |ok, res|
  6 + if !ok
  7 + raise "******** There are uncommited changes in the repository, cannot continue"
  8 + end
  9 + end
  10 + end
  11 +
  12 + version = Noosfero::VERSION
  13 + desc 'checks if there is already a tag for the curren version'
  14 + task :check_tag do
  15 + sh "git tag | grep '^#{version}$' >/dev/null" do |ok, res|
  16 + if ok
  17 + raise "******** There is already a tag for version #{version}, cannot continue"
  18 + end
  19 + end
  20 + puts "Not found tag for version #{version}, we can go on."
  21 + end
  22 +
  23 + AUTHORS_HEADER = <<EOF
  24 +If you are not listed here, but should be, please write to the noosfero mailing
  25 +list: http://ynternet.net/mailman/listinfo/noosfero (this list requires
  26 +subscription to post, but since you are an author of noosfero, that's not a
  27 +problem).
  28 +
  29 +Developers
  30 +==========
  31 +
  32 +EOF
  33 + AUTHORS_FOOTER = <<EOF
  34 +
  35 +Ideas, specifications and incentive
  36 +===================================
  37 +Daniel Tygel <dtygel@fbes.org.br>
  38 +Guilherme Rocha <guilherme@gf7.com.br>
  39 +Raphael Rousseau <raph@r4f.org>
  40 +Théo Bondolfi <move@cooperation.net>
  41 +Vicente Aguiar <vicenteaguiar@colivre.coop.br>
  42 +
  43 +EOF
  44 +
  45 + desc 'updates the AUTHORS file'
  46 + task :authors do
  47 + begin
  48 + File.open("AUTHORS", 'w') do |output|
  49 + output.puts AUTHORS_HEADER
  50 + output.puts `git log --pretty=format:'%aN <%aE>' | sort | uniq`
  51 + output.puts AUTHORS_FOOTER
  52 + end
  53 + rescue Exception => e
  54 + rm_f 'AUTHORS'
  55 + raise e
  56 + end
  57 + end
  58 +
  59 + desc 'prepares a release tarball'
  60 + task :release => [ 'noosfero:doc:build', :authors, :check_repo, :check_tag ] do
  61 + raise "Not implemented yet"
  62 + sh "git tag #{version}"
  63 + end
  64 +
  65 +end
... ...
lib/tasks/translation.rake 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +namespace :noosfero do
  2 + namespace :translations do
  3 +
  4 + desc 'Update all translation files'
  5 + task :update => ['updatepo', 'noosfero:doc:rebuild']
  6 +
  7 + end
  8 +end
... ...
po/de/noosfero-doc.po 0 → 100644
... ... @@ -0,0 +1,86 @@
  1 +# German translations for PACKAGE package
  2 +# Copyright (C) 2010 Free Software Foundation, Inc.
  3 +# This file is distributed under the same license as the PACKAGE package.
  4 +# Automatically generated, 2010.
  5 +#
  6 +msgid ""
  7 +msgstr ""
  8 +"Project-Id-Version: PACKAGE VERSION\n"
  9 +"POT-Creation-Date: 2010-01-27 15:12-0300\n"
  10 +"PO-Revision-Date: 2010-01-27 09:32-0300\n"
  11 +"Last-Translator: Automatically generated\n"
  12 +"Language-Team: none\n"
  13 +"MIME-Version: 1.0\n"
  14 +"Content-Type: text/plain; charset=ASCII\n"
  15 +"Content-Transfer-Encoding: 8bit\n"
  16 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
  17 +
  18 +# type: Content of: <h1>
  19 +#: doc/noosfero/admin/index.en.xhtml:1
  20 +msgid "Administration"
  21 +msgstr ""
  22 +
  23 +# type: Content of: <h1>
  24 +#: doc/noosfero/admin/200-roles.en.xhtml:1
  25 +msgid "Managing user roles"
  26 +msgstr ""
  27 +
  28 +# type: Content of: <h1>
  29 +#: doc/noosfero/admin/100-email.en.xhtml:1
  30 +msgid "E-mail settings"
  31 +msgstr ""
  32 +
  33 +# type: Content of: <h1>
  34 +#: doc/noosfero/index.en.xhtml:1
  35 +msgid "Noosfero online documentation"
  36 +msgstr ""
  37 +
  38 +# type: Content of: <p>
  39 +#: doc/noosfero/index.en.xhtml:3
  40 +msgid ""
  41 +"This is the Noosfero online documentation. In these pages you will find "
  42 +"useful information on how to use Noosfero, manage a Noosfero environment and "
  43 +"customize Noosfero in several ways."
  44 +msgstr ""
  45 +
  46 +# type: Content of: <p>
  47 +#: doc/noosfero/index.en.xhtml:8
  48 +msgid ""
  49 +"To display documentation about a given topic, first choose a section in the "
  50 +"left menu, and then choose a topic within the section."
  51 +msgstr ""
  52 +
  53 +# type: Content of: <h1>
  54 +#: doc/noosfero/user/index.en.xhtml:1
  55 +msgid "User features"
  56 +msgstr ""
  57 +
  58 +# type: Content of: <h1>
  59 +#: doc/noosfero/user/adding-friends.en.xhtml:1
  60 +msgid "Adding new friends"
  61 +msgstr ""
  62 +
  63 +# type: Content of: <ul><li>
  64 +#: doc/noosfero/admin/toc.en.xhtml:3
  65 +msgid "<a href=\"/doc/admin/200-roles\">Managing user roles</a>"
  66 +msgstr ""
  67 +
  68 +# type: Content of: <ul><li>
  69 +#: doc/noosfero/admin/toc.en.xhtml:4
  70 +msgid "<a href=\"/doc/admin/100-email\">E-mail settings</a>"
  71 +msgstr ""
  72 +
  73 +# type: Content of: <ul><li>
  74 +#: doc/noosfero/user/toc.en.xhtml:3
  75 +msgid "<a href=\"/doc/user/adding-friends\">Adding new friends</a>"
  76 +msgstr ""
  77 +
  78 +# type: Content of: <ul><li>
  79 +#: doc/noosfero/toc.en.xhtml:3
  80 +msgid "<a href=\"/doc/admin\">Administration</a>"
  81 +msgstr ""
  82 +
  83 +# type: Content of: <ul><li>
  84 +#: doc/noosfero/toc.en.xhtml:4
  85 +msgid "<a href=\"/doc/user\">User features</a>"
  86 +msgstr ""
... ...
po/de/noosfero.po
... ... @@ -6,8 +6,8 @@
6 6 #
7 7 msgid ""
8 8 msgstr ""
9   -"Project-Id-Version: noosfero 0.21.3\n"
10   -"POT-Creation-Date: 2010-01-13 13:04-0300\n"
  9 +"Project-Id-Version: noosfero 0.21.4\n"
  10 +"POT-Creation-Date: 2010-01-27 16:08-0300\n"
11 11 "PO-Revision-Date: 2010-01-20 13:44-0300\n"
12 12 "Last-Translator: Ronny Kursawe <kursawe.ronny@googlemail.com>\n"
13 13 "Language-Team: German <de@li.org>\n"
... ... @@ -44,8 +44,7 @@ msgstr &quot;Hauptkategorie&quot;
44 44 msgid "Product Category"
45 45 msgstr "Produktkategorie"
46 46  
47   -#: app/helpers/categories_helper.rb:16
48   -#: app/models/user.rb:-
  47 +#: app/helpers/categories_helper.rb:16 app/models/user.rb:-
49 48 #: app/views/enterprise_registration/basic_information.rhtml:29
50 49 msgid "Region"
51 50 msgstr "Region"
... ... @@ -66,19 +65,18 @@ msgstr &quot;Angenommen&quot;
66 65 msgid "Rejected"
67 66 msgstr "Abgelehnt"
68 67  
69   -#: app/helpers/language_helper.rb:28
70   -#: app/helpers/language_helper.rb:38
71   -msgid "The language you choose here is the language used for options, buttons, etc. It does not affect the language of the content created by other users."
72   -msgstr "Die gewünschte Sprache wird für Optionen,Buttons usw. genutzt.Sie hat keine Auswirkung auf den Inhalt der von anderen Nutzern erstellt wird."
  68 +#: app/helpers/language_helper.rb:28 app/helpers/language_helper.rb:38
  69 +msgid ""
  70 +"The language you choose here is the language used for options, buttons, etc. "
  71 +"It does not affect the language of the content created by other users."
  72 +msgstr ""
  73 +"Die gewünschte Sprache wird für Optionen,Buttons usw. genutzt.Sie hat keine "
  74 +"Auswirkung auf den Inhalt der von anderen Nutzern erstellt wird."
73 75  
74   -#: app/helpers/folder_helper.rb:6
75   -#: app/models/article.rb:38
76   -#: app/models/block.rb:-
77   -#: app/models/comment.rb:-
78   -#: app/views/cms/_article.rhtml:8
79   -#: app/views/cms/_article.rhtml:11
80   -#: app/views/cms/publish.rhtml:21
81   -#: app/views/cms/_textile_article.rhtml:5
  76 +#: app/helpers/folder_helper.rb:6 app/models/article.rb:50
  77 +#: app/models/block.rb:- app/models/comment.rb:-
  78 +#: app/views/cms/_article.rhtml:8 app/views/cms/_article.rhtml:11
  79 +#: app/views/cms/publish.rhtml:21 app/views/cms/_textile_article.rhtml:5
82 80 #: app/views/cms/_tiny_mce_article.rhtml:8
83 81 #: app/views/cms/_tiny_mce_article.rhtml:11
84 82 #: app/views/content_viewer/_comment_form.rhtml:36
... ... @@ -89,23 +87,19 @@ msgstr &quot;Titel&quot;
89 87 msgid "Last update"
90 88 msgstr "Letzte Änderung"
91 89  
92   -#: app/helpers/folder_helper.rb:40
93   -#: app/helpers/article_helper.rb:5
  90 +#: app/helpers/folder_helper.rb:40 app/helpers/article_helper.rb:5
94 91 msgid "Options"
95 92 msgstr "Optionen"
96 93  
97   -#: app/helpers/folder_helper.rb:45
98   -#: app/helpers/article_helper.rb:10
  94 +#: app/helpers/folder_helper.rb:45 app/helpers/article_helper.rb:10
99 95 msgid "This article must be published (visible to other people)"
100 96 msgstr "Dieser Artikel soll veröffentlicht werden (sichtbar für andere)"
101 97  
102   -#: app/helpers/folder_helper.rb:50
103   -#: app/helpers/article_helper.rb:26
  98 +#: app/helpers/folder_helper.rb:50 app/helpers/article_helper.rb:26
104 99 msgid "I want this article to display the number of hits it received"
105 100 msgstr "Ich möchte zu diesem Artikel die Anzahl der Aufrufe angezeigt haben"
106 101  
107   -#: app/helpers/folder_helper.rb:57
108   -#: app/helpers/article_helper.rb:32
  102 +#: app/helpers/folder_helper.rb:57 app/helpers/article_helper.rb:32
109 103 #: app/views/tasks/_approve_article.rhtml:1
110 104 msgid "New article"
111 105 msgstr "Neuer Artikel"
... ... @@ -124,68 +118,57 @@ msgstr &quot;Artikel&quot;
124 118 #: app/helpers/assets_helper.rb:8
125 119 #: app/controllers/public/search_controller.rb:132
126 120 #: app/controllers/public/search_controller.rb:203
127   -#: app/models/people_block.rb:4
128   -#: app/views/search/people.rhtml:1
129   -#: app/views/layouts/application-ng.rhtml:95
  121 +#: app/models/people_block.rb:4 app/views/search/people.rhtml:1
  122 +#: app/views/layouts/application-ng.rhtml:96
130 123 msgid "People"
131 124 msgstr "Leute"
132 125  
133 126 #: app/helpers/assets_helper.rb:9
134 127 #: app/controllers/public/search_controller.rb:134
135 128 #: app/controllers/public/search_controller.rb:205
136   -#: app/models/products_block.rb:12
137   -#: app/views/search/_sellers_form.rhtml:8
  129 +#: app/models/products_block.rb:12 app/views/search/_sellers_form.rhtml:8
138 130 msgid "Products"
139 131 msgstr "Produkte"
140 132  
141 133 #: app/helpers/assets_helper.rb:10
142 134 #: app/controllers/public/search_controller.rb:131
143 135 #: app/controllers/public/search_controller.rb:204
144   -#: app/views/content_viewer/_person.rhtml:31
145   -#: app/views/search/_sellers_form.rhtml:7
146   -#: app/views/search/enterprises.rhtml:5
147   -#: app/views/profile/_person.rhtml:31
  136 +#: app/views/content_viewer/_person.rhtml:38
  137 +#: app/views/search/_sellers_form.rhtml:7 app/views/search/enterprises.rhtml:5
  138 +#: app/views/profile/_person.rhtml:38
148 139 msgid "Enterprises"
149 140 msgstr "Unternehmen"
150 141  
151 142 #: app/helpers/assets_helper.rb:11
152 143 #: app/controllers/public/search_controller.rb:133
153 144 #: app/controllers/public/search_controller.rb:207
154   -#: app/views/content_viewer/_person.rhtml:50
155   -#: app/views/search/communities.rhtml:6
156   -#: app/views/profile/_person.rhtml:50
157   -#: app/views/layouts/application-ng.rhtml:97
  145 +#: app/views/content_viewer/_person.rhtml:56
  146 +#: app/views/search/communities.rhtml:6 app/views/profile/_person.rhtml:56
  147 +#: app/views/layouts/application-ng.rhtml:98
158 148 msgid "Communities"
159 149 msgstr "Communities"
160 150  
161 151 #: app/helpers/assets_helper.rb:12
162 152 #: app/controllers/public/search_controller.rb:135
163   -#: app/views/profile/index.rhtml:29
164 153 msgid "Events"
165 154 msgstr "Ereignisse"
166 155  
167 156 #: app/helpers/lightbox_helper.rb:31
168 157 msgid "Please, try again when the page loading completes."
169   -msgstr "Bitte probieren Sie es noch ein Mal, wenn die Page komplett geladen ist."
  158 +msgstr ""
  159 +"Bitte probieren Sie es noch ein Mal, wenn die Page komplett geladen ist."
170 160  
171   -#: app/helpers/forms_helper.rb:35
172   -#: app/models/link_list_block.rb:9
  161 +#: app/helpers/forms_helper.rb:35 app/models/link_list_block.rb:9
173 162 #: app/views/shared/_select_categories.rhtml:22
174 163 #: app/views/shared/_change_image.rhtml:2
175   -#: app/views/cms/select_article_type.rhtml:12
176   -#: app/views/cms/edit.rhtml:41
177   -#: app/views/cms/edit.rhtml:43
178   -#: app/views/cms/edit.rhtml:45
179   -#: app/views/cms/edit.rhtml:47
180   -#: app/views/profile_editor/header_footer.rhtml:29
  164 +#: app/views/cms/select_article_type.rhtml:12 app/views/cms/edit.rhtml:41
  165 +#: app/views/cms/edit.rhtml:43 app/views/cms/edit.rhtml:45
  166 +#: app/views/cms/edit.rhtml:47 app/views/profile_editor/header_footer.rhtml:29
181 167 #: app/views/memberships/new_community.rhtml:55
182   -#: app/views/box_organizer/edit.rhtml:11
183   -#: app/views/tasks/_task.rhtml:12
184   -#: app/views/tasks/_ticket.rhtml:15
185   -#: app/views/account/accept_terms.rhtml:24
  168 +#: app/views/box_organizer/edit.rhtml:11 app/views/tasks/_task.rhtml:12
  169 +#: app/views/tasks/_ticket.rhtml:15 app/views/account/accept_terms.rhtml:24
186 170 #: app/views/account/activation_question.rhtml:38
187   -#: app/views/account/login.rhtml:22
188   -#: app/views/account/_login_form.rhtml:22
  171 +#: app/views/account/login.rhtml:19 app/views/account/_login_form.rhtml:22
189 172 #: app/views/themes/add_css.rhtml:8
190 173 #: app/views/admin_panel/message_for_disabled_enterprise.rhtml:11
191 174 #: app/views/admin_panel/set_portal_news_amount.rhtml:9
... ... @@ -210,26 +193,25 @@ msgid &quot;City:&quot;
210 193 msgstr "Ort"
211 194  
212 195 #: app/helpers/forms_helper.rb:106
213   -msgid "The <label class='pseudoformlabel'>highlighted</label> fields are mandatory."
214   -msgstr "Die <label class='pseudoformlabel'>gekennzeichneten</label> Felder sind zwingend erforderlich."
  196 +msgid ""
  197 +"The <label class='pseudoformlabel'>highlighted</label> fields are mandatory."
  198 +msgstr ""
  199 +"Die <label class='pseudoformlabel'>gekennzeichneten</label> Felder sind "
  200 +"zwingend erforderlich."
215 201  
216   -#: app/helpers/catalog_helper.rb:13
217   -#: app/views/search/_product.rhtml:15
  202 +#: app/helpers/catalog_helper.rb:13 app/views/search/_product.rhtml:15
218 203 #: app/views/catalog/show.rhtml:13
219 204 msgid "Price: %s"
220 205 msgstr "Preis: %s"
221 206  
222   -#: app/helpers/catalog_helper.rb:19
223   -#: app/views/blocks/profile_info.rhtml:20
224   -#: app/views/content_viewer/_organization.rhtml:15
225   -#: app/views/profile/_organization.rhtml:15
  207 +#: app/helpers/catalog_helper.rb:19 app/views/blocks/profile_info.rhtml:21
  208 +#: app/views/content_viewer/_organization.rhtml:26
  209 +#: app/views/profile/_organization.rhtml:26
226 210 msgid "Products/Services"
227 211 msgstr "Produkte/Dienste"
228 212  
229   -#: app/helpers/catalog_helper.rb:28
230   -#: app/helpers/display_helper.rb:12
231   -#: app/helpers/display_helper.rb:21
232   -#: app/models/product.rb:49
  213 +#: app/helpers/catalog_helper.rb:28 app/helpers/display_helper.rb:12
  214 +#: app/helpers/display_helper.rb:21 app/models/product.rb:49
233 215 msgid "Uncategorized product"
234 216 msgstr "Produkt ohne Kategorie"
235 217  
... ... @@ -253,7 +235,9 @@ msgstr[1] &quot;% Einträge&quot;
253 235  
254 236 #: app/helpers/events_helper.rb:4
255 237 msgid "Select a day on the left to display it's events here"
256   -msgstr "Bitte wählen Sie einen Tag auf der linken Bildschirmseite aus, um die Ereignisse hier anzuzeigen"
  238 +msgstr ""
  239 +"Bitte wählen Sie einen Tag auf der linken Bildschirmseite aus, um die "
  240 +"Ereignisse hier anzuzeigen"
257 241  
258 242 #: app/helpers/events_helper.rb:5
259 243 msgid "Events for %s"
... ... @@ -387,8 +371,7 @@ msgstr &quot;Samstag&quot;
387 371 msgid "%{month} %{year}"
388 372 msgstr "%{month} %{year}"
389 373  
390   -#: app/helpers/boxes_helper.rb:31
391   -#: app/helpers/boxes_helper.rb:57
  374 +#: app/helpers/boxes_helper.rb:31 app/helpers/boxes_helper.rb:57
392 375 msgid "Main content"
393 376 msgstr "Hauptinhalt"
394 377  
... ... @@ -412,19 +395,14 @@ msgstr &quot;Kann nicht weiter nach unten schieben&quot;
412 395 msgid "Move block down"
413 396 msgstr "Block nach unten schieben"
414 397  
415   -#: app/helpers/boxes_helper.rb:193
416   -#: app/helpers/boxes_helper.rb:195
  398 +#: app/helpers/boxes_helper.rb:193 app/helpers/boxes_helper.rb:195
417 399 msgid "Move to the opposite side"
418 400 msgstr "Zur anderen Seite schieben"
419 401  
420   -#: app/helpers/boxes_helper.rb:200
421   -#: app/helpers/article_helper.rb:36
422   -#: app/models/link_list_block.rb:5
423   -#: app/views/categories/_category.rhtml:8
424   -#: app/views/cms/view.rhtml:81
425   -#: app/views/manage_products/index.rhtml:19
426   -#: app/views/manage_products/index.rhtml:53
427   -#: app/views/role/index.rhtml:14
  402 +#: app/helpers/boxes_helper.rb:200 app/helpers/article_helper.rb:36
  403 +#: app/models/link_list_block.rb:5 app/views/categories/_category.rhtml:8
  404 +#: app/views/cms/view.rhtml:81 app/views/manage_products/index.rhtml:19
  405 +#: app/views/manage_products/index.rhtml:53 app/views/role/index.rhtml:14
428 406 #: app/views/profile_members/add_member.rhtml:13
429 407 #: app/views/profile_members/unassociate.rhtml:13
430 408 #: app/views/profile_members/_members_list.rhtml:13
... ... @@ -447,22 +425,15 @@ msgstr &quot;Sind Sie sicher, dass Sie diesen Block löschen wollen?&quot;
447 425 msgid "Help on this block"
448 426 msgstr "Hilfe für diesen Block"
449 427  
450   -#: app/helpers/boxes_helper.rb:209
451   -#: app/helpers/application_helper.rb:80
452   -#: app/models/link_list_block.rb:23
453   -#: app/views/layouts/application.rhtml:109
  428 +#: app/helpers/boxes_helper.rb:209 app/helpers/application_helper.rb:80
  429 +#: app/models/link_list_block.rb:23 app/views/layouts/application.rhtml:109
454 430 #: app/views/layouts/wizard.rhtml:29
455 431 msgid "Help"
456 432 msgstr "Hilfe"
457 433  
458   -#: app/helpers/boxes_helper.rb:209
459   -#: app/helpers/application_helper.rb:100
460   -#: app/views/shared/user_menu.rhtml:68
461   -#: app/views/cms/why_categorize.rhtml:8
462   -#: app/views/search/_search_form.rhtml:63
463   -#: app/views/box_organizer/add_block.rhtml:19
464   -#: app/views/account/wizard.rhtml:1
465   -#: app/views/layouts/application-ng.rhtml:73
  434 +#: app/helpers/boxes_helper.rb:209 app/helpers/application_helper.rb:100
  435 +#: app/views/cms/why_categorize.rhtml:8 app/views/search/_search_form.rhtml:63
  436 +#: app/views/box_organizer/add_block.rhtml:19 app/views/account/wizard.rhtml:1
466 437 msgid "Close"
467 438 msgstr "Schließen"
468 439  
... ... @@ -472,7 +443,8 @@ msgstr &quot;Administrator muss alle neuen Organisationen bestätigen&quot;
472 443  
473 444 #: app/helpers/features_helper.rb:5
474 445 msgid "Administrator assigns validator organizations per region."
475   -msgstr "Administrator delegiert die Bestätigung von Organisationen für Bereiche"
  446 +msgstr ""
  447 +"Administrator delegiert die Bestätigung von Organisationen für Bereiche"
476 448  
477 449 #: app/helpers/content_viewer_helper.rb:9
478 450 msgid "No comments yet"
... ... @@ -488,19 +460,15 @@ msgstr[1] &quot;%{comments} Kommentare&quot;
488 460 msgid "%s, by %s - %s"
489 461 msgstr "%s, von %s - %s"
490 462  
491   -#: app/helpers/profile_helper.rb:19
492   -#: app/helpers/friends_helper.rb:9
493   -#: app/helpers/search_helper.rb:102
494   -#: app/views/layouts/slideshow.rhtml:18
  463 +#: app/helpers/profile_helper.rb:19 app/helpers/friends_helper.rb:9
  464 +#: app/helpers/search_helper.rb:102 app/views/layouts/slideshow.rhtml:18
495 465 msgid "Previous"
496 466 msgstr "Vorherige"
497 467  
498   -#: app/helpers/profile_helper.rb:19
499   -#: app/helpers/friends_helper.rb:9
  468 +#: app/helpers/profile_helper.rb:19 app/helpers/friends_helper.rb:9
500 469 #: app/helpers/search_helper.rb:102
501 470 #: app/views/enterprise_registration/basic_information.rhtml:32
502   -#: app/views/friends/invite.rhtml:40
503   -#: app/views/layouts/slideshow.rhtml:18
  471 +#: app/views/friends/invite.rhtml:40 app/views/layouts/slideshow.rhtml:18
504 472 msgid "Next"
505 473 msgstr "Nächste"
506 474  
... ... @@ -869,8 +837,8 @@ msgid &quot;Contact person:&quot;
869 837 msgstr "Kontaktperson"
870 838  
871 839 #: app/helpers/enterprise_homepage_helper.rb:7
872   -#: app/views/content_viewer/_person.rhtml:16
873   -#: app/views/profile/_person.rhtml:16
  840 +#: app/views/content_viewer/_person.rhtml:23
  841 +#: app/views/profile/_person.rhtml:23
874 842 msgid "e-Mail:"
875 843 msgstr "E-Mail"
876 844  
... ... @@ -879,17 +847,15 @@ msgid &quot;Phone(s):&quot;
879 847 msgstr "Telefon"
880 848  
881 849 #: app/helpers/enterprise_homepage_helper.rb:9
  850 +#: app/views/content_viewer/_organization.rhtml:15
882 851 #: app/views/content_viewer/_person.rhtml:7
883   -#: app/views/profile/_person.rhtml:7
  852 +#: app/views/profile/_organization.rhtml:15 app/views/profile/_person.rhtml:7
884 853 msgid "Location:"
885