]> source.dussan.org Git - redmine.git/commitdiff
r18596@gaspard (orig r1860): nbc | 2008-09-14 21:03:46 +0200
authorNicolas Chuche <nicolas.chuche@barna.be>
Wed, 17 Sep 2008 18:42:46 +0000 (18:42 +0000)
committerNicolas Chuche <nicolas.chuche@barna.be>
Wed, 17 Sep 2008 18:42:46 +0000 (18:42 +0000)
 bugfix
 r18597@gaspard (orig r1861):  winterheart | 2008-09-15 17:14:34 +0200
 #1902, translation for zh-tw
 r18598@gaspard (orig r1862):  winterheart | 2008-09-15 17:16:53 +0200
 #1907, translation for zh
 r18599@gaspard (orig r1863):  winterheart | 2008-09-15 17:19:51 +0200
 fixed #1905, patch for Hungarian language
 r18600@gaspard (orig r1864):  winterheart | 2008-09-15 17:22:53 +0200
 Minor typo, fixed #1897, thank Denis Tomashenko for reporting.
 r18601@gaspard (orig r1865):  winterheart | 2008-09-15 18:07:30 +0200
 Catalan translation (#1822), thanks to Joan Duran for contribuition. Some strings has wrong quoting, I fixed that.
 r18602@gaspard (orig r1866):  nbc | 2008-09-15 21:37:43 +0200
 * reposman can create git repository with "--scm git" option
 * light refactoring
 r18603@gaspard (orig r1867):  jplang | 2008-09-16 23:54:53 +0200
 Use RDoc.usage
 r18604@gaspard (orig r1868):  jplang | 2008-09-16 23:56:02 +0200
 mailhandler: fixes exit status and adds an explicit message if response code is 403.
 r18605@gaspard (orig r1869):  winterheart | 2008-09-17 17:31:35 +0200
 Patch #1909, updates for ru.yml
 r18606@gaspard (orig r1870):  jplang | 2008-09-17 18:39:23 +0200
 Render the commit changes list as a tree (#1896).
 r18607@gaspard (orig r1871):  jplang | 2008-09-17 18:48:04 +0200
 Fixed: http links containing parentheses fail to reder correctly (#1591). Patch by Paul Rivier.
 r18608@gaspard (orig r1872):  jplang | 2008-09-17 19:18:05 +0200
 Removes unused image references in stylesheets (#1914).
 r18609@gaspard (orig r1873):  jplang | 2008-09-17 19:23:08 +0200
 Fixed custom query sidebar links broken by r1797 (#1899).

git-svn-id: http://redmine.rubyforge.org/svn/branches/nbc@1874 e93f8b46-1217-0410-a6f0-8f06a7374b81

52 files changed:
app/controllers/repositories_controller.rb
app/helpers/repositories_helper.rb
app/views/issues/_sidebar.rhtml
app/views/repositories/revision.rhtml
extra/mail_handler/rdm-mailhandler.rb
extra/svn/reposman.rb
lang/bg.yml
lang/ca.yml [new file with mode: 0644]
lang/cs.yml
lang/da.yml
lang/de.yml
lang/en.yml
lang/es.yml
lang/fi.yml
lang/fr.yml
lang/he.yml
lang/hu.yml
lang/it.yml
lang/ja.yml
lang/ko.yml
lang/lt.yml
lang/nl.yml
lang/no.yml
lang/pl.yml
lang/pt-br.yml
lang/pt.yml
lang/ro.yml
lang/ru.yml
lang/sr.yml
lang/sv.yml
lang/th.yml
lang/tr.yml
lang/uk.yml
lang/zh-tw.yml
lang/zh.yml
lib/redcloth3.rb
lib/redmine/wiki_formatting.rb
public/images/bullet_add.png [new file with mode: 0644]
public/images/bullet_black.png [new file with mode: 0644]
public/images/bullet_blue.png [new file with mode: 0644]
public/images/bullet_delete.png [new file with mode: 0644]
public/images/bullet_orange.png [new file with mode: 0644]
public/images/bullet_purple.png [new file with mode: 0644]
public/images/folder_open_add.png [new file with mode: 0644]
public/images/folder_open_orange.png [new file with mode: 0644]
public/javascripts/calendar/lang/calendar-ca.js [new file with mode: 0644]
public/javascripts/jstoolbar/lang/jstoolbar-ca.js [new file with mode: 0644]
public/stylesheets/application.css
public/stylesheets/jstoolbar.css
public/stylesheets/scm.css
test/functional/repositories_subversion_controller_test.rb
test/unit/helpers/application_helper_test.rb

index 2f96e2d66a5ff7de55dbaf8e5c38b9084773080f..78576856d8703e279eeefca93714b03e99b0554c 100644 (file)
@@ -118,11 +118,6 @@ class RepositoriesController < ApplicationController
   def revision
     @changeset = @repository.changesets.find_by_revision(@rev)
     raise ChangesetNotFound unless @changeset
-    @changes_count = @changeset.changes.size
-    @changes_pages = Paginator.new self, @changes_count, 150, params['page']                                                           
-    @changes = @changeset.changes.find(:all,
-                                               :limit  =>  @changes_pages.items_per_page,
-                                               :offset =>  @changes_pages.current.offset)
 
     respond_to do |format|
       format.html
index 852ed18d7144d1917f7a28e83ea7e81bc9eb361f..1a82bb8ce1a8c1aa42e7514517b578ee0d20506c 100644 (file)
@@ -32,6 +32,74 @@ module RepositoriesHelper
     end
   end
   
+  def render_changeset_changes
+    changes = @changeset.changes.find(:all, :limit => 1000, :order => 'path').collect do |change|
+      case change.action
+      when 'A'
+        # Detects moved/copied files
+        if !change.from_path.blank?
+          change.action = @changeset.changes.detect {|c| c.action == 'D' && c.path == change.from_path} ? 'R' : 'C'
+        end
+        change
+      when 'D'
+        @changeset.changes.detect {|c| c.from_path == change.path} ? nil : change
+      else
+        change
+      end
+    end.compact
+    
+    tree = { }
+    changes.each do |change|
+      p = tree
+      dirs = change.path.to_s.split('/').select {|d| !d.blank?}
+      dirs.each do |dir|
+        p[:s] ||= {}
+        p = p[:s]
+        p[dir] ||= {}
+        p = p[dir]
+      end
+      p[:c] = change
+    end
+    
+    render_changes_tree(tree[:s])
+  end
+  
+  def render_changes_tree(tree)
+    return '' if tree.nil?
+    
+    output = ''
+    output << '<ul>'
+    tree.keys.sort.each do |file|
+      s = !tree[file][:s].nil?
+      c = tree[file][:c]
+      
+      style = 'change'
+      style << ' folder' if s
+      style << " change-#{c.action}" if c
+      
+      text = h(file)
+      unless c.nil?
+        path_param = to_path_param(@repository.relative_path(c.path))
+        text = link_to(text, :controller => 'repositories',
+                             :action => 'entry',
+                             :id => @project,
+                             :path => path_param,
+                             :rev => @changeset.revision) unless s || c.action == 'D'
+        text << " - #{c.revision}" unless c.revision.blank?
+        text << ' (' + link_to('diff', :controller => 'repositories',
+                                       :action => 'diff',
+                                       :id => @project,
+                                       :path => path_param,
+                                       :rev => @changeset.revision) + ') ' if c.action == 'M'
+        text << ' ' + content_tag('span', c.from_path, :class => 'copied-from') unless c.from_path.blank?
+      end
+      output << "<li class='#{style}'>#{text}</li>"
+      output << render_changes_tree(tree[file][:s]) if s
+    end
+    output << '</ul>'
+    output
+  end
+  
   def to_utf8(str)
     return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
     @encodings ||= Setting.repositories_encodings.split(',').collect(&:strip)
index db9351666f0960482d58ad2bad999c3aed227661..1b486966eb2c64f78a9bdf097f55416f2725986a 100644 (file)
@@ -19,6 +19,6 @@
 <h3><%= l(:label_query_plural) %></h3>
 
 <% sidebar_queries.each do |query| -%>
-<%= link_to query.name, :query_id => query %><br />
+<%= link_to query.name, :controller => 'issues', :action => 'index', :project_id => @project, :query_id => query %><br />
 <% end -%>
 <% end -%>
index 80ac3bd1a26b44465d3fccd72c15308ff4cbb638..123fccf26160ce8decac197c247aacbd0b1bdad9 100644 (file)
 <% end %>
 
 <h3><%= l(:label_attachment_plural) %></h3>
-<div style="float:right;">
-<div class="square action_A"></div> <div style="float:left;"><%= l(:label_added) %>&nbsp;</div>
-<div class="square action_M"></div> <div style="float:left;"><%= l(:label_modified) %>&nbsp;</div>
-<div class="square action_D"></div> <div style="float:left;"><%= l(:label_deleted) %>&nbsp;</div>
-</div>
+<ul id="changes-legend">
+<li class="change change-A"><%= l(:label_added) %></li>
+<li class="change change-M"><%= l(:label_modified) %></li>
+<li class="change change-C"><%= l(:label_copied) %></li>
+<li class="change change-R"><%= l(:label_renamed) %></li>
+<li class="change change-D"><%= l(:label_deleted) %></li>
+</ul>
+
 <p><%= link_to(l(:label_view_diff), :action => 'diff', :id => @project, :path => "", :rev => @changeset.revision) if @changeset.changes.any? %></p>
-<table class="list">
-<tbody>
-<% @changes.each do |change| %>
-<tr class="<%= cycle 'odd', 'even' %>">
-<td><div class="square action_<%= change.action %>"></div>
-<% if change.action == "D" -%>
-    <%= change.path -%>
-<% else -%>
-    <%= link_to change.path, :action => 'entry', :id => @project, :path => to_path_param(change.relative_path), :rev => @changeset.revision -%>
-<% end -%>
-<%= "(#{change.revision})" unless change.revision.blank?  %></td>
-<td align="right">
-<% if change.action == "M" %>
-<%= link_to l(:label_view_diff), :action => 'diff', :id => @project, :path => to_path_param(change.relative_path), :rev => @changeset.revision %>
-<% end %>
-</td>
-</tr>
-<% end %>
-</tbody>
-</table>
-<p class="pagination"><%= pagination_links_full @changes_pages %></p>
+
+<div class="changeset-changes">
+<%= render_changeset_changes %>
+</div>
 
 <% content_for :header_tags do %>
 <%= stylesheet_link_tag "scm" %>
index 96e975187a89efb021bbde32ef51133915553cc0..0f8020c767bf001875fa5b0b765dab0a42df8349 100644 (file)
@@ -1,13 +1,51 @@
 #!/usr/bin/ruby
 
-# rdm-mailhandler
+# == Synopsis
+#
 # Reads an email from standard input and forward it to a Redmine server
-# Can be used from a remote mail server
+# through a HTTP request.
+#
+# == Usage
+#
+#    rdm-mailhandler [options] --url=<Redmine URL> --key=<API key>
+#
+# == Arguments
+# 
+#   -u, --url                      URL of the Redmine server
+#   -k, --key                      Redmine API key
+#   
+# General options:
+#   -h, --help                     show this help
+#   -v, --verbose                  show extra information
+#   -V, --version                  show version information and exit
+# 
+# Issue attributes control options:
+#   -p, --project=PROJECT          identifier of the target project
+#   -t, --tracker=TRACKER          name of the target tracker
+#       --category=CATEGORY        name of the target category
+#       --priority=PRIORITY        name of the target priority
+#   -o, --allow-override=ATTRS     allow email content to override attributes
+#                                  specified by previous options
+#                                  ATTRS is a comma separated list of attributes
+#       
+# == Examples
+# No project specified. Emails MUST contain the 'Project' keyword:
+# 
+#   rdm-mailhandler --url http://redmine.domain.foo --key secret
+#   
+# Fixed project and default tracker specified, but emails can override
+# both tracker and priority attributes using keywords:
+# 
+#   rdm-mailhandler --url https://domain.foo/redmine --key secret \\
+#                   --project foo \\
+#                   --tracker bug \\
+#                   --allow-override tracker,priority
 
 require 'net/http'
 require 'net/https'
 require 'uri'
 require 'getoptlong'
+require 'rdoc/usage'
 
 module Net
   class HTTPS < HTTP
@@ -31,15 +69,15 @@ class RedmineMailHandler
     self.issue_attributes = {}
     
     opts = GetoptLong.new(
-      [ '--help', '-h', GetoptLong::NO_ARGUMENT ],
-      [ '--version', '-V', GetoptLong::NO_ARGUMENT ],
-      [ '--verbose', '-v', GetoptLong::NO_ARGUMENT ],
-      [ '--url', '-u', GetoptLong::REQUIRED_ARGUMENT ],
-      [ '--key', '-k', GetoptLong::REQUIRED_ARGUMENT],
-      [ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
-      [ '--tracker', '-t', GetoptLong::REQUIRED_ARGUMENT],
-      [ '--category', GetoptLong::REQUIRED_ARGUMENT],
-      [ '--priority', GetoptLong::REQUIRED_ARGUMENT],
+      [ '--help',           '-h', GetoptLong::NO_ARGUMENT ],
+      [ '--version',        '-V', GetoptLong::NO_ARGUMENT ],
+      [ '--verbose',        '-v', GetoptLong::NO_ARGUMENT ],
+      [ '--url',            '-u', GetoptLong::REQUIRED_ARGUMENT ],
+      [ '--key',            '-k', GetoptLong::REQUIRED_ARGUMENT],
+      [ '--project',        '-p', GetoptLong::REQUIRED_ARGUMENT ],
+      [ '--tracker',        '-t', GetoptLong::REQUIRED_ARGUMENT],
+      [ '--category',             GetoptLong::REQUIRED_ARGUMENT],
+      [ '--priority',             GetoptLong::REQUIRED_ARGUMENT],
       [ '--allow-override', '-o', GetoptLong::REQUIRED_ARGUMENT]
     )
 
@@ -62,7 +100,7 @@ class RedmineMailHandler
       end
     end
     
-    usage if url.nil?
+    RDoc.usage if url.nil?
   end
   
   def submit(email)
@@ -74,48 +112,14 @@ class RedmineMailHandler
     debug "Posting to #{uri}..."
     response = Net::HTTPS.post_form(URI.parse(uri), data)
     debug "Response received: #{response.code}"
-    response.code == 201 ? 0 : 1
+    
+    puts "Request was denied by your Redmine server. " + 
+         "Please, make sure that 'WS for incoming emails' is enabled in application settings and that you provided the correct API key." if response.code == '403'
+    response.code == '201' ? 0 : 1
   end
   
   private
   
-  def usage
-    puts  <<-USAGE
-Usage: rdm-mailhandler [options] --url=<Redmine URL> --key=<API key>
-Reads an email from standard input and forward it to a Redmine server
-
-Required:
-  -u, --url                      URL of the Redmine server
-  -k, --key                      Redmine API key
-  
-General options:
-  -h, --help                     show this help
-  -v, --verbose                  show extra information
-  -V, --version                  show version information and exit
-
-Issue attributes control options:
-  -p, --project=PROJECT          identifier of the target project
-  -t, --tracker=TRACKER          name of the target tracker
-      --category=CATEGORY        name of the target category
-      --priority=PRIORITY        name of the target priority
-  -o, --allow-override=ATTRS     allow email content to override attributes
-                                 specified by previous options
-                                 ATTRS is a comma separated list of attributes
-      
-Examples:
-  # No project specified. Emails MUST contain the 'Project' keyword:
-  rdm-mailhandler --url http://redmine.domain.foo --key secret
-  
-  # Fixed project and default tracker specified, but emails can override
-  # both tracker and priority attributes:
-  rdm-mailhandler --url https://domain.foo/redmine --key secret \\
-                  --project foo \\
-                  --tracker bug \\
-                  --allow-override tracker,priority
-USAGE
-    exit
-  end
-  
   def debug(msg)
     puts msg if verbose
   end
index 76804d65066ec9393e6a82ffcc0d09ae6cb8b50e..0e1c757b2d66368f58bd8392acc52799d46b45bb 100755 (executable)
@@ -2,15 +2,15 @@
 
 # == Synopsis
 #
-# reposman: manages your svn repositories with Redmine
+# reposman: manages your repositories with Redmine
 #
 # == Usage
 #
 #    reposman [OPTIONS...] -s [DIR] -r [HOST]
 #     
 #  Examples:
-#    reposman --svn-dir=/var/svn --redmine-host=redmine.example.net
-#    reposman -s /var/svn -r redmine.example.net -u http://svn.example.net
+#    reposman --svn-dir=/var/svn --redmine-host=redmine.example.net --scm subversion
+#    reposman -s /var/git -r redmine.example.net -u http://svn.example.net --scm git
 #
 # == Arguments (mandatory)
 #
 #
 #   -o, --owner=OWNER         owner of the repository. using the rails login
 #                             allow user to browse the repository within
-#                             Redmine even for private project
+#                             Redmine even for private project. If you want to share repositories
+#                             through Redmine.pm, you need to use the apache owner.
+#   --scm=SCM                 the kind of SCM repository you want to create (and register) in
+#                             Redmine (default: Subversion). reposman is able to create Git 
+#                             and Subversion repositories. For all other kind (Bazaar,
+#                             Darcs, Filesystem, Mercurial) you must specify a --command option
 #   -u, --url=URL             the base url Redmine will use to access your
 #                             repositories. This option is used to automatically
 #                             register the repositories in Redmine. The project
 #                             the repositories in Redmine
 #   -c, --command=COMMAND     use this command instead of "svnadmin create" to
 #                             create a repository. This option can be used to
-#                             create non-subversion repositories
-#       --scm                 SCM vendor used to register the repository in
-#                             Redmine (default: Subversion). Can be one of the
-#                             other supported SCM: Bazaar, Darcs, Filesystem,
-#                             Git, Mercurial (case sensitive).
-#                             This option should be used when both options --url
-#                             and --command are used.
+#                             create repositories other than subversion and git kind.
+#                             This command override the default creation for git and subversion.
 #   -f, --force               force repository creation even if the project
 #                             repository is already declared in Redmine
 #   -t, --test                only show what should be done
 #   -v, --verbose             verbose
 #   -V, --version             print version and exit
 #   -q, --quiet               no log
+#
+# == References
+# 
+# You can find more information on the redmine's wiki : http://www.redmine.org/wiki/redmine/HowTos
+
 
 require 'getoptlong'
 require 'rdoc/usage'
@@ -82,16 +87,38 @@ $svn_owner    = 'root'
 $use_groupid  = true
 $svn_url      = false
 $test         = false
-$command      = "svnadmin create"
 $force        = false
 $scm          = 'Subversion'
 
 def log(text,level=0, exit=false)
-  return if $quiet or level > $verbose
-  puts text
+  puts text unless $quiet or level > $verbose
   exit 1 if exit
 end
 
+def system_or_raise(command)
+  raise "\"#{command}\" failed" unless system command
+end
+
+module SCM
+
+  module Subversion
+    def self.create(path)
+      system_or_raise "svnadmin create #{path}"
+    end
+  end
+
+  module Git
+    def self.create(path)
+      Dir.mkdir path
+      Dir.chdir(path) do
+        system_or_raise "git --bare init --shared"
+        system_or_raise "git-update-server-info"
+      end
+    end
+  end
+
+end
+
 begin
   opts.each do |opt, arg|
     case opt
@@ -99,7 +126,7 @@ begin
     when '--redmine-host';   $redmine_host = arg.dup
     when '--owner';          $svn_owner    = arg.dup; $use_groupid = false;
     when '--url';            $svn_url      = arg.dup
-    when '--scm';            $scm          = arg.dup; log("Invalid SCM: #{$scm}", 0, true) unless SUPPORTED_SCM.include?($scm)
+    when '--scm';            $scm          = arg.dup.capitalize; log("Invalid SCM: #{$scm}", 0, true) unless SUPPORTED_SCM.include?($scm)
     when '--command';        $command =      arg.dup
     when '--verbose';        $verbose += 1
     when '--test';           $test = true
@@ -117,12 +144,15 @@ if $test
   log("running in test mode")
 end
 
-# Make sure command is overridden if SCM vendor is not Subversion
-if $scm != 'Subversion' && $command == 'svnadmin create'
-  log("Please use --command option to specify how to create a #{$scm} repository.", 0, true)
+# Make sure command is overridden if SCM vendor is not handled internally (for the moment Subversion and Git)
+if $command.nil?
+  begin
+    scm_module = SCM.const_get($scm)
+  rescue
+    log("Please use --command option to specify how to create a #{$scm} repository.", 0, true)
+  end
 end
 
-
 $svn_url += "/" if $svn_url and not $svn_url.match(/\/$/)
 
 if ($redmine_host.empty? or $repos_base.empty?)
@@ -231,8 +261,11 @@ projects.each do |project|
 
     begin
       set_owner_and_rights(project, repos_path) do
-        command = "#{$command} #{repos_path}"
-        raise "#{command} failed" unless system( command  )
+        if scm_module.nil?
+          system_or_raise "#{$command} #{repos_path}"
+        else
+          scm_module.create(repos_path)
+        end
       end
     rescue => e
       log("\tunable to create #{repos_path} : #{e}\n")
index c5c4e0e22ee83d134fbaecad4022c8c00e884c27..e072ad93b6fd2130ff05bdb01185d0905cb79499 100644 (file)
@@ -638,3 +638,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
diff --git a/lang/ca.yml b/lang/ca.yml
new file mode 100644 (file)
index 0000000..895f213
--- /dev/null
@@ -0,0 +1,644 @@
+_gloc_rule_default: '|n| n==1 ? "" : "_plural" '
+
+actionview_datehelper_select_day_prefix:
+actionview_datehelper_select_month_names: Gener,Febrer,Març,Abril,Maig,Juny,Juliol,Agost,Setembre,Octubre,Novembre,Desembre
+actionview_datehelper_select_month_names_abbr: Gen,Feb,Mar,Abr,Mai,Jun,Jul,Ago,Set,Oct,Nov,Dec
+actionview_datehelper_select_month_prefix:
+actionview_datehelper_select_year_prefix:
+actionview_datehelper_time_in_words_day: 1 dia
+actionview_datehelper_time_in_words_day_plural: %d dies
+actionview_datehelper_time_in_words_hour_about: aproximadament una hora
+actionview_datehelper_time_in_words_hour_about_plural: aproximadament %d hores
+actionview_datehelper_time_in_words_hour_about_single: aproximadament una hora
+actionview_datehelper_time_in_words_minute: 1 minut
+actionview_datehelper_time_in_words_minute_half: mig minut
+actionview_datehelper_time_in_words_minute_less_than: "menys d'un minut"
+actionview_datehelper_time_in_words_minute_plural: %d minuts
+actionview_datehelper_time_in_words_minute_single: 1 minut
+actionview_datehelper_time_in_words_second_less_than: "menys d'un segon"
+actionview_datehelper_time_in_words_second_less_than_plural: menys de %d segons
+actionview_instancetag_blank_option: Seleccioneu
+
+activerecord_error_inclusion: no està inclòs a la llista
+activerecord_error_exclusion: està reservat
+activerecord_error_invalid: no és vàlid
+activerecord_error_confirmation: la confirmació no coincideix
+activerecord_error_accepted: "s'ha d'acceptar"
+activerecord_error_empty: no pot estar buit
+activerecord_error_blank: no pot estar en blanc
+activerecord_error_too_long: és massa llarg
+activerecord_error_too_short: és massa curt
+activerecord_error_wrong_length: la longitud és incorrecta
+activerecord_error_taken: "ja s'està utilitzant"
+activerecord_error_not_a_number: no és un número
+activerecord_error_not_a_date: no és una data vàlida
+activerecord_error_greater_than_start_date: ha de ser superior que la data inicial
+activerecord_error_not_same_project: no pertany al mateix projecte
+activerecord_error_circular_dependency: Aquesta relació crearia una dependència circular
+
+general_fmt_age: %d any
+general_fmt_age_plural: %d anys
+general_fmt_date: %%d/%%m/%%Y
+general_fmt_datetime: %%d/%%m/%%Y %%H:%%M
+general_fmt_datetime_short: %%d/%%m %%H:%%M
+general_fmt_time: %%H:%%M
+general_text_No: 'No'
+general_text_Yes: 'Si'
+general_text_no: 'no'
+general_text_yes: 'si'
+general_lang_name: 'Català'
+general_csv_separator: ';'
+general_csv_decimal_separator: ','
+general_csv_encoding: ISO-8859-15
+general_pdf_encoding: ISO-8859-15
+general_day_names: Dilluns,Dimarts,Dimecres,Dijous,Divendres,Dissabte,Diumenge
+general_first_day_of_week: '1'
+
+notice_account_updated: "El compte s'ha actualitzat correctament."
+notice_account_invalid_creditentials: Usuari o contrasenya invàlid
+notice_account_password_updated: "La contrasenya s'ha modificat correctament."
+notice_account_wrong_password: Contrasenya incorrecta
+notice_account_register_done: "El compte s'ha creat correctament. Per a activar el compte, feu clic en l'enllaç que us han enviat per correu electrònic."
+notice_account_unknown_email: Usuari desconegut.
+notice_can_t_change_password: "Aquest compte utilitza una font d'autenticació externa. No és possible canviar la contrasenya."
+notice_account_lost_email_sent: "S'ha enviat un correu electrònic amb instruccions per a seleccionar una contrasenya nova."
+notice_account_activated: "El compte s'ha activat. Ara podeu entrar."
+notice_successful_create: "S'ha creat correctament."
+notice_successful_update: "S'ha modificat correctament."
+notice_successful_delete: "S'ha suprimit correctament."
+notice_successful_connection: "S'ha connectat correctament."
+notice_file_not_found: "La pàgina a la que intenteu accedir no existeix o s'ha suprimit."
+notice_locking_conflict: Un altre usuari ha actualitzat les dades.
+notice_not_authorized: No teniu permís per a accedir a aquesta pàgina.
+notice_email_sent: "S'ha enviat un correu electrònic a %s"
+notice_email_error: "S'ha produït un error en enviar el correu (%s)"
+notice_feeds_access_key_reseted: "S'ha reiniciat la clau d'accés del RSS."
+notice_failed_to_save_issues: "No s'han pogut desar %s assumptes de %d seleccionats: %s."
+notice_no_issue_selected: "No s'ha seleccionat cap assumpte. Activeu els assumptes que voleu editar."
+notice_account_pending: "S'ha creat el compte i ara està pendent de l'aprovació de l'administrador."
+notice_default_data_loaded: "S'ha carregat correctament la configuració predeterminada."
+
+error_can_t_load_default_data: "No s'ha pogut carregar la configuració predeterminada: %s" 
+error_scm_not_found: "No s'ha trobat l'entrada o la revisió en el dipòsit."
+error_scm_command_failed: "S'ha produït un error en intentar accedir al dipòsit: %s"
+error_scm_annotate: "L'entrada no existeix o no s'ha pogut anotar."
+error_issue_not_found_in_project: "No s'ha trobat l'assumpte o no pertany a aquest projecte"
+
+mail_subject_lost_password: Contrasenya de %s
+mail_body_lost_password: "Per a canviar la contrasenya, feu clic en l'enllaç següent:"
+mail_subject_register: Activació del compte de %s
+mail_body_register: "Per a activar el compte, feu clic en l'enllaç següent:"
+mail_body_account_information_external: Podeu utilitzar el compte «%s» per a entrar.
+mail_body_account_information: Informació del compte
+mail_subject_account_activation_request: "Sol·licitud d'activació del compte de %s"
+mail_body_account_activation_request: "S'ha registrat un usuari nou (%s). El seu compte està pendent d'aprovació:"
+mail_subject_reminder: "%d assumptes venceran els següents %d dies"
+mail_body_reminder: "%d assumptes que teniu assignades venceran els següents %d dies:"
+
+gui_validation_error: 1 error
+gui_validation_error_plural: %d errors
+
+field_name: Nom
+field_description: Descripció
+field_summary: Resum
+field_is_required: Necessari
+field_firstname: Nom
+field_lastname: Cognom
+field_mail: Correu electrònic 
+field_filename: Fitxer
+field_filesize: Mida
+field_downloads: Baixades
+field_author: Autor
+field_created_on: Creat
+field_updated_on: Actualitzat
+field_field_format: Format
+field_is_for_all: Per a tots els projectes
+field_possible_values: Valores possibles
+field_regexp: Expressió regular
+field_min_length: Longitud mínima
+field_max_length: Longitud màxima
+field_value: Valor
+field_category: Categoria
+field_title: Títol
+field_project: Projecte
+field_issue: Assumpte
+field_status: Estat
+field_notes: Notes
+field_is_closed: Assumpte tancat
+field_is_default: Estat predeterminat
+field_tracker: Seguidor
+field_subject: Tema
+field_due_date: Data de venciment
+field_assigned_to: Assignat a
+field_priority: Prioritat
+field_fixed_version: Versió objectiu
+field_user: Usuari
+field_role: Rol
+field_homepage: Pàgina web
+field_is_public: Públic
+field_parent: Subprojecte de
+field_is_in_chlog: Assumptes mostrats en el registre de canvis
+field_is_in_roadmap: Assumptes mostrats en la planificació
+field_login: Entrada
+field_mail_notification: Notificacions per correu electrònic
+field_admin: Administrador
+field_last_login_on: Última connexió
+field_language: Idioma
+field_effective_date: Data
+field_password: Contrasenya
+field_new_password: Contrasenya nova
+field_password_confirmation: Confirmació
+field_version: Versió
+field_type: Tipus
+field_host: Ordinador
+field_port: Port
+field_account: Compte
+field_base_dn: Base DN
+field_attr_login: "Atribut d'entrada"
+field_attr_firstname: Atribut del nom
+field_attr_lastname: Atribut del cognom
+field_attr_mail: Atribut del correu electrònic
+field_onthefly: "Creació de l'usuari «al vol»"
+field_start_date: Inici
+field_done_ratio: %% realitzat
+field_auth_source: "Mode d'autenticació"
+field_hide_mail: "Oculta l'adreça de correu electrònic"
+field_comment: Comentari
+field_url: URL
+field_start_page: Pàgina inicial
+field_subproject: Subprojecte
+field_hours: Hores
+field_activity: Activitat
+field_spent_on: Data
+field_identifier: Identificador
+field_is_filter: "S'ha utilitzat com a filtre"
+field_issue_to_id: Assumpte relacionat
+field_delay: Retard
+field_assignable: Es poden assignar assumptes a aquest rol
+field_redirect_existing_links: Redirigeix els enllaços existents
+field_estimated_hours: Temps previst
+field_column_names: Columnes
+field_time_zone: Zona horària
+field_searchable: Es pot cercar
+field_default_value: Valor predeterminat
+field_comments_sorting: Mostra els comentaris
+field_parent_title: Pàgina pare
+
+setting_app_title: "Títol de l'aplicació"
+setting_app_subtitle: "Subtítol de l'aplicació"
+setting_welcome_text: Text de benvinguda
+setting_default_language: Idioma predeterminat
+setting_login_required: Es necessita autenticació
+setting_self_registration: Registre automàtic
+setting_attachment_max_size: Mida màxima dels adjunts
+setting_issues_export_limit: "Límit d'exportació d'assumptes"
+setting_mail_from: "Adreça de correu electrònic d'emissió"
+setting_bcc_recipients: Vincula els destinataris de les còpies amb carbó (bcc)
+setting_host_name: "Nom de l'ordinador"
+setting_text_formatting: Format del text
+setting_wiki_compression: "Comprimeix l'historial del wiki"
+setting_feeds_limit: Límit de contingut del canal
+setting_default_projects_public: Els projectes nous són públics per defecte
+setting_autofetch_changesets: Omple automàticament les publicacions
+setting_sys_api_enabled: Habilita el WS per a la gestió del dipòsit
+setting_commit_ref_keywords: Paraules claus per a la referència
+setting_commit_fix_keywords: Paraules claus per a la correcció
+setting_autologin: Entrada automàtica
+setting_date_format: Format de la data
+setting_time_format: Format de hora
+setting_cross_project_issue_relations: "Permet les relacions d'assumptes entre projectes"
+setting_issue_list_default_columns: "Columnes mostrades per defecte en la llista d'assumptes"
+setting_repositories_encodings: Codificacions del dipòsit
+setting_emails_footer: Peu dels correus electrònics
+setting_protocol: Protocol
+setting_per_page_options: Opcions dels objectes per pàgina
+setting_user_format: "Format de com mostrar l'usuari"
+setting_activity_days_default: "Dies a mostrar l'activitat del projecte"
+setting_display_subprojects_issues: "Mostra els assumptes d'un subprojecte en el projecte pare per defecte"
+setting_enabled_scm: "Habilita l'SCM"
+setting_mail_handler_api_enabled: "Habilita el WS per correus electrònics d'entrada"
+setting_mail_handler_api_key: Clau API
+
+project_module_issue_tracking: "Seguidor d'assumptes"
+project_module_time_tracking: Seguidor de temps
+project_module_news: Noticies
+project_module_documents: Documents
+project_module_files: Fitxers
+project_module_wiki: Wiki
+project_module_repository: Dipòsit
+project_module_boards: Taulers
+
+label_user: Usuari
+label_user_plural: Usuaris
+label_user_new: Usuari nou
+label_project: Projecte
+label_project_new: Projecte nou
+label_project_plural: Projectes
+label_project_all: Tots els projectes
+label_project_latest: Els últims projectes
+label_issue: Assumpte
+label_issue_new: Assumpte nou
+label_issue_plural: Assumptes
+label_issue_view_all: Visualitza tots els assumptes
+label_issues_by: Assumptes per %s
+label_issue_added: Assumpte afegit
+label_issue_updated: Assumpte actualitzat
+label_document: Document
+label_document_new: Document nou
+label_document_plural: Documents
+label_document_added: Document afegit
+label_role: Rol
+label_role_plural: Rols
+label_role_new: Rol nou
+label_role_and_permissions: Rols i permisos
+label_member: Membre
+label_member_new: Membre nou
+label_member_plural: Membres
+label_tracker: Seguidor
+label_tracker_plural: Seguidors
+label_tracker_new: Seguidor nou
+label_workflow: Flux de treball
+label_issue_status: "Estat de l'assumpte"
+label_issue_status_plural: "Estats de l'assumpte"
+label_issue_status_new: Estat nou
+label_issue_category: "Categoria de l'assumpte"
+label_issue_category_plural: "Categories de l'assumpte"
+label_issue_category_new: Categoria nova
+label_custom_field: Camp personalitzat
+label_custom_field_plural: Camps personalitzats
+label_custom_field_new: Camp personalitzat nou
+label_enumerations: Enumeracions
+label_enumeration_new: Valor nou
+label_information: Informació
+label_information_plural: Informació
+label_please_login: Entreu
+label_register: Registre
+label_password_lost: Contrasenya perduda
+label_home: Inici
+label_my_page: La meva pàgina
+label_my_account: El meu compte
+label_my_projects: Els meus projectes
+label_administration: Administració
+label_login: Entra
+label_logout: Surt
+label_help: Ajuda
+label_reported_issues: Assumptes informats
+label_assigned_to_me_issues: Assumptes assignats a mi
+label_last_login: Última connexió
+label_last_updates: Última actualització
+label_last_updates_plural: %d última actualització
+label_registered_on: Informat el
+label_activity: Activitat
+label_overall_activity: Activitat global
+label_new: Nou
+label_logged_as: Heu entrat com a
+label_environment: Entorn
+label_authentication: Autenticació
+label_auth_source: "Mode d'autenticació"
+label_auth_source_new: "Mode d'autenticació nou"
+label_auth_source_plural: "Modes d'autenticació"
+label_subproject_plural: Subprojectes
+label_and_its_subprojects: %s i els seus subprojectes
+label_min_max_length: Longitud mín - max
+label_list: Llist
+label_date: Data
+label_integer: Enter
+label_float: Flotant
+label_boolean: Booleà
+label_string: Text
+label_text: Text llarg
+label_attribute: Atribut
+label_attribute_plural: Atributs
+label_download: %d baixada
+label_download_plural: %d baixades
+label_no_data: Sense dades a mostrar
+label_change_status: "Canvia l'estat"
+label_history: Historial
+label_attachment: Fitxer
+label_attachment_new: Fitxer nou
+label_attachment_delete: Suprimeix el fitxer
+label_attachment_plural: Fitxers
+label_file_added: Fitxer afegit
+label_report: Informe
+label_report_plural: Informes
+label_news: Noticies
+label_news_new: Afegeix noticies
+label_news_plural: Noticies
+label_news_latest: Últimes noticies
+label_news_view_all: Visualitza totes les noticies
+label_news_added: Noticies afegides
+label_change_log: Registre de canvis
+label_settings: Paràmetres
+label_overview: Resum
+label_version: Versió
+label_version_new: Versió nova
+label_version_plural: Versions
+label_confirmation: Confirmació
+label_export_to: 'També disponible a:'
+label_read: Llegeix...
+label_public_projects: Projectes públics
+label_open_issues: obert
+label_open_issues_plural: oberts
+label_closed_issues: tancat
+label_closed_issues_plural: tancats
+label_total: Total
+label_permissions: Permisos
+label_current_status: Estat actual
+label_new_statuses_allowed: Nous estats autoritzats
+label_all: tots
+label_none: cap
+label_nobody: ningú
+label_next: Següent
+label_previous: Anterior
+label_used_by: Utilitzat per
+label_details: Detalls
+label_add_note: Afegeix una nota
+label_per_page: Per pàgina
+label_calendar: Calendari
+label_months_from: mesos des de
+label_gantt: Gantt
+label_internal: Intern
+label_last_changes: últims %d canvis
+label_change_view_all: Visualitza tots els canvis
+label_personalize_page: Personalitza aquesta pàgina
+label_comment: Comentari
+label_comment_plural: Comentaris
+label_comment_add: Afegeix un comentari
+label_comment_added: Comentari afegit
+label_comment_delete: Suprimeix comentaris
+label_query: Consulta personalitzada
+label_query_plural: Consultes personalitzades
+label_query_new: Consulta nova
+label_filter_add: Afegeix un filtre
+label_filter_plural: Filtres
+label_equals: és
+label_not_equals: no és
+label_in_less_than: en menys de
+label_in_more_than: en més de
+label_in: en
+label_today: avui
+label_all_time: tot el temps
+label_yesterday: ahir
+label_this_week: aquesta setmana
+label_last_week: "l'última setmana"
+label_last_n_days: els últims %d dies
+label_this_month: aquest més
+label_last_month: "l'últim més"
+label_this_year: aquest any
+label_date_range: Abast de les dates
+label_less_than_ago: fa menys de
+label_more_than_ago: fa més de 
+label_ago: fa
+label_contains: conté
+label_not_contains: no conté
+label_day_plural: dies
+label_repository: Dipòsit
+label_repository_plural: Dipòsits
+label_browse: Navega
+label_modification: %d canvi
+label_modification_plural: %d canvis
+label_revision: Revisió
+label_revision_plural: Revisions
+label_associated_revisions: Revisions associades
+label_added: afegit
+label_modified: modificat
+label_deleted: suprimit
+label_latest_revision: Última revisió
+label_latest_revision_plural: Últimes revisions
+label_view_revisions: Visualitza les revisions
+label_max_size: Mida màxima
+label_on: 'de'
+label_sort_highest: Mou a la part superior
+label_sort_higher: Mou cap amunt
+label_sort_lower: Mou cap avall
+label_sort_lowest: Mou a la part inferior
+label_roadmap: Planificació
+label_roadmap_due_in: Venç en 
+label_roadmap_overdue: %s tard
+label_roadmap_no_issues: No hi ha assumptes per a aquesta versió
+label_search: Cerca
+label_result_plural: Resultats
+label_all_words: Totes les paraules
+label_wiki: Wiki
+label_wiki_edit: Edició wiki
+label_wiki_edit_plural: Edicions wiki
+label_wiki_page: Pàgina wiki
+label_wiki_page_plural: Pàgines wiki
+label_index_by_title: Índex per títol
+label_index_by_date: Índex per data
+label_current_version: Versió actual
+label_preview: Previsualització
+label_feed_plural: Canals
+label_changes_details: Detalls de tots els canvis
+label_issue_tracking: "Seguiment d'assumptes"
+label_spent_time: Temps invertit
+label_f_hour: %.2f hora
+label_f_hour_plural: %.2f hores
+label_time_tracking: Temps de seguiment
+label_change_plural: Canvis
+label_statistics: Estadístiques
+label_commits_per_month: Publicacions per mes
+label_commits_per_author: Publicacions per autor
+label_view_diff: Visualitza les diferències
+label_diff_inline: en línia
+label_diff_side_by_side: costat per costat
+label_options: Opcions
+label_copy_workflow_from: Copia el flux de treball des de
+label_permissions_report: Informe de permisos
+label_watched_issues: Assumptes vigilats
+label_related_issues: Assumptes relacionats
+label_applied_status: Estat aplicat
+label_loading: "S'està carregant..."
+label_relation_new: Relació nova
+label_relation_delete: Suprimeix la relació
+label_relates_to: relacionat amb
+label_duplicates: duplicats
+label_duplicated_by: duplicat per
+label_blocks: bloqueja
+label_blocked_by: bloquejats per
+label_precedes: anterior a
+label_follows: posterior a
+label_end_to_start: final al començament
+label_end_to_end: final al final
+label_start_to_start: començament al començament
+label_start_to_end: començament al final
+label_stay_logged_in: "Manté l'entrada en"
+label_disabled: inhabilitat
+label_show_completed_versions: Mostra les versions completes
+label_me: jo mateix
+label_board: Fòrum
+label_board_new: Fòrum nou
+label_board_plural: Fòrums
+label_topic_plural: Temes
+label_message_plural: Missatges
+label_message_last: Últim missatge
+label_message_new: Missatge nou
+label_message_posted: Missatge afegit
+label_reply_plural: Respostes
+label_send_information: "Envia la informació del compte a l'usuari"
+label_year: Any
+label_month: Mes
+label_week: Setmana
+label_date_from: Des de
+label_date_to: A
+label_language_based: "Basat en l'idioma de l'usuari"
+label_sort_by: Ordena per %s
+label_send_test_email: Envia un correu electrònic de prova
+label_feeds_access_key_created_on: "Clau d'accés del RSS creada fa %s"
+label_module_plural: Mòduls
+label_added_time_by: Afegit per %s fa %s
+label_updated_time: Actualitzat fa %s
+label_jump_to_a_project: Salta al projecte...
+label_file_plural: Fitxers
+label_changeset_plural: Conjunt de canvis
+label_default_columns: Columnes predeterminades
+label_no_change_option: (sense canvis)
+label_bulk_edit_selected_issues: Edita en bloc els assumptes seleccionats
+label_theme: Tema
+label_default: Predeterminat
+label_search_titles_only: Cerca només en els títols
+label_user_mail_option_all: "Per qualsevol esdeveniment en tots els meus projectes"
+label_user_mail_option_selected: "Per qualsevol esdeveniment en els projectes seleccionats..."
+label_user_mail_option_none: "Només per les coses que vigilo o hi estic implicat"
+label_user_mail_no_self_notified: "No vull ser notificat pels canvis que faig jo mateix"
+label_registration_activation_by_email: activació del compte per correu electrònic
+label_registration_manual_activation: activació del compte manual
+label_registration_automatic_activation: activació del compte automàtica
+label_display_per_page: 'Per pàgina: %s'
+label_age: Edat
+label_change_properties: Canvia les propietats
+label_general: General
+label_more: Més
+label_scm: SCM
+label_plugins: Connectors
+label_ldap_authentication: Autenticació LDAP
+label_downloads_abbr: Baixades
+label_optional_description: Descripció opcional
+label_add_another_file: Afegeix un altre fitxer
+label_preferences: Preferències
+label_chronological_order: En ordre cronològic
+label_reverse_chronological_order: En ordre cronològic invers
+label_planning: Planificació
+label_incoming_emails: "Correu electrònics d'entrada"
+label_generate_key: Genera una clau
+label_issue_watchers: Vigilants
+
+button_login: Entra
+button_submit: Tramet
+button_save: Desa
+button_check_all: Activa-ho tot
+button_uncheck_all: Desactiva-ho tot
+button_delete: Suprimeix
+button_create: Crea
+button_test: Test
+button_edit: Edit
+button_add: Afegeix
+button_change: Canvia
+button_apply: Aplica
+button_clear: Neteja
+button_lock: Bloca
+button_unlock: Desbloca
+button_download: Baixa
+button_list: Llista
+button_view: Visualitza
+button_move: Mou
+button_back: Enrere
+button_cancel: Cancel·la
+button_activate: Activa
+button_sort: Ordena
+button_log_time: "Hora d'entrada"
+button_rollback: Torna a aquesta versió
+button_watch: Vigila
+button_unwatch: No vigilis
+button_reply: Resposta
+button_archive: Arxiva
+button_unarchive: Desarxiva
+button_reset: Reinicia
+button_rename: Reanomena
+button_change_password: Canvia la contrasenya
+button_copy: Copia
+button_annotate: Anota
+button_update: Actualitza
+button_configure: Configura
+
+status_active: actiu
+status_registered: informat
+status_locked: bloquejat
+
+text_select_mail_notifications: "Seleccioneu les accions per les quals s'hauria d'enviar una notificació per correu electrònic."
+text_regexp_info: ex. ^[A-Z0-9]+$
+text_min_max_length_info: 0 significa sense restricció
+text_project_destroy_confirmation: Segur que voleu suprimir aquest projecte i les dades relacionades?
+text_subprojects_destroy_warning: "També seran suprimits els seus subprojectes: %s."
+text_workflow_edit: Seleccioneu un rol i un seguidor per a editar el flux de treball
+text_are_you_sure: Segur?
+text_journal_changed: canviat des de %s a %s
+text_journal_set_to: establert a %s
+text_journal_deleted: suprimit
+text_tip_task_begin_day: "tasca que s'inicia aquest dia"
+text_tip_task_end_day: tasca que finalitza aquest dia
+text_tip_task_begin_end_day: "tasca que s'inicia i finalitza aquest dia"
+text_project_identifier_info: "Es permeten lletres en minúscules (a-z), números i guions.<br />Un cop desat, l'identificador no es pot modificar."
+text_caracters_maximum: %d caràcters com a màxim.
+text_caracters_minimum: Com a mínim ha de tenir %d caràcters.
+text_length_between: Longitud entre %d i %d caràcters.
+text_tracker_no_workflow: "No s'ha definit cap flux de treball per a aquest seguidor"
+text_unallowed_characters: Caràcters no permesos
+text_comma_separated: Es permeten valors múltiples (separats per una coma).
+text_issues_ref_in_commit_messages: Referència i soluciona els assumptes en els missatges publicats
+text_issue_added: "L'assumpte %s ha sigut informat per %s."
+text_issue_updated: "L'assumpte %s ha sigut actualitzat per %s."
+text_wiki_destroy_confirmation: Segur que voleu suprimir aquest wiki i tots els seus continguts?
+text_issue_category_destroy_question: Alguns assumptes (%d) estan assignats a aquesta categoria. Què voleu fer?
+text_issue_category_destroy_assignments: Suprimeix les assignacions de la categoria
+text_issue_category_reassign_to: Torna a assignar els assumptes a aquesta categoria
+text_user_mail_option: "Per als projectes no seleccionats, només rebreu notificacions sobre les coses que vigileu o que hi esteu implicat (ex. assumptes que en sou l'autor o hi esteu assignat)."
+text_no_configuration_data: "Encara no s'han configurat els rols, seguidors, estats de l'assumpte i flux de treball.\nÉs altament recomanable que carregueu la configuració predeterminada. Podreu modificar-la un cop carregada."
+text_load_default_configuration: Carrega la configuració predeterminada
+text_status_changed_by_changeset: Aplicat en el conjunt de canvis %s.
+text_issues_destroy_confirmation: "Segur que voleu suprimir els assumptes seleccionats?"
+text_select_project_modules: "Seleccioneu els mòduls a habilitar per a aquest projecte:"
+text_default_administrator_account_changed: "S'ha canviat el compte d'administrador predeterminat"
+text_file_repository_writable: Es pot escriure en el dipòsit de fitxers
+text_rmagick_available: RMagick disponible (opcional)
+text_destroy_time_entries_question: "S'han informat %.02f hores en els assumptes que aneu a suprimir. Què voleu fer?"
+text_destroy_time_entries: Suprimeix les hores informades
+text_assign_time_entries_to_project: Assigna les hores informades al projecte
+text_reassign_time_entries: 'Torna a assignar les hores informades a aquest assumpte:'
+text_user_wrote: '%s va escriure:'
+text_enumeration_destroy_question: '%d objectes estan assignats a aquest valor.'
+text_enumeration_category_reassign_to: 'Torna a assignar-los a aquest valor:'
+text_email_delivery_not_configured: "El lliurament per correu electrònic no està configurat i les notificacions estan inhabilitades.\nConfigureu el servidor SMTP a config/email.yml i reinicieu l'aplicació per habilitar-lo."
+
+default_role_manager: Gestor
+default_role_developper: Desenvolupador
+default_role_reporter: Informador
+default_tracker_bug: Error
+default_tracker_feature: Característica
+default_tracker_support: Suport
+default_issue_status_new: Nou
+default_issue_status_assigned: Assignat
+default_issue_status_resolved: Resolt
+default_issue_status_feedback: Comentaris
+default_issue_status_closed: Tancat
+default_issue_status_rejected: Rebutjat
+default_doc_category_user: "Documentació d'usuari"
+default_doc_category_tech: Documentació tècnica
+default_priority_low: Baixa
+default_priority_normal: Normal
+default_priority_high: Alta
+default_priority_urgent: Urgent
+default_priority_immediate: Immediata
+default_activity_design: Disseny
+default_activity_development: Desenvolupament
+
+enumeration_issue_priorities: Prioritat dels assumptes
+enumeration_doc_categories: Categories del document
+enumeration_activities: Activitats (seguidor de temps)
+button_quote: Quote
+setting_sequential_project_identifiers: Generate sequential project identifiers
+notice_unable_delete_version: Unable to delete version.
+field_comments: Comment
+setting_commit_logs_encoding: Commit messages encoding
+label_renamed: renamed\r
+label_copied: copied\r
index 67cfba0e1c857433b2ea1be5bfbc0655be025ea0..51486aec7f1135c239eca6d1c1d3934a8bf7ae10 100644 (file)
@@ -643,3 +643,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index ce8b8504c318b211c8d2887cc9c5581acdec5d2b..2461d5836514e2a46beb9315586b8408e869020b 100644 (file)
@@ -640,3 +640,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index dd1b74bf9ddb4058a950d2949896d59309e22c23..7ee142528c27d313f2f8578d009efc70d22ff93f 100644 (file)
@@ -639,3 +639,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index 7e8ba9f52ee711d92e741c1a5a3d746dd4267a6a..5ad1e5588fec5789c00df08000ccd56d016aef3d 100644 (file)
@@ -405,6 +405,8 @@ label_revision_plural: Revisions
 label_associated_revisions: Associated revisions
 label_added: added
 label_modified: modified
+label_copied: copied
+label_renamed: renamed
 label_deleted: deleted
 label_latest_revision: Latest revision
 label_latest_revision_plural: Latest revisions
index d8f5417ae42a553e492774a556c534d05daf5f36..320a169fa32b55d8f322872bfb76c3d6f0bf86fb 100644 (file)
@@ -641,3 +641,5 @@ setting_commit_logs_encoding: Codificación de los mensajes de commit
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index b63802e67e2aad9f17ddcace5a22395a84e3c59a..1953fdfe52dd4eef586deca52357e56715a48a3e 100644 (file)
@@ -638,3 +638,5 @@ button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 setting_commit_logs_encoding: Commit messages encoding
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index 872266e3c7a424ac153c09aac6f821e478aa5505..eb52d5a5728f1bc31eeb47b8bfb1f751f77e2779 100644 (file)
@@ -404,6 +404,8 @@ label_revision_plural: Révisions
 label_associated_revisions: Révisions associées
 label_added: ajouté
 label_modified: modifié
+label_copied: copié
+label_renamed: renommé
 label_deleted: supprimé
 label_latest_revision: Dernière révision
 label_latest_revision_plural: Dernières révisions
index 8cd68c102adcefe662c8a61193219ba9385f034d..7a6c62ef6223e4f1d369fc47df4855d0cc40d8be 100644 (file)
@@ -638,3 +638,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index 2f177d4e3c8d64be8b4f070c7aad87341acc406a..2b1f3c32ecf6b422544b1b20336fa5ca6116b13e 100644 (file)
@@ -638,4 +638,6 @@ label_issue_watchers: Megfigyelők
 setting_commit_logs_encoding: Commit üzenetek kódlapja
 button_quote: Idézet
 setting_sequential_project_identifiers: Szekvenciális projekt azonosítók generálása
-notice_unable_delete_version: Unable to delete version
+notice_unable_delete_version: A verziót nem lehet törölni
+label_renamed: renamed
+label_copied: copied
index 5507e6bbcc3f142750f1de4a6beb1727485ab4ab..2591358861c52f46ba4333f4252f51acf5f8f722 100644 (file)
@@ -638,3 +638,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index c9470f91fa144cdc40d88673df26e6cfc2325073..c38c2ef706d8027bea6084096d99704c8a66d311 100644 (file)
@@ -639,3 +639,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index 38b5a48af4d57acfc7e8ed7a6f9d526f841555a5..27adf167cd7ba94834c02f4714f9ddbdff3d7eb1 100644 (file)
@@ -638,3 +638,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index 7c62bf155c8997088da5de96b4f6ddcecc8602f0..d9d193352b7e7397ca926d2d1dbf7cb68498bea8 100644 (file)
@@ -640,3 +640,5 @@ setting_commit_logs_encoding: Commit pranėšimų koduotė
 setting_sequential_project_identifiers: Generate sequential project identifiers
 button_quote: Quote
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index e8cab52b20aa9ddb8b578338c94476310e3566e1..746f242eee95fe4f28fbef418d7f9a558eee0c05 100644 (file)
@@ -639,3 +639,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index ce474131449ab47673dded2710597b296480f660..2b78826d074ae6d6ca42e53e880c76528d87cb12 100644 (file)
@@ -639,3 +639,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index 05ff1afb8a868ddf3bd3a1984e1ec356f78f8143..6bdac481c15e93e48ff913c841912f174624d4d1 100644 (file)
@@ -638,3 +638,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index c40c87a76ee06e9d18c7da680c9c45d6794f1204..a4bbefe0139ee859cb9998f1e62afb761a46a280 100644 (file)
@@ -639,3 +639,5 @@ enumeration_issue_priorities: Prioridade das tarefas
 enumeration_doc_categories: Categorias de documento
 enumeration_activities: Atividades (time tracking)
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed\r
+label_copied: copied\r
index 37e9ad6b21e67983324e7145d17492f6aac6c55b..98cde780a66bedb8510057183c525e8747137951 100644 (file)
@@ -638,3 +638,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index ebf1c0a1f1b1db38bee370f4b3cd7aae134db23f..855662c58810d4f7f41e5490f7a18b6379a3d93e 100644 (file)
@@ -638,3 +638,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index e522e1c63bb10c08823eae89392962454802e3c9..9ef18711b3c6f59ae61e3c7c02bef906e9b91d7d 100644 (file)
@@ -31,10 +31,10 @@ activerecord_error_accepted: необходимо принять
 activerecord_error_blank: необходимо заполнить
 activerecord_error_circular_dependency: Такая связь приведет к циклической зависимости
 activerecord_error_confirmation: ошибка в подтверждении
-activerecord_error_empty: необходимо заполнить 
-activerecord_error_exclusion: зарезервировано 
+activerecord_error_empty: необходимо заполнить
+activerecord_error_exclusion: зарезервировано
 activerecord_error_greater_than_start_date: должна быть позднее даты начала
-activerecord_error_inclusion: нет в списке 
+activerecord_error_inclusion: нет в списке
 activerecord_error_invalid: неверное значение
 activerecord_error_not_a_date: дата недействительна
 activerecord_error_not_a_number: не является числом
@@ -76,7 +76,7 @@ button_sort: Сортировать
 button_submit: Принять
 button_test: Проверить
 button_unarchive: Разархивировать
-button_uncheck_all: Очистить 
+button_uncheck_all: Очистить
 button_unlock: Разблокировать
 button_unwatch: Не следить
 button_update: Обновить
@@ -85,13 +85,13 @@ button_watch: Следить
 
 default_activity_design: Проектирование
 default_activity_development: Разработка
-default_doc_category_tech: Техническая документация 
+default_doc_category_tech: Техническая документация
 default_doc_category_user: Документация пользователя
 default_issue_status_assigned: Назначен
 default_issue_status_closed: Закрыт
-default_issue_status_feedback: Обратная связь 
+default_issue_status_feedback: Обратная связь
 default_issue_status_new: Новый
-default_issue_status_rejected: Отказ 
+default_issue_status_rejected: Отказ
 default_issue_status_resolved: Заблокирован
 default_priority_high: Высокий
 default_priority_immediate: Немедленный
@@ -113,7 +113,7 @@ error_can_t_load_default_data: "Конфигурация по умолчанию
 error_issue_not_found_in_project: Задача не была найдена или не прикреплена к этому проекту
 error_scm_annotate: "Данные отсутствуют или не могут быть подписаны."
 error_scm_command_failed: "Ошибка доступа к хранилищу: %s"
-error_scm_not_found: Хранилилище не содержит записи и/или исправления.
+error_scm_not_found: Хранилище не содержит записи и/или исправления.
 
 field_account: Учетная запись
 field_activity: Деятельность
@@ -132,7 +132,7 @@ field_column_names: Колонки
 field_comments_sorting: Отображение комментариев
 field_comments: Комментарий
 field_created_on: Создан
-field_default_value: Значение по умолчанию 
+field_default_value: Значение по умолчанию
 field_delay: Отложить
 field_description: Описание
 field_done_ratio: Готовность в %%
@@ -173,17 +173,17 @@ field_new_password: Новый пароль
 field_notes: Примечания
 field_onthefly: Создание пользователя на лету
 field_parent_title: Родительская страница
-field_parent: Родительский проект 
+field_parent: Родительский проект
 field_password_confirmation: Подтверждение
 field_password: Пароль
 field_port: Порт
-field_possible_values: Возможные значения 
+field_possible_values: Возможные значения
 field_priority: Приоритет
 field_project: Проект
 field_redirect_existing_links: Перенаправить существующие ссылки
 field_regexp: Регулярное выражение
 field_role: Роль
-field_searchable: Доступно для поиска 
+field_searchable: Доступно для поиска
 field_spent_on: Дата
 field_start_date: Начало
 field_start_page: Стартовая страница
@@ -212,7 +212,7 @@ general_fmt_age_plural5: %d гг.
 general_fmt_age_plural: %d лет
 general_fmt_date: %%d.%%m.%%Y
 general_fmt_datetime: %%d.%%m.%%Y %%I:%%M %%p
-general_fmt_datetime_short: %%d %%b, %%H:%%M 
+general_fmt_datetime_short: %%d %%b, %%H:%%M
 general_fmt_time: %%H:%%M
 general_lang_name: 'Russian (Русский)'
 general_pdf_encoding: UTF-8
@@ -228,11 +228,11 @@ gui_validation_error_plural: %d ошибок
 
 label_activity: Активность
 label_add_another_file: Добавить ещё один файл
-label_added_time_by: Ð\94обавлено %s %s назад
+label_added_time_by: Ð\94обавил(а) %s %s назад
 label_added: добавлено
 label_add_note: Добавить замечание
 label_administration: Администрирование
-label_age: Возраст 
+label_age: Возраст
 label_ago: дней(я) назад
 label_all_time: всё время
 label_all_words: Все слова
@@ -251,8 +251,8 @@ label_authentication: Аутентификация
 label_auth_source_new: Новый режим аутентификации
 label_auth_source_plural: Режимы аутентификации
 label_auth_source: Режим аутентификации
-label_blocked_by: заблокировано 
-label_blocks: блокирует 
+label_blocked_by: заблокировано
+label_blocks: блокирует
 label_board_new: Новый форум
 label_board_plural: Форумы
 label_board: Форум
@@ -266,10 +266,10 @@ label_change_log: Журнал изменений
 label_change_plural: Правки
 label_change_properties: Изменить свойства
 label_changes_details: Подробности по всем изменениям
-label_changeset_plural: Ð\9dабоÑ\80Ñ\8b Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹
+label_changeset_plural: Ð¥Ñ\80анилиÑ\89е
 label_change_status: Изменить статус
 label_change_view_all: Просмотреть все изменения
-label_chronological_order: В хронологическом порядке 
+label_chronological_order: В хронологическом порядке
 label_closed_issues_plural2: закрыто
 label_closed_issues_plural5: закрыто
 label_closed_issues_plural: закрыто
@@ -285,7 +285,7 @@ label_commits_per_author: Изменений на пользователя
 label_commits_per_month: Изменений в месяц
 label_confirmation: Подтверждение
 label_contains: содержит
-label_copy_workflow_from: Скопировать последовательность действий из 
+label_copy_workflow_from: Скопировать последовательность действий из
 label_current_status: Текущий статус
 label_current_version: Текущая версия
 label_custom_field_new: Новое настраиваемое поле
@@ -363,7 +363,7 @@ label_issue_status: Статус задачи
 label_issue_tracking: Ситуация по задачам
 label_issue_updated: Задача обновлена
 label_issue_view_all: Просмотреть все задачи
-label_issue_watchers: Ð¡Ð»ÐµÐ´Ñ\8fÑ\89ие
+label_issue_watchers: Ð\9dаблÑ\8eдаÑ\82ели
 label_issue: Задача
 label_jump_to_a_project: Перейти к проекту...
 label_language_based: На основе языка
@@ -379,7 +379,7 @@ label_last_week: последняя неделю
 label_latest_revision_plural: Последние редакции
 label_latest_revision: Последняя редакция
 label_ldap_authentication: Авторизация с помощью LDAP
-label_less_than_ago: менее, чем дней(я) назад 
+label_less_than_ago: менее, чем дней(я) назад
 label_list: Список
 label_loading: Загрузка...
 label_logged_as: Вошел как
@@ -396,14 +396,14 @@ label_message_posted: Сообщение добавлено
 label_me: мне
 label_min_max_length: Минимальная - максимальная длина
 label_modification: %d изменение
-label_modification_plural2: %d изменений
+label_modification_plural2: %d изменения
 label_modification_plural5: %d изменений
 label_modification_plural: %d изменений
 label_modified: изменено
 label_module_plural: Модули
 label_months_from: месяцев(ца) с
 label_month: Месяц
-label_more_than_ago: более, чем дней(я) назад 
+label_more_than_ago: более, чем дней(я) назад
 label_more: Больше
 label_my_account: Моя учетная запись
 label_my_page: Моя страница
@@ -420,7 +420,7 @@ label_next: Следующий
 label_nobody: никто
 label_no_change_option: (Нет изменений)
 label_no_data: Нет данных для отображения
-label_none: отсутствует 
+label_none: отсутствует
 label_not_contains: не содержит
 label_not_equals: не соответствует
 label_on: 'из'
@@ -432,7 +432,7 @@ label_optional_description: Описание (опционально)
 label_options: Опции
 label_overall_activity: Сводная активность
 label_overview: Просмотр
-label_password_lost: Восстановление пароля 
+label_password_lost: Восстановление пароля
 label_permissions_report: Отчет о правах доступа
 label_permissions: Права доступа
 label_per_page: На страницу
@@ -456,7 +456,7 @@ label_query_new: Новый запрос
 label_query_plural: Сохраненные запросы
 label_query: Сохраненный запрос
 label_read: Чтение...
-label_registered_on: Зарегистрирован(а) 
+label_registered_on: Зарегистрирован(а)
 label_register: Регистрация
 label_registration_activation_by_email: активация учетных записей по email
 label_registration_automatic_activation: автоматическая активация учетных записей
@@ -475,7 +475,7 @@ label_result_plural: Результаты
 label_reverse_chronological_order: В обратном порядке
 label_revision_plural: Редакции
 label_revision: Редакция
-label_roadmap_due_in: Вовремя 
+label_roadmap_due_in: Вовремя
 label_roadmap_no_issues: Нет задач для данной версии
 label_roadmap_overdue: %s опоздание
 label_roadmap: Оперативный план
@@ -499,7 +499,7 @@ label_spent_time: Затраченное время
 label_start_to_end: с начала к концу
 label_start_to_start: с начала к началу
 label_statistics: Статистика
-label_stay_logged_in: Оставаться в системе 
+label_stay_logged_in: Оставаться в системе
 label_string: Текст
 label_subproject_plural: Подпроекты
 label_text: Длинный текст
@@ -529,7 +529,7 @@ label_version_plural: Версии
 label_version: Версия
 label_view_diff: Просмотреть отличия
 label_view_revisions: Просмотреть редакции
-label_watched_issues: Отслеживаемые задачи 
+label_watched_issues: Отслеживаемые задачи
 label_week: Неделя
 label_wiki_edit_plural: Редактирования Wiki
 label_wiki_edit: Редактирование Wiki
@@ -545,18 +545,18 @@ mail_body_account_information_external: Вы можете использоват
 mail_body_account_information: Информация о Вашей учетной записи
 mail_body_lost_password: 'Для изменения пароля зайдите по следующей ссылке:'
 mail_body_register: 'Для активации учетной записи зайдите по следующей ссылке:'
-mail_body_reminder: "%d Ð½Ð°Ð·Ð½Ð°Ñ\87еннÑ\8bÑ\85 Ð½Ð° Ð²Ð°Ñ\81 Ð·Ð°Ð´Ð°Ñ\87 Ð½Ð° Ñ\81ледÑ\83Ñ\8eÑ\89ие %d Ð´Ð½ÐµÐ¹:" 
+mail_body_reminder: "%d Ð½Ð°Ð·Ð½Ð°Ñ\87еннÑ\8bÑ\85 Ð½Ð° Ð\92аÑ\81 Ð·Ð°Ð´Ð°Ñ\87 Ð½Ð° Ñ\81ледÑ\83Ñ\8eÑ\89ие %d Ð´Ð½ÐµÐ¹:"
 mail_subject_account_activation_request: Запрос на активацию пользователя в системе %s
 mail_subject_lost_password: Ваш %s пароль
 mail_subject_register: Активация учетной записи %s
-mail_subject_reminder: "%d Ð½Ð°Ð·Ð½Ð°Ñ\87еннÑ\8bÑ\85 Ð½Ð° Ð²Ð°Ñ\81 Ð·Ð°Ð´Ð°Ñ\87 Ð² Ð±Ð»Ð¸Ð¶Ð°Ð¹Ñ\88ие Ð´Ð½Ð¸" 
+mail_subject_reminder: "%d Ð½Ð°Ð·Ð½Ð°Ñ\87еннÑ\8bÑ\85 Ð½Ð° Ð\92аÑ\81 Ð·Ð°Ð´Ð°Ñ\87 Ð² Ð±Ð»Ð¸Ð¶Ð°Ð¹Ñ\88ие Ð´Ð½Ð¸"
 
 notice_account_activated: Ваша учетная запись активирована. Вы можете войти.
 notice_account_invalid_creditentials: Неправильное имя пользователя или пароль
 notice_account_lost_email_sent: Вам отправлено письмо с инструкциями по выбору нового пароля.
 notice_account_password_updated: Пароль успешно обновлен.
-notice_account_pending: "Ваша учетная запись уже создан и ожидает подтверждения администратора."
-notice_account_register_done: Ð£Ñ\87еÑ\82наÑ\8f Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c Ñ\83Ñ\81пеÑ\88но Ñ\81оздана. Ð\94лÑ\8f Ð°ÐºÑ\82иваÑ\86ии Ð\92аÑ\88ей Ñ\83Ñ\87еÑ\82ной Ð·Ð°Ð¿Ð¸Ñ\81и Ð·Ð°Ð¹Ð´Ð¸Ñ\82е Ð¿Ð¾ Ñ\81Ñ\81Ñ\8bлке, ÐºÐ¾Ñ\82оÑ\80аÑ\8f Ð²Ñ\8bÑ\81лана Ð²ам по электронной почте.
+notice_account_pending: "Ваша учетная запись уже создана и ожидает подтверждения администратора."
+notice_account_register_done: Ð£Ñ\87еÑ\82наÑ\8f Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c Ñ\83Ñ\81пеÑ\88но Ñ\81оздана. Ð\94лÑ\8f Ð°ÐºÑ\82иваÑ\86ии Ð\92аÑ\88ей Ñ\83Ñ\87еÑ\82ной Ð·Ð°Ð¿Ð¸Ñ\81и Ð·Ð°Ð¹Ð´Ð¸Ñ\82е Ð¿Ð¾ Ñ\81Ñ\81Ñ\8bлке, ÐºÐ¾Ñ\82оÑ\80аÑ\8f Ð²Ñ\8bÑ\81лана Ð\92ам по электронной почте.
 notice_account_unknown_email: Неизвестный пользователь.
 notice_account_updated: Учетная запись успешно обновлена.
 notice_account_wrong_password: Неверный пароль
@@ -569,14 +569,14 @@ notice_feeds_access_key_reseted: Ваш ключ доступа RSS был пе
 notice_file_not_found: Страница, на которую Вы пытаетесь зайти, не существует или удалена.
 notice_locking_conflict: Информация обновлена другим пользователем.
 notice_no_issue_selected: "Не выбрано ни одной задачи! Пожалуйста, отметьте задачи, которые Вы хотите отредактировать."
-notice_not_authorized: Ð£ Ð²ас нет прав для посещения данной страницы.
+notice_not_authorized: Ð£ Ð\92ас нет прав для посещения данной страницы.
 notice_successful_connection: Подключение успешно установлено.
 notice_successful_create: Создание успешно завершено.
 notice_successful_delete: Удаление успешно завершено.
 notice_successful_update: Обновление успешно завершено.
 notice_unable_delete_version: Невозможно удалить версию.
 
-project_module_boards: Форумы 
+project_module_boards: Форумы
 project_module_documents: Документы
 project_module_files: Файлы
 project_module_issue_tracking: Задачи
@@ -586,14 +586,14 @@ project_module_time_tracking: Учет времени
 project_module_wiki: Wiki
 
 setting_activity_days_default: Количество дней, отображаемых в Активности
-setting_app_subtitle: Подзаголовок приложения 
+setting_app_subtitle: Подзаголовок приложения
 setting_app_title: Название приложения
 setting_attachment_max_size: Максимальный размер вложения
 setting_autofetch_changesets: Автоматически следить за изменениями хранилища
 setting_autologin: Автоматический вход
 setting_bcc_recipients: Использовать скрытые списки (bcc)
 setting_commit_fix_keywords: Назначение ключевых слов
-setting_commit_logs_encoding: Ð\9aодиÑ\80овка Ð´Ð¾Ð±Ð°Ð²Ð»Ñ\8fемÑ\8bÑ\85 Ñ\81ообÑ\89ений
+setting_commit_logs_encoding: Ð\9aодиÑ\80овка ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ\82аÑ\80иев Ð² Ñ\85Ñ\80анилиÑ\89е
 setting_commit_ref_keywords: Ключевые слова для поиска
 setting_cross_project_issue_relations: Разрешить пересечение задач по проектам
 setting_date_format: Формат даты
@@ -617,15 +617,15 @@ setting_self_registration: Возможна саморегистрация
 setting_sequential_project_identifiers: Генерировать последовательные идентификаторы проектов
 setting_sys_api_enabled: Разрешить WS для управления хранилищем
 setting_text_formatting: Форматирование текста
-setting_time_format: Формат времени 
+setting_time_format: Формат времени
 setting_user_format: Формат отображения имени
 setting_welcome_text: Текст приветствия
 setting_wiki_compression: Сжатие истории Wiki
 
 status_active: активен
 status_locked: закрыт
-
 status_registered: зарегистрирован
+
 text_are_you_sure: Подтвердите
 text_assign_time_entries_to_project: Прикрепить зарегистрированное время к проекту
 text_caracters_maximum: Максимум %d символов(а).
@@ -640,7 +640,7 @@ text_enumeration_destroy_question: '%d объект(а,ов) связаны с 
 text_file_repository_writable: Хранилище с доступом на запись
 text_issue_added: По задаче %s был создан отчет (%s).
 text_issue_category_destroy_assignments: Удалить назначения категории
-text_issue_category_destroy_question: Ð\9dеÑ\81колÑ\8cко Ð·Ð°Ð´Ð°Ñ\87 (%d) Ð½Ð°Ð·Ð½Ð°Ñ\87ено Ð² Ð´Ð°Ð½Ð½Ñ\83Ñ\8e ÐºÐ°Ñ\82егоÑ\80иÑ\8e. Ð§Ñ\82о Ð²ы хотите предпринять?
+text_issue_category_destroy_question: Ð\9dеÑ\81колÑ\8cко Ð·Ð°Ð´Ð°Ñ\87 (%d) Ð½Ð°Ð·Ð½Ð°Ñ\87ено Ð² Ð´Ð°Ð½Ð½Ñ\83Ñ\8e ÐºÐ°Ñ\82егоÑ\80иÑ\8e. Ð§Ñ\82о Ð\92ы хотите предпринять?
 text_issue_category_reassign_to: Переназначить задачи для данной категории
 text_issues_destroy_confirmation: 'Вы уверены, что хотите удалить выбранные задачи?'
 text_issues_ref_in_commit_messages: Сопоставление и изменение статуса задач исходя из текста сообщений
@@ -666,7 +666,9 @@ text_tip_task_begin_end_day: начало задачи и окончание е
 text_tip_task_end_day: дата завершения задачи
 text_tracker_no_workflow: Для этого трекера последовательность действий не определена
 text_unallowed_characters: Запрещенные символы
-text_user_mail_option: "Для невыбранных проектов, Вы будете получать уведомления только о том что просматриваете или в чем участвуете (например, вопросы автором которых вы являетесь или которые вам назначены)."
+text_user_mail_option: "Для невыбранных проектов, Вы будете получать уведомления только о том что просматриваете или в чем участвуете (например, вопросы, автором которых Вы являетесь или которые Вам назначены)."
 text_user_wrote: '%s написал(а):'
-text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную вики и все содержимое?
+text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную Wiki и все содержимое?
 text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний
+label_renamed: renamed
+label_copied: copied
index f7ddfd7289ad2fb659352324085b245ac3fc92c8..574470e1b32b99dc2e444bac94ebe75570f657c1 100644 (file)
@@ -639,3 +639,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index b4e621c9317ee44097ad199bba2c5f45cbe63129..1e7d292d62d28b80d8e35a29e72294c5710f7b53 100644 (file)
@@ -639,3 +639,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index e2d8a0a4f5c06a52c0889988d13f61601e370710..0ad6b9b93eca75a31c2f4b6dff3bd250eb19168b 100644 (file)
@@ -641,3 +641,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index 9fb5b63ca5582d55bcf284575fb8c3d2a8a19ffb..7cb2a9e63e7e7dc4c2f7a9d491ced0f861ae2e46 100644 (file)
@@ -639,3 +639,5 @@ setting_mail_handler_api_key: API key
 setting_commit_logs_encoding: Commit messages encoding
 general_csv_decimal_separator: '.'
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index 8e8541f10de7069dc98170c7fe3e91bc0801087a..055d27ed97f3d4eedbf47e32e96b92d175fcf4be 100644 (file)
@@ -640,3 +640,5 @@ setting_commit_logs_encoding: Commit messages encoding
 button_quote: Quote
 setting_sequential_project_identifiers: Generate sequential project identifiers
 notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index b5477863caee82c01eb803c66281da162b814ea4..a7a7767f17e210e3931c83baf3b116ee7cd037fb 100644 (file)
@@ -77,6 +77,7 @@ notice_failed_to_save_issues: " %d 個項目儲存失敗 (總共選取 %d 個項
 notice_no_issue_selected: "未選擇任何項目!請勾選您想要編輯的項目。"
 notice_account_pending: "您的帳號已經建立,正在等待管理員的審核。"
 notice_default_data_loaded: 預設組態已載入成功。
+notice_unable_delete_version: 無法刪除版本。
 
 error_can_t_load_default_data: "無法載入預設組態: %s"
 error_scm_not_found: SCM 儲存庫中找不到這個專案或版本。
@@ -638,4 +639,5 @@ default_activity_development: 開發
 enumeration_issue_priorities: 項目優先權
 enumeration_doc_categories: 文件分類
 enumeration_activities: 活動 (時間追蹤)
-notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index d016c5a2a84dff383a06e2262c07f055c66e3aae..ed84eeb5706ba2ec1af259fbf68d92b5de512a87 100644 (file)
@@ -77,6 +77,7 @@ notice_failed_to_save_issues: "%d 个问题保存失败(共选择 %d 个问题
 notice_no_issue_selected: "未选择任何问题!请选择您要编辑的问题。"
 notice_account_pending: "您的帐号已被成功创建,正在等待管理员的审核。"
 notice_default_data_loaded: 成功载入默认设置。
+notice_unable_delete_version: 无法删除版本
 
 error_can_t_load_default_data: "无法载入默认设置:%s"
 error_scm_not_found: "版本库中不存在该条目和(或)其修订版本。"
@@ -219,6 +220,7 @@ setting_display_subprojects_issues: 在项目页面上默认显示子项目的
 setting_enabled_scm: 启用 SCM
 setting_mail_handler_api_enabled: 启用用于接收邮件的Web Service
 setting_mail_handler_api_key: API key
+setting_sequential_project_identifiers: 顺序产生项目标识
 
 project_module_issue_tracking: 问题跟踪
 project_module_time_tracking: 时间跟踪
@@ -561,6 +563,7 @@ button_copy: 复制
 button_annotate: 追溯
 button_update: 更新
 button_configure: 配置
+button_quote: 引用
 
 status_active: 活动的
 status_registered: 已注册
@@ -636,6 +639,5 @@ default_activity_development: 开发
 enumeration_issue_priorities: 问题优先级
 enumeration_doc_categories: 文档类别
 enumeration_activities: 活动(时间跟踪)
-button_quote: Quote
-setting_sequential_project_identifiers: Generate sequential project identifiers
-notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
index b2e44359e14c803a2cf20ed88c5917630bdcb1d7..a5e63262c442d52b8f8ba18b1028bb110a3a9295 100644 (file)
@@ -788,10 +788,10 @@ class RedCloth3 < String
             ":
             ([\w\/]\S+?)               # $url
             (\/)?                      # $slash
-            ([^\w\/;]*?)               # $post
+            ([^\w\=\/;\(\)]*?)         # $post
             (?=<|\s|$)
         /x 
-
+#"
     def inline_textile_link( text ) 
         text.gsub!( LINK_RE ) do |m|
             pre,atts,text,title,url,slash,post = $~[1..7]
@@ -799,6 +799,12 @@ class RedCloth3 < String
             url, url_title = check_refs( url )
             title ||= url_title
             
+            # Idea below : an URL with unbalanced parethesis and
+            # ending by ')' is put into external parenthesis
+            if ( url[-1]==?) and ((url.count("(") - url.count(")")) < 0 ) )
+              url=url[0..-2] # discard closing parenth from url
+              post = ")"+post # add closing parenth to post
+            end
             atts = pba( atts )
             atts = " href=\"#{ url }#{ slash }\"#{ atts }"
             atts << " title=\"#{ title }\"" if title
index 649edfeff3be56df2234cb01b51c8756ecb21c9d..7dffff4923a6410e3716d8296f0c81ab4020ccb4 100644 (file)
@@ -144,7 +144,7 @@ module Redmine
                           (\S+?)                   # url
                           (\/)?                    # slash
                         )
-                        ([^\w\=\/;]*?)               # post
+                        ([^\w\=\/;\(\)]*?)               # post
                         (?=<|\s|$)
                        }x unless const_defined?(:AUTO_LINK_RE)
 
@@ -156,7 +156,13 @@ module Redmine
             # don't replace URL's that are already linked
             # and URL's prefixed with ! !> !< != (textile images)
             all
-          else            
+          else
+            # Idea below : an URL with unbalanced parethesis and
+            # ending by ')' is put into external parenthesis
+            if ( url[-1]==?) and ((url.count("(") - url.count(")")) < 0 ) )
+              url=url[0..-2] # discard closing parenth from url
+              post = ")"+post # add closing parenth to post
+            end
             %(#{leading}<a class="external" href="#{proto=="www."?"http://www.":proto}#{url}">#{proto + url}</a>#{post})
           end
         end
diff --git a/public/images/bullet_add.png b/public/images/bullet_add.png
new file mode 100644 (file)
index 0000000..41ff833
Binary files /dev/null and b/public/images/bullet_add.png differ
diff --git a/public/images/bullet_black.png b/public/images/bullet_black.png
new file mode 100644 (file)
index 0000000..5761970
Binary files /dev/null and b/public/images/bullet_black.png differ
diff --git a/public/images/bullet_blue.png b/public/images/bullet_blue.png
new file mode 100644 (file)
index 0000000..a7651ec
Binary files /dev/null and b/public/images/bullet_blue.png differ
diff --git a/public/images/bullet_delete.png b/public/images/bullet_delete.png
new file mode 100644 (file)
index 0000000..bd6271b
Binary files /dev/null and b/public/images/bullet_delete.png differ
diff --git a/public/images/bullet_orange.png b/public/images/bullet_orange.png
new file mode 100644 (file)
index 0000000..638b1ef
Binary files /dev/null and b/public/images/bullet_orange.png differ
diff --git a/public/images/bullet_purple.png b/public/images/bullet_purple.png
new file mode 100644 (file)
index 0000000..52ba503
Binary files /dev/null and b/public/images/bullet_purple.png differ
diff --git a/public/images/folder_open_add.png b/public/images/folder_open_add.png
new file mode 100644 (file)
index 0000000..1ce4dca
Binary files /dev/null and b/public/images/folder_open_add.png differ
diff --git a/public/images/folder_open_orange.png b/public/images/folder_open_orange.png
new file mode 100644 (file)
index 0000000..fb909ba
Binary files /dev/null and b/public/images/folder_open_orange.png differ
diff --git a/public/javascripts/calendar/lang/calendar-ca.js b/public/javascripts/calendar/lang/calendar-ca.js
new file mode 100644 (file)
index 0000000..303f21d
--- /dev/null
@@ -0,0 +1,127 @@
+// ** I18N
+
+// Calendar EN language
+// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("Diumenge",
+ "Dilluns",
+ "Dimarts",
+ "Dimecres",
+ "Dijous",
+ "Divendres",
+ "Dissabte",
+ "Diumenge");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("dg",
+ "dl",
+ "dt",
+ "dc",
+ "dj",
+ "dv",
+ "ds",
+ "dg");
+
+// First day of the week. "0" means display Sunday first, "1" means display
+// Monday first, etc.
+Calendar._FD = 0;
+
+// full month names
+Calendar._MN = new Array
+("Gener",
+ "Febrer",
+ "Març",
+ "Abril",
+ "Maig",
+ "Juny",
+ "Juliol",
+ "Agost",
+ "Setembre",
+ "Octubre",
+ "Novembre",
+ "Desembre");
+
+// short month names
+Calendar._SMN = new Array
+("Gen",
+ "Feb",
+ "Mar",
+ "Abr",
+ "Mai",
+ "Jun",
+ "Jul",
+ "Ago",
+ "Set",
+ "Oct",
+ "Nov",
+ "Des");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Quant al calendari";
+
+Calendar._TT["ABOUT"] =
+"Selector DHTML de data/hora\n" +
+"(c) dynarch.com 2002-2005 / Autor: Mihai Bazon\n" + // don't translate this this ;-)
+"Per a aconseguir l'última versió visiteu: http://www.dynarch.com/projects/calendar/\n" +
+"Distribuït sota la llicència GNU LGPL.  Vegeu http://gnu.org/licenses/lgpl.html per a més detalls." +
+"\n\n" +
+"Selecció de la data:\n" +
+"- Utilitzeu els botons \xab, \xbb per a seleccionar l'any\n" +
+"- Utilitzeu els botons " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " per a selecciona el mes\n" +
+"- Mantingueu premut el botó del ratolí sobre qualsevol d'aquests botons per a uns selecció més ràpida.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Selecció de l'hora:\n" +
+"- Feu clic en qualsevol part de l'hora per a incrementar-la\n" +
+"- o premeu majúscules per a disminuir-la\n" +
+"- o feu clic i arrossegueu per a una selecció més ràpida.";
+
+Calendar._TT["PREV_YEAR"] = "Any anterior (mantenir per menú)";
+Calendar._TT["PREV_MONTH"] = "Mes anterior (mantenir per menú)";
+Calendar._TT["GO_TODAY"] = "Anar a avui";
+Calendar._TT["NEXT_MONTH"] = "Mes següent (mantenir per menú)";
+Calendar._TT["NEXT_YEAR"] = "Any següent (mantenir per menú)";
+Calendar._TT["SEL_DATE"] = "Sel·lecciona data";
+Calendar._TT["DRAG_TO_MOVE"] = "Arrossega per a moure";
+Calendar._TT["PART_TODAY"] = " (avui)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "Primer mostra el %s";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Tanca";
+Calendar._TT["TODAY"] = "Avui";
+Calendar._TT["TIME_PART"] = "(Majúscules-)Feu clic o arrossegueu per a canviar el valor";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%A, %e de %B de %Y";
+
+Calendar._TT["WK"] = "set";
+Calendar._TT["TIME"] = "Hora:";
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-ca.js b/public/javascripts/jstoolbar/lang/jstoolbar-ca.js
new file mode 100644 (file)
index 0000000..3d652a4
--- /dev/null
@@ -0,0 +1,16 @@
+jsToolBar.strings = {};
+jsToolBar.strings['Strong'] = 'Negreta';
+jsToolBar.strings['Italic'] = 'Cursiva';
+jsToolBar.strings['Underline'] = 'Subratllat';
+jsToolBar.strings['Deleted'] = 'Barrat';
+jsToolBar.strings['Code'] = 'Codi en línia';
+jsToolBar.strings['Heading 1'] = 'Encapçalament 1';
+jsToolBar.strings['Heading 2'] = 'Encapçalament 2';
+jsToolBar.strings['Heading 3'] = 'Encapçalament 3';
+jsToolBar.strings['Unordered list'] = 'Llista sense ordre';
+jsToolBar.strings['Ordered list'] = 'Llista ordenada';
+jsToolBar.strings['Quote'] = 'Cometes';
+jsToolBar.strings['Unquote'] = 'Sense cometes';
+jsToolBar.strings['Preformatted text'] = 'Text formatat';
+jsToolBar.strings['Wiki link'] = 'Enllaça a una pàgina Wiki';
+jsToolBar.strings['Image'] = 'Imatge';
index 643ebe7987406aaf931529372794ce10d68c61e3..8c4173413e917be199a4c9420d1819b5f9ede535 100644 (file)
@@ -582,7 +582,6 @@ vertical-align: middle;
 .icon-mypage { background-image: url(../images/user_page.png); }
 .icon-admin { background-image: url(../images/admin.png); }
 .icon-projects { background-image: url(../images/projects.png); }
-.icon-logout { background-image: url(../images/logout.png); }
 .icon-help { background-image: url(../images/help.png); }
 .icon-attachment  { background-image: url(../images/attachment.png); }
 .icon-index  { background-image: url(../images/index.png); }
index 4e9d44b6c51d3e4f1c55745bfed4f6af2699429a..9514e3eb0843dc129aae22445357ec1f12dab34e 100644 (file)
 .jstb_del {
        background-image: url(../images/jstoolbar/bt_del.png);
 }
-.jstb_quote {
-       background-image: url(../images/jstoolbar/bt_quote.png);
-}
 .jstb_code {
        background-image: url(../images/jstoolbar/bt_code.png);
 }
-.jstb_br {
-       background-image: url(../images/jstoolbar/bt_br.png);
-}
 .jstb_h1 {
        background-image: url(../images/jstoolbar/bt_h1.png);
 }
index d5a879bf19793ab0eb808ca63f549d2a84427424..ecd319307742249e0c0ac5ac9aca368e9e4fe706 100644 (file)
@@ -1,4 +1,32 @@
 
+div.changeset-changes ul { margin: 0; padding: 0; }
+div.changeset-changes ul > ul { margin-left: 18px; padding: 0; }
+
+li.change { 
+    list-style-type:none;
+    background-image: url(../images/bullet_black.png); 
+    background-position: 1px 1px;
+    background-repeat: no-repeat;
+    padding-top: 1px;
+    padding-bottom: 1px;
+    padding-left: 20px;
+    margin: 0;
+}
+li.change.folder { background-image: url(../images/folder_open.png); }
+li.change.folder.change-A { background-image: url(../images/folder_open_add.png); }
+li.change.folder.change-M { background-image: url(../images/folder_open_orange.png); }
+li.change.change-A { background-image: url(../images/bullet_add.png); }
+li.change.change-M { background-image: url(../images/bullet_orange.png); }
+li.change.change-C { background-image: url(../images/bullet_blue.png); }
+li.change.change-R { background-image: url(../images/bullet_purple.png); }
+li.change.change-D { background-image: url(../images/bullet_delete.png); }
+
+li.change .copied-from { font-style: italic; color: #999; font-size: 0.9em; }
+li.change .copied-from:before { content: " - "}
+
+#changes-legend { float: right; font-size: 0.8em; margin: 0; }
+#changes-legend li { float: left; background-position: 5px 0; }
+
 table.filecontent { border: 1px solid #ccc;  border-collapse: collapse; width:98%; }
 table.filecontent th { border: 1px solid #ccc; background-color: #eee; }
 table.filecontent th.filename {        background-color: #e4e4d4; text-align: left; padding: 0.2em;}
index 8320be7e7ac32d9e8e9945721635bb4e8f2033de..245a170d16b04e4df703707557c60a2adad57793 100644 (file)
@@ -125,16 +125,18 @@ class RepositoriesSubversionControllerTest < Test::Unit::TestCase
       get :revision, :id => 1, :rev => 2
       assert_response :success
       assert_template 'revision'
-      assert_tag :tag => 'tr',
-                 :child => { :tag => 'td', 
+      assert_tag :tag => 'ul',
+                 :child => { :tag => 'li',
                              # link to the entry at rev 2
-                             :child => { :tag => 'a', :attributes => {:href => 'repositories/entry/ecookbook/test/some/path/in/the/repo?rev=2'},
-                                                      :content => %r{/test/some/path/in/the/repo} }
-                           },
-                 :child => { :tag => 'td', 
-                             # link to partial diff
-                             :child => { :tag => 'a', :attributes => { :href => '/repositories/diff/ecookbook/test/some/path/in/the/repo?rev=2' } }
-                           }
+                             :child => { :tag => 'a', 
+                                         :attributes => {:href => '/repositories/entry/ecookbook/test/some/path/in/the/repo?rev=2'},
+                                         :content => 'repo',
+                                         # link to partial diff
+                                         :sibling =>  { :tag => 'a', 
+                                                        :attributes => { :href => '/repositories/diff/ecookbook/test/some/path/in/the/repo?rev=2' } 
+                                                       }
+                                        }
+                            }
     end
     
     def test_revision_with_repository_pointing_to_a_subdirectory
@@ -145,11 +147,18 @@ class RepositoriesSubversionControllerTest < Test::Unit::TestCase
       get :revision, :id => 1, :rev => 2
       assert_response :success
       assert_template 'revision'
-      assert_tag :tag => 'tr',
-                 :child => { :tag => 'td', :content => %r{/test/some/path/in/the/repo} },
-                 :child => { :tag => 'td', 
-                             :child => { :tag => 'a', :attributes => { :href => '/repositories/diff/ecookbook/path/in/the/repo?rev=2' } }
-                           }
+      assert_tag :tag => 'ul',
+                 :child => { :tag => 'li',
+                             # link to the entry at rev 2
+                             :child => { :tag => 'a', 
+                                         :attributes => {:href => '/repositories/entry/ecookbook/path/in/the/repo?rev=2'},
+                                         :content => 'repo',
+                                         # link to partial diff
+                                         :sibling =>  { :tag => 'a', 
+                                                        :attributes => { :href => '/repositories/diff/ecookbook/path/in/the/repo?rev=2' } 
+                                                       }
+                                        }
+                            }
     end
     
     def test_diff
index 6db029adabbf4d0ccd3ecd58b825abc453f425e2..7ef47f5926025256283a9622da0bd0f61446778d 100644 (file)
@@ -38,10 +38,18 @@ class ApplicationHelperTest < HelperTestCase
       'This is a link: http://foo.bar.' => 'This is a link: <a class="external" href="http://foo.bar">http://foo.bar</a>.',
       'A link (eg. http://foo.bar).' => 'A link (eg. <a class="external" href="http://foo.bar">http://foo.bar</a>).',
       'http://foo.bar/foo.bar#foo.bar.' => '<a class="external" href="http://foo.bar/foo.bar#foo.bar">http://foo.bar/foo.bar#foo.bar</a>.',
+      'http://www.foo.bar/Test_(foobar)' => '<a class="external" href="http://www.foo.bar/Test_(foobar)">http://www.foo.bar/Test_(foobar)</a>',
+      '(see inline link : http://www.foo.bar/Test_(foobar))' => '(see inline link : <a class="external" href="http://www.foo.bar/Test_(foobar)">http://www.foo.bar/Test_(foobar)</a>)',
+      '(see inline link : http://www.foo.bar/Test)' => '(see inline link : <a class="external" href="http://www.foo.bar/Test">http://www.foo.bar/Test</a>)',
+      '(see inline link : http://www.foo.bar/Test).' => '(see inline link : <a class="external" href="http://www.foo.bar/Test">http://www.foo.bar/Test</a>).',
+      '(see "inline link":http://www.foo.bar/Test_(foobar))' => '(see <a href="http://www.foo.bar/Test_(foobar)" class="external">inline link</a>)',
+      '(see "inline link":http://www.foo.bar/Test)' => '(see <a href="http://www.foo.bar/Test" class="external">inline link</a>)',
+      '(see "inline link":http://www.foo.bar/Test).' => '(see <a href="http://www.foo.bar/Test" class="external">inline link</a>).',
       'www.foo.bar' => '<a class="external" href="http://www.foo.bar">www.foo.bar</a>',
       'http://foo.bar/page?p=1&t=z&s=' => '<a class="external" href="http://foo.bar/page?p=1&#38;t=z&#38;s=">http://foo.bar/page?p=1&#38;t=z&#38;s=</a>',
       'http://foo.bar/page#125' => '<a class="external" href="http://foo.bar/page#125">http://foo.bar/page#125</a>',
       'http://foo@www.bar.com' => '<a class="external" href="http://foo@www.bar.com">http://foo@www.bar.com</a>',
+      'http://foo:bar@www.bar.com' => '<a class="external" href="http://foo:bar@www.bar.com">http://foo:bar@www.bar.com</a>',
       'ftp://foo.bar' => '<a class="external" href="ftp://foo.bar">ftp://foo.bar</a>',
     }
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }