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
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)
<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 -%>
<% end %>
<h3><%= l(:label_attachment_plural) %></h3>
-<div style="float:right;">
-<div class="square action_A"></div> <div style="float:left;"><%= l(:label_added) %> </div>
-<div class="square action_M"></div> <div style="float:left;"><%= l(:label_modified) %> </div>
-<div class="square action_D"></div> <div style="float:left;"><%= l(:label_deleted) %> </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" %>
#!/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
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]
)
end
end
- usage if url.nil?
+ RDoc.usage if url.nil?
end
def submit(email)
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
# == 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'
$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
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
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?)
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")
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
--- /dev/null
+_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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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: не является числом
button_submit: Принять
button_test: Проверить
button_unarchive: Разархивировать
-button_uncheck_all: Очистить
+button_uncheck_all: Очистить
button_unlock: Разблокировать
button_unwatch: Не следить
button_update: Обновить
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: Немедленный
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: Деятельность
field_comments_sorting: Отображение комментариев
field_comments: Комментарий
field_created_on: Создан
-field_default_value: Значение по умолчанию
+field_default_value: Значение по умолчанию
field_delay: Отложить
field_description: Описание
field_done_ratio: Готовность в %%
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: Стартовая страница
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
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: Все слова
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: Форум
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: закрыто
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: Новое настраиваемое поле
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: На основе языка
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: Вошел как
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: Моя страница
label_nobody: никто
label_no_change_option: (Нет изменений)
label_no_data: Нет данных для отображения
-label_none: отсутствует
+label_none: отсутствует
label_not_contains: не содержит
label_not_equals: не соответствует
label_on: 'из'
label_options: Опции
label_overall_activity: Сводная активность
label_overview: Просмотр
-label_password_lost: Восстановление пароля
+label_password_lost: Восстановление пароля
label_permissions_report: Отчет о правах доступа
label_permissions: Права доступа
label_per_page: На страницу
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: автоматическая активация учетных записей
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: Оперативный план
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: Длинный текст
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
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: Неверный пароль
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: Задачи
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: Формат даты
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 символов(а).
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: Сопоставление и изменение статуса задач исходя из текста сообщений
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
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
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
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
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
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
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 儲存庫中找不到這個專案或版本。
enumeration_issue_priorities: 項目優先權
enumeration_doc_categories: 文件分類
enumeration_activities: 活動 (時間追蹤)
-notice_unable_delete_version: Unable to delete version
+label_renamed: renamed
+label_copied: copied
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: "版本库中不存在该条目和(或)其修订版本。"
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: 时间跟踪
button_annotate: 追溯
button_update: 更新
button_configure: 配置
+button_quote: 引用
status_active: 活动的
status_registered: 已注册
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
":
([\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]
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
(\S+?) # url
(\/)? # slash
)
- ([^\w\=\/;]*?) # post
+ ([^\w\=\/;\(\)]*?) # post
(?=<|\s|$)
}x unless const_defined?(:AUTO_LINK_RE)
# 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
--- /dev/null
+// ** 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:";
--- /dev/null
+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';
.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); }
.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);
}
+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;}
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
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
'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&t=z&s=">http://foo.bar/page?p=1&t=z&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) }