From 9b94342bc3bac07fa82ce66bf76a9a4149f85f33 2008-09-22 18:33:53 From: Nicolas Chuche Date: 2008-09-22 18:33:53 Subject: [PATCH] r18645@gaspard (orig r1887): jplang | 2008-09-20 16:07:52 +0200 Fixed: Roadmap crashes when a version has a due date > 2037. r18646@gaspard (orig r1888): jplang | 2008-09-21 10:54:02 +0200 Fixed: invalid effective date (eg. 99999-01-01) causes an error on version edition screen. r18647@gaspard (orig r1889): jplang | 2008-09-21 10:54:50 +0200 Fixes VersionTest class. r18648@gaspard (orig r1890): jplang | 2008-09-21 14:07:44 +0200 Fixed: login filter providing incorrect back_url for Redmine installed in sub-directory (#1900). r18649@gaspard (orig r1891): winterheart | 2008-09-21 14:31:34 +0200 de.yml from #1745, thank to Sven Schuchmann and Thomas Löber for contribution r18650@gaspard (orig r1892): winterheart | 2008-09-21 14:32:16 +0200 #1928, update for Italian language r18651@gaspard (orig r1893): jplang | 2008-09-21 14:45:22 +0200 Unescape back_url param before calling redirect_to. r18652@gaspard (orig r1894): jplang | 2008-09-21 15:28:12 +0200 Strip LDAP attribute names before saving (#1890). r18653@gaspard (orig r1895): jplang | 2008-09-21 20:45:30 +0200 Switch order of current and previous revisions in side-by-side diff (#1903). r18654@gaspard (orig r1896): jplang | 2008-09-21 22:38:36 +0200 Typo in migration 97 name (#1929). r18655@gaspard (orig r1897): winterheart | 2008-09-22 16:49:18 +0200 #1921, pt translation git-svn-id: http://redmine.rubyforge.org/svn/branches/nbc@1898 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/controllers/application.rb b/app/controllers/application.rb index d21d0bd..238239c 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application.rb @@ -16,6 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. require 'uri' +require 'cgi' class ApplicationController < ActionController::Base layout 'base' @@ -81,7 +82,7 @@ class ApplicationController < ActionController::Base def require_login if !User.current.logged? - redirect_to :controller => "account", :action => "login", :back_url => request.request_uri + redirect_to :controller => "account", :action => "login", :back_url => (request.relative_url_root + request.request_uri) return false end true @@ -123,7 +124,7 @@ class ApplicationController < ActionController::Base end def redirect_back_or_default(default) - back_url = params[:back_url] + back_url = CGI.unescape(params[:back_url].to_s) if !back_url.blank? uri = URI.parse(back_url) # do not redirect user to another host diff --git a/app/controllers/timelog_controller.rb b/app/controllers/timelog_controller.rb index 897a50f..c333c02 100644 --- a/app/controllers/timelog_controller.rb +++ b/app/controllers/timelog_controller.rb @@ -194,7 +194,7 @@ class TimelogController < ApplicationController @time_entry.attributes = params[:time_entry] if request.post? and @time_entry.save flash[:notice] = l(:notice_successful_update) - redirect_to(params[:back_url].blank? ? {:action => 'details', :project_id => @time_entry.project} : params[:back_url]) + redirect_back_or_default :action => 'details', :project_id => @time_entry.project return end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index cc26127..c3701b3 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -100,6 +100,19 @@ module ApplicationHelper @time_format ||= (Setting.time_format.blank? ? l(:general_fmt_time) : Setting.time_format) include_date ? local.strftime("#{@date_format} #{@time_format}") : local.strftime(@time_format) end + + def distance_of_date_in_words(from_date, to_date = 0) + from_date = from_date.to_date if from_date.respond_to?(:to_date) + to_date = to_date.to_date if to_date.respond_to?(:to_date) + distance_in_days = (to_date - from_date).abs + lwr(:actionview_datehelper_time_in_words_day, distance_in_days) + end + + def due_date_distance_in_words(date) + if date + l((date < Date.today ? :label_roadmap_overdue : :label_roadmap_due_in), distance_of_date_in_words(Date.today, date)) + end + end # Truncates and returns the string as a single line def truncate_single_line(string, *args) diff --git a/app/models/auth_source_ldap.rb b/app/models/auth_source_ldap.rb index 655ffd6..6203a7c 100644 --- a/app/models/auth_source_ldap.rb +++ b/app/models/auth_source_ldap.rb @@ -25,6 +25,8 @@ class AuthSourceLdap < AuthSource validates_length_of :attr_login, :attr_firstname, :attr_lastname, :attr_mail, :maximum => 30, :allow_nil => true validates_numericality_of :port, :only_integer => true + before_validation :strip_ldap_attributes + def after_initialize self.port = 389 if self.port == 0 end @@ -71,7 +73,14 @@ class AuthSourceLdap < AuthSource "LDAP" end -private + private + + def strip_ldap_attributes + [:attr_login, :attr_firstname, :attr_lastname, :attr_mail].each do |attr| + write_attribute(attr, read_attribute(attr).strip) unless read_attribute(attr).nil? + end + end + def initialize_ldap_con(ldap_user, ldap_password) options = { :host => self.host, :port => self.port, diff --git a/app/models/version.rb b/app/models/version.rb index dc618af..e379f4b 100644 --- a/app/models/version.rb +++ b/app/models/version.rb @@ -24,7 +24,7 @@ class Version < ActiveRecord::Base validates_presence_of :name validates_uniqueness_of :name, :scope => [:project_id] validates_length_of :name, :maximum => 60 - validates_format_of :effective_date, :with => /^\d{4}-\d{2}-\d{2}$/, :message => :activerecord_error_not_a_date, :allow_nil => true + validates_format_of :effective_date, :with => /^\d{4}-\d{2}-\d{2}$/, :message => 'activerecord_error_not_a_date', :allow_nil => true def start_date effective_date diff --git a/app/views/versions/_overview.rhtml b/app/views/versions/_overview.rhtml index d3aa6b1..377e917 100644 --- a/app/views/versions/_overview.rhtml +++ b/app/views/versions/_overview.rhtml @@ -1,9 +1,7 @@ <% if version.completed? %>

<%= format_date(version.effective_date) %>

-<% elsif version.overdue? %> -

<%= l(:label_roadmap_overdue, distance_of_time_in_words(Time.now, version.effective_date)) %> (<%= format_date(version.effective_date) %>)

<% elsif version.effective_date %> -

<%=l(:label_roadmap_due_in)%> <%= distance_of_time_in_words Time.now, version.effective_date %> (<%= format_date(version.effective_date) %>)

+

<%= due_date_distance_in_words(version.effective_date) %> (<%= format_date(version.effective_date) %>)

<% end %>

<%=h version.description %>

diff --git a/db/migrate/097_add_wiew_wiki_edits_permission.rb b/db/migrate/097_add_view_wiki_edits_permission.rb similarity index 91% rename from db/migrate/097_add_wiew_wiki_edits_permission.rb rename to db/migrate/097_add_view_wiki_edits_permission.rb index 0f87ada..3e4b26b 100644 --- a/db/migrate/097_add_wiew_wiki_edits_permission.rb +++ b/db/migrate/097_add_view_wiki_edits_permission.rb @@ -1,4 +1,4 @@ -class AddWiewWikiEditsPermission < ActiveRecord::Migration +class AddViewWikiEditsPermission < ActiveRecord::Migration def self.up Role.find(:all).each do |r| r.add_permission!(:view_wiki_edits) if r.has_permission?(:view_wiki_pages) diff --git a/lang/bg.yml b/lang/bg.yml index e072ad9..f8d2e5e 100644 --- a/lang/bg.yml +++ b/lang/bg.yml @@ -352,7 +352,7 @@ label_sort_higher: Премести по-горе label_sort_lower: Премести по-долу label_sort_lowest: Премести най-долу label_roadmap: Пътна карта -label_roadmap_due_in: Излиза след +label_roadmap_due_in: Излиза след %s label_roadmap_overdue: %s закъснение label_roadmap_no_issues: Няма задачи за тази версия label_search: Търсене diff --git a/lang/ca.yml b/lang/ca.yml index 895f213..30348b0 100644 --- a/lang/ca.yml +++ b/lang/ca.yml @@ -413,7 +413,7 @@ 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_due_in: Venç en %s label_roadmap_overdue: %s tard label_roadmap_no_issues: No hi ha assumptes per a aquesta versió label_search: Cerca diff --git a/lang/cs.yml b/lang/cs.yml index 51486ae..cf2cb09 100644 --- a/lang/cs.yml +++ b/lang/cs.yml @@ -409,7 +409,7 @@ label_sort_higher: Přesunout nahoru label_sort_lower: Přesunout dolů label_sort_lowest: Přesunout na konec label_roadmap: Plán -label_roadmap_due_in: Zbývá +label_roadmap_due_in: Zbývá %s label_roadmap_overdue: %s pozdě label_roadmap_no_issues: Pro tuto verzi nejsou žádné úkoly label_search: Hledat diff --git a/lang/da.yml b/lang/da.yml index 631d589..0ee1b25 100644 --- a/lang/da.yml +++ b/lang/da.yml @@ -418,7 +418,7 @@ label_sort_higher: Flyt op label_sort_lower: Flyt ned label_sort_lowest: Flyt til bunden label_roadmap: Plan -label_roadmap_due_in: Deadline +label_roadmap_due_in: Deadline %s label_roadmap_overdue: %s forsinket label_roadmap_no_issues: Ingen sager i denne version label_search: Søg diff --git a/lang/de.yml b/lang/de.yml index 7ee1425..7aa2d97 100644 --- a/lang/de.yml +++ b/lang/de.yml @@ -19,10 +19,10 @@ actionview_datehelper_time_in_words_second_less_than: weniger als einer Sekunde actionview_datehelper_time_in_words_second_less_than_plural: weniger als %d Sekunden actionview_instancetag_blank_option: Bitte auswählen -activerecord_error_inclusion: ist nicht inbegriffen +activerecord_error_inclusion: ist nicht in der Liste enthalten activerecord_error_exclusion: ist reserviert activerecord_error_invalid: ist unzulässig -activerecord_error_confirmation: Bestätigung nötig +activerecord_error_confirmation: passt nicht zur Bestätigung activerecord_error_accepted: muss angenommen werden activerecord_error_empty: darf nicht leer sein activerecord_error_blank: darf nicht leer sein @@ -77,6 +77,7 @@ notice_failed_to_save_issues: "%d von %d ausgewählten Tickets konnte(n) nicht g notice_no_issue_selected: "Kein Ticket ausgewählt! Bitte wählen Sie die Tickets, die Sie bearbeiten möchten." notice_account_pending: "Ihr Konto wurde erstellt und wartet jetzt auf die Genehmigung des Administrators." notice_default_data_loaded: Die Standard-Konfiguration wurde erfolgreich geladen. +notice_unable_delete_version: Die Version konnte nicht gelöscht werden error_can_t_load_default_data: "Die Standard-Konfiguration konnte nicht geladen werden: %s" error_scm_not_found: Eintrag und/oder Revision besteht nicht im Projektarchiv. @@ -92,6 +93,8 @@ mail_body_account_information_external: Sie können sich mit Ihrem Konto "%s" an mail_body_account_information: Ihre Konto-Informationen mail_subject_account_activation_request: Antrag auf %s Kontoaktivierung mail_body_account_activation_request: 'Ein neuer Benutzer (%s) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:' +mail_subject_reminder: "%d Tickets müssen in den nächsten Tagen abgegeben werden" +mail_body_reminder: "%d Tickets, die Ihnen zugewiesen sind, müssen in den nächsten %d Tagen abgegeben werden:" gui_validation_error: 1 Fehler gui_validation_error_plural: %d Fehler @@ -180,6 +183,7 @@ field_time_zone: Zeitzone field_searchable: Durchsuchbar field_default_value: Standardwert field_comments_sorting: Kommentare anzeigen +field_parent_title: Übergeordnete Seite setting_app_title: Applikations-Titel setting_app_subtitle: Applikations-Untertitel @@ -206,12 +210,17 @@ setting_time_format: Zeitformat setting_cross_project_issue_relations: Ticket-Beziehungen zwischen Projekten erlauben setting_issue_list_default_columns: Default-Spalten in der Ticket-Auflistung setting_repositories_encodings: Kodierungen der Projektarchive +setting_commit_logs_encoding: Kodierung der Log-Meldungen setting_emails_footer: E-Mail-Fußzeile setting_protocol: Protokoll setting_per_page_options: Objekte pro Seite setting_user_format: Benutzer-Anzeigeformat setting_activity_days_default: Anzahl Tage pro Seite der Projekt-Aktivität setting_display_subprojects_issues: Tickets von Unterprojekten im Hauptprojekt anzeigen +setting_enabled_scm: Aktivierte Versionskontrollsysteme +setting_mail_handler_api_enabled: Abruf eingehender E-Mails aktivieren +setting_mail_handler_api_key: API-Schlüssel +setting_sequential_project_identifiers: Fortlaufende Projektkennungen generieren project_module_issue_tracking: Ticket-Verfolgung project_module_time_tracking: Zeiterfassung @@ -292,6 +301,7 @@ label_auth_source: Authentifizierungs-Modus label_auth_source_new: Neuer Authentifizierungs-Modus label_auth_source_plural: Authentifizierungs-Arten label_subproject_plural: Unterprojekte +label_and_its_subprojects: %s und dessen Unterprojekte label_min_max_length: Länge (Min. - Max.) label_list: Liste label_date: Datum @@ -395,6 +405,8 @@ label_revision_plural: Revisionen label_associated_revisions: Zugehörige Revisionen label_added: hinzugefügt label_modified: geändert +label_copied: kopiert +label_renamed: umbenannt label_deleted: gelöscht label_latest_revision: Aktuellste Revision label_latest_revision_plural: Aktuellste Revisionen @@ -446,6 +458,7 @@ label_relation_new: Neue Beziehung label_relation_delete: Beziehung löschen label_relates_to: Beziehung mit label_duplicates: Duplikat von +label_duplicated_by: Dupliziert durch label_blocks: Blockiert label_blocked_by: Blockiert durch label_precedes: Vorgänger von @@ -511,6 +524,9 @@ label_preferences: Präferenzen label_chronological_order: in zeitlicher Reihenfolge label_reverse_chronological_order: in umgekehrter zeitlicher Reihenfolge label_planning: Terminplanung +label_incoming_emails: Eingehende E-Mails +label_generate_key: Generieren +label_issue_watchers: Beobachter button_login: Anmelden button_submit: OK @@ -549,6 +565,7 @@ button_copy: Kopieren button_annotate: Annotieren button_update: Aktualisieren button_configure: Konfigurieren +button_quote: Zitieren status_active: aktiv status_registered: angemeldet @@ -558,6 +575,7 @@ text_select_mail_notifications: Bitte wählen Sie die Aktionen aus, für die ein text_regexp_info: z. B. ^[A-Z0-9]+$ text_min_max_length_info: 0 heißt keine Beschränkung text_project_destroy_confirmation: Sind Sie sicher, dass sie das Projekt löschen wollen? +text_subprojects_destroy_warning: 'Dessen Unterprojekte (%s) werden ebenfalls gelöscht.' text_workflow_edit: Workflow zum Bearbeiten auswählen text_are_you_sure: Sind Sie sicher? text_journal_changed: geändert von %s zu %s @@ -593,6 +611,10 @@ text_destroy_time_entries_question: Es wurden bereits %.02f Stunden auf dieses T text_destroy_time_entries: Gebuchte Aufwände löschen text_assign_time_entries_to_project: Gebuchte Aufwände dem Projekt zuweisen text_reassign_time_entries: 'Gebuchte Aufwände diesem Ticket zuweisen:' +text_user_wrote: '%s schrieb:' +text_enumeration_destroy_question: '%d Objekte sind diesem Wert zugeordnet.' +text_enumeration_category_reassign_to: 'Die Objekte stattdessen diesem Wert zuordnen:' +text_email_delivery_not_configured: "Der SMTP-Server ist nicht konfiguriert und Mailbenachrichtigungen sind ausgeschaltet.\nNehmen Sie die Einstellungen für Ihren SMTP-Server in config/email.yml vor und starten Sie die Applikation neu." default_role_manager: Manager default_role_developper: Entwickler @@ -619,25 +641,3 @@ default_activity_development: Entwicklung enumeration_issue_priorities: Ticket-Prioritäten enumeration_doc_categories: Dokumentenkategorien enumeration_activities: Aktivitäten (Zeiterfassung) -text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' -label_and_its_subprojects: %s and its subprojects -mail_body_reminder: "%d issue(s) that are assigned to you are due in the next %d days:" -mail_subject_reminder: "%d issue(s) due in the next days" -text_user_wrote: '%s wrote:' -label_duplicated_by: duplicated by -setting_enabled_scm: Enabled SCM -text_enumeration_category_reassign_to: 'Reassign them to this value:' -text_enumeration_destroy_question: '%d objects are assigned to this value.' -label_incoming_emails: Incoming emails -label_generate_key: Generate a key -setting_mail_handler_api_enabled: Enable WS for incoming emails -setting_mail_handler_api_key: API key -text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them." -field_parent_title: Parent page -label_issue_watchers: Watchers -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/en.yml b/lang/en.yml index 5ad1e55..8a73a39 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -418,7 +418,7 @@ label_sort_higher: Move up label_sort_lower: Move down label_sort_lowest: Move to bottom label_roadmap: Roadmap -label_roadmap_due_in: Due in +label_roadmap_due_in: Due in %s label_roadmap_overdue: %s late label_roadmap_no_issues: No issues for this version label_search: Search diff --git a/lang/es.yml b/lang/es.yml index 320a169..ae367d8 100644 --- a/lang/es.yml +++ b/lang/es.yml @@ -344,7 +344,7 @@ label_sort_higher: Subir label_sort_lower: Bajar label_sort_lowest: Último label_roadmap: Roadmap -label_roadmap_due_in: Finaliza en +label_roadmap_due_in: Finaliza en %s label_roadmap_no_issues: No hay peticiones para esta versión label_search: Búsqueda label_result: %d resultado diff --git a/lang/fi.yml b/lang/fi.yml index 1953fdf..225563b 100644 --- a/lang/fi.yml +++ b/lang/fi.yml @@ -373,7 +373,7 @@ label_sort_higher: Siirrä ylös label_sort_lower: Siirrä alas label_sort_lowest: Siirrä alimmaiseksi label_roadmap: Roadmap -label_roadmap_due_in: Määräaika +label_roadmap_due_in: Määräaika %s label_roadmap_overdue: %s myöhässä label_roadmap_no_issues: Ei tapahtumia tälle versiolle label_search: Haku diff --git a/lang/fr.yml b/lang/fr.yml index eb52d5a..b640780 100644 --- a/lang/fr.yml +++ b/lang/fr.yml @@ -417,7 +417,7 @@ label_sort_higher: Remonter label_sort_lower: Descendre label_sort_lowest: Descendre en dernier label_roadmap: Roadmap -label_roadmap_due_in: Echéance dans +label_roadmap_due_in: Echéance dans %s label_roadmap_overdue: En retard de %s label_roadmap_no_issues: Aucune demande pour cette version label_search: Recherche diff --git a/lang/he.yml b/lang/he.yml index 7a6c62e..07962d2 100644 --- a/lang/he.yml +++ b/lang/he.yml @@ -357,7 +357,7 @@ label_sort_higher: הזז למעלה label_sort_lower: הזז למטה label_sort_lowest: הזז לתחתית label_roadmap: מפת הדרכים -label_roadmap_due_in: נגמר בעוד +label_roadmap_due_in: %s נגמר בעוד label_roadmap_overdue: %s מאחר label_roadmap_no_issues: אין נושאים לגירסא זו label_search: חפש diff --git a/lang/hu.yml b/lang/hu.yml index ad150b5..3a3d18a 100644 --- a/lang/hu.yml +++ b/lang/hu.yml @@ -407,7 +407,7 @@ label_sort_higher: Eggyel feljebb label_sort_lower: Eggyel lejjebb label_sort_lowest: Az aljára label_roadmap: Életút -label_roadmap_due_in: Elkészültéig várhatóan még +label_roadmap_due_in: Elkészültéig várhatóan még %s label_roadmap_overdue: %s késésben label_roadmap_no_issues: Nincsenek feladatok ehhez a verzióhoz label_search: Keresés diff --git a/lang/it.yml b/lang/it.yml index 2591358..bca7556 100644 --- a/lang/it.yml +++ b/lang/it.yml @@ -147,7 +147,7 @@ field_attr_lastname: Attributo cognome field_attr_mail: Attributo e-mail field_onthefly: Creazione utenza "al volo" field_start_date: Inizio -field_done_ratio: %% completo +field_done_ratio: %% completato field_auth_source: Modalità di autenticazione field_hide_mail: Nascondi il mio indirizzo di e-mail field_comments: Commento @@ -346,13 +346,13 @@ label_latest_revision: Ultima versione label_latest_revision_plural: Ultime versioni label_view_revisions: Mostra versioni label_max_size: Dimensione massima -label_on: 'on' +label_on: su label_sort_highest: Sposta in cima label_sort_higher: Su label_sort_lower: Giù label_sort_lowest: Sposta in fondo label_roadmap: Roadmap -label_roadmap_due_in: Da ultimare in +label_roadmap_due_in: Da ultimare in %s label_roadmap_overdue: %s late label_roadmap_no_issues: Nessuna segnalazione per questa versione label_search: Ricerca @@ -361,15 +361,15 @@ label_all_words: Tutte le parole label_wiki: Wiki label_wiki_edit: Modifica Wiki label_wiki_edit_plural: Modfiche wiki -label_wiki_page: Wiki page -label_wiki_page_plural: Wiki pages -label_index_by_title: Index by title -label_index_by_date: Index by date +label_wiki_page: Pagina Wiki +label_wiki_page_plural: Pagine Wiki +label_index_by_title: Ordina per titolo +label_index_by_date: Ordina per data label_current_version: Versione corrente label_preview: Anteprima label_feed_plural: Feed label_changes_details: Particolari di tutti i cambiamenti -label_issue_tracking: tracking delle segnalazioni +label_issue_tracking: Tracking delle segnalazioni label_spent_time: Tempo impiegato label_f_hour: %.2f ora label_f_hour_plural: %.2f ore @@ -485,7 +485,7 @@ text_comma_separated: Valori multipli permessi (separati da virgola). text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages text_issue_added: "E' stata segnalata l'anomalia %s da %s." text_issue_updated: "L'anomalia %s e' stata aggiornata da %s." -text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ? +text_wiki_destroy_confirmation: Sicuro di voler cancellare questo wiki e tutti i suoi contenuti? text_issue_category_destroy_question: Alcune segnalazioni (%d) risultano assegnate a questa categoria. Cosa vuoi fare ? text_issue_category_destroy_assignments: Rimuovi gli assegnamenti a questa categoria text_issue_category_reassign_to: Riassegna segnalazioni a questa categoria @@ -535,7 +535,7 @@ label_user_mail_option_selected: "Solo per gli eventi relativi ai progetti selez label_user_mail_option_all: "Per ogni evento relativo ad uno dei miei progetti" label_user_mail_option_none: "Solo per argomenti che osservo o che mi riguardano" setting_emails_footer: Piè di pagina e-mail -label_float: Float +label_float: Decimale button_copy: Copia mail_body_account_information_external: Puoi utilizzare il tuo account "%s" per accedere al sistema. mail_body_account_information: Le informazioni riguardanti il tuo account @@ -633,10 +633,10 @@ setting_mail_handler_api_enabled: Abilita WS per le e-mail in arrivo setting_mail_handler_api_key: chiave API text_email_delivery_not_configured: "La consegna via e-mail non è configurata e le notifiche sono disabilitate.\nConfigura il tuo server SMTP in config/email.yml e riavvia l'applicazione per abilitarle." field_parent_title: Parent page -label_issue_watchers: Watchers -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 +label_issue_watchers: Osservatori +setting_commit_logs_encoding: Codifica dei messaggi di commit +button_quote: Quota +setting_sequential_project_identifiers: Genera progetti con identificativi in sequenza +notice_unable_delete_version: Impossibile cancellare la versione +label_renamed: rinominato +label_copied: copiato diff --git a/lang/ja.yml b/lang/ja.yml index c38c2ef..4e46212 100644 --- a/lang/ja.yml +++ b/lang/ja.yml @@ -353,7 +353,7 @@ label_sort_higher: 上へ label_sort_lower: 下へ label_sort_lowest: 一番下へ label_roadmap: ロードマップ -label_roadmap_due_in: 期日まで +label_roadmap_due_in: 期日まで %s label_roadmap_overdue: %s late label_roadmap_no_issues: このバージョンに向けてのチケットはありません label_search: 検索 diff --git a/lang/ko.yml b/lang/ko.yml index 27adf16..c23ea71 100644 --- a/lang/ko.yml +++ b/lang/ko.yml @@ -359,7 +359,7 @@ label_sort_higher: 위로 label_sort_lower: 아래로 label_sort_lowest: 최하단으로 label_roadmap: 로드맵 -label_roadmap_due_in: 기한 +label_roadmap_due_in: 기한 %s label_roadmap_overdue: %s 지연 label_roadmap_no_issues: 이버전에 해당하는 이슈 없음 label_search: 검색 diff --git a/lang/lt.yml b/lang/lt.yml index 5110a6b..f29c28c 100644 --- a/lang/lt.yml +++ b/lang/lt.yml @@ -371,7 +371,7 @@ label_sort_higher: Perkelti į viršų label_sort_lower: Perkelti žemyn label_sort_lowest: Perkelti į apačią label_roadmap: Veiklos grafikas -label_roadmap_due_in: Baigiasi po +label_roadmap_due_in: Baigiasi po %s label_roadmap_overdue: %s vėluojama label_roadmap_no_issues: Jokio darbo šiai versijai nėra label_search: Ieškoti diff --git a/lang/nl.yml b/lang/nl.yml index 10d02cc..8fd96d1 100644 --- a/lang/nl.yml +++ b/lang/nl.yml @@ -352,7 +352,7 @@ label_sort_higher: Verplaats naar boven label_sort_lower: Verplaats naar beneden label_sort_lowest: Verplaats naar eind label_roadmap: Roadmap -label_roadmap_due_in: Voldaan in +label_roadmap_due_in: Voldaan in %s label_roadmap_overdue: %s overtijd label_roadmap_no_issues: Geen issues voor deze versie label_search: Zoeken diff --git a/lang/no.yml b/lang/no.yml index 2b78826..8cd6952 100644 --- a/lang/no.yml +++ b/lang/no.yml @@ -410,7 +410,7 @@ label_sort_higher: Flytt opp label_sort_lower: Flytt ned label_sort_lowest: Flytt til bunnen label_roadmap: Veikart -label_roadmap_due_in: Frist om +label_roadmap_due_in: Frist om %s label_roadmap_overdue: %s over fristen label_roadmap_no_issues: Ingen saker for denne versjonen label_search: Søk diff --git a/lang/pl.yml b/lang/pl.yml index 6bdac48..5003db7 100644 --- a/lang/pl.yml +++ b/lang/pl.yml @@ -344,7 +344,7 @@ label_sort_higher: Do góry label_sort_lower: Do dołu label_sort_lowest: Przesuń na dół label_roadmap: Mapa -label_roadmap_due_in: W czasie +label_roadmap_due_in: W czasie %s label_roadmap_no_issues: Brak zagadnień do tej wersji label_search: Szukaj label_result_plural: Rezultatów diff --git a/lang/pt-br.yml b/lang/pt-br.yml index a4bbefe..3e314af 100644 --- a/lang/pt-br.yml +++ b/lang/pt-br.yml @@ -415,7 +415,7 @@ label_sort_higher: Mover para cima label_sort_lower: Mover para baixo label_sort_lowest: Mover para o fim label_roadmap: Planejamento -label_roadmap_due_in: Previsto para +label_roadmap_due_in: Previsto para %s label_roadmap_overdue: %s atrasado label_roadmap_no_issues: Sem tickets para esta versão label_search: Busca diff --git a/lang/pt.yml b/lang/pt.yml index 98cde78..e968ef3 100644 --- a/lang/pt.yml +++ b/lang/pt.yml @@ -17,24 +17,24 @@ actionview_datehelper_time_in_words_minute_plural: %d minutos actionview_datehelper_time_in_words_minute_single: 1 minuto actionview_datehelper_time_in_words_second_less_than: menos de um segundo actionview_datehelper_time_in_words_second_less_than_plural: menos de %d segundos -actionview_instancetag_blank_option: Selecione +actionview_instancetag_blank_option: Seleccione activerecord_error_inclusion: não existe na lista activerecord_error_exclusion: já existe na lista activerecord_error_invalid: é inválido -activerecord_error_confirmation: não confere com sua confirmação -activerecord_error_accepted: deve ser aceito +activerecord_error_confirmation: não está de acordo com sua confirmação +activerecord_error_accepted: deve ser aceite activerecord_error_empty: não pode ser vazio activerecord_error_blank: não pode estar em branco activerecord_error_too_long: é muito longo activerecord_error_too_short: é muito curto activerecord_error_wrong_length: possui o comprimento errado -activerecord_error_taken: já foi usado em outro registro +activerecord_error_taken: já foi usado em outro registo activerecord_error_not_a_number: não é um número activerecord_error_not_a_date: não é uma data válida activerecord_error_greater_than_start_date: deve ser maior que a data inicial -activerecord_error_not_same_project: não pertence ao mesmo projeto -activerecord_error_circular_dependency: Este relaão pode criar uma dependência circular +activerecord_error_not_same_project: não pertence ao mesmo projecto +activerecord_error_circular_dependency: Esta relação pode criar uma dependência circular general_fmt_age: %d ano general_fmt_age_plural: %d anos @@ -54,33 +54,33 @@ general_pdf_encoding: ISO-8859-1 general_day_names: Segunda,Terça,Quarta,Quinta,Sexta,Sábado,Domingo general_first_day_of_week: '1' -notice_account_updated: Conta foi atualizada com sucesso. -notice_account_invalid_creditentials: Usuário ou senha inválidos. -notice_account_password_updated: Senha foi alterada com sucesso. -notice_account_wrong_password: Senha errada. -notice_account_register_done: Conta foi criada com sucesso. -notice_account_unknown_email: Usuário desconhecido. -notice_can_t_change_password: Esta conta usa autenticação externa. E impossível trocar a senha. -notice_account_lost_email_sent: Um email com as instruções para escolher uma nova senha foi enviado para você. -notice_account_activated: Sua conta foi ativada. Você pode logar agora +notice_account_updated: Conta actualizada com sucesso. +notice_account_invalid_creditentials: Utilizador ou palavra-chave inválidos. +notice_account_password_updated: Palavra-chave foi alterada com sucesso. +notice_account_wrong_password: Palavra-chave errada. +notice_account_register_done: Conta criada com sucesso. +notice_account_unknown_email: Utilizador desconhecido. +notice_can_t_change_password: Esta conta utiliza autenticação externa. Não é possível alterar a palavra-chave. +notice_account_lost_email_sent: Foi enviado e-mail com as instruções para criar uma nova palavra-chave. +notice_account_activated: Conta foi activada. Pode ligar-se agora notice_successful_create: Criado com sucesso. notice_successful_update: Alterado com sucesso. notice_successful_delete: Apagado com sucesso. -notice_successful_connection: Conectado com sucesso. -notice_file_not_found: A página que você está tentando acessar não existe ou foi excluída. -notice_locking_conflict: Os dados foram atualizados por um outro usuário. -notice_not_authorized: Você não está autorizado a acessar esta página. -notice_email_sent: An email was sent to %s -notice_email_error: An error occurred while sending mail (%s) -notice_feeds_access_key_reseted: Your RSS access key was reseted. +notice_successful_connection: Ligado com sucesso. +notice_file_not_found: A página que está a tentar aceder não existe ou foi eliminada. +notice_locking_conflict: Os dados foram actualizados por outro utilizador. +notice_not_authorized: Não está autorizado a visualizar esta página. +notice_email_sent: Foi enviado um e-mail para %s +notice_email_error: Ocorreu um erro ao enviar o e-mail (%s) +notice_feeds_access_key_reseted: A sua chave RSS foi inicializada. error_scm_not_found: "A entrada e/ou a revisão não existem no repositório." -error_scm_command_failed: "An error occurred when trying to access the repository: %s" +error_scm_command_failed: "Ocorreu um erro ao tentar aceder ao repositorio: %s" -mail_subject_lost_password: Sua senha do %s. -mail_body_lost_password: 'Para mudar sua senha, clique no link abaixo:' -mail_subject_register: Ativação de conta do %s. -mail_body_register: 'Para ativar sua conta, clique no link abaixo:' +mail_subject_lost_password: Palavra-chave do %s. +mail_body_lost_password: 'Para mudar a palavra-chave, clique no link abaixo:' +mail_subject_register: Activação de conta do %s. +mail_body_register: 'Para activar a conta, clique no link abaixo:' gui_validation_error: 1 erro gui_validation_error_plural: %d erros @@ -91,7 +91,7 @@ field_summary: Sumário field_is_required: Obrigatório field_firstname: Primeiro nome field_lastname: Último nome -field_mail: Email +field_mail: E-mail field_filename: Arquivo field_filesize: Tamanho field_downloads: Downloads @@ -99,7 +99,7 @@ field_author: Autor field_created_on: Criado field_updated_on: Alterado field_field_format: Formato -field_is_for_all: Para todos os projetos +field_is_for_all: Para todos os projectos field_possible_values: Possíveis valores field_regexp: Expressão regular field_min_length: Tamanho mínimo @@ -107,33 +107,33 @@ field_max_length: Tamanho máximo field_value: Valor field_category: Categoria field_title: Título -field_project: Projeto +field_project: Projecto field_issue: Tarefa -field_status: Status +field_status: Estado field_notes: Notas field_is_closed: Tarefa fechada -field_is_default: Status padrão +field_is_default: Estado padrão field_tracker: Tipo field_subject: Assunto field_due_date: Data final -field_assigned_to: Atribuído para +field_assigned_to: Atribuído a field_priority: Prioridade -field_fixed_version: Target version -field_user: Usuário +field_fixed_version: Versão +field_user: Utilizador field_role: Regra field_homepage: Página inicial field_is_public: Público -field_parent: Sub-projeto de +field_parent: Subprojecto de field_is_in_chlog: Tarefas mostradas no changelog field_is_in_roadmap: Tarefas mostradas no roadmap -field_login: Login -field_mail_notification: Notificações por email +field_login: Utilizador +field_mail_notification: Notificações por e-mail field_admin: Administrador -field_last_login_on: Última conexão +field_last_login_on: Último acesso field_language: Língua field_effective_date: Data -field_password: Senha -field_new_password: Nova senha +field_password: Palavra-chave +field_new_password: Nova palavra-chave field_password_confirmation: Confirmação field_version: Versão field_type: Tipo @@ -141,60 +141,60 @@ field_host: Servidor field_port: Porta field_account: Conta field_base_dn: Base DN -field_attr_login: Atributo login +field_attr_login: Atributo utilizador field_attr_firstname: Atributo primeiro nome field_attr_lastname: Atributo último nome -field_attr_mail: Atributo email -field_onthefly: Criação de usuário sob-demanda +field_attr_mail: Atributo e-mail +field_onthefly: Criação de utilizadores sob demanda field_start_date: Início field_done_ratio: %% Terminado field_auth_source: Modo de autenticação -field_hide_mail: Esconda meu email +field_hide_mail: Esconder endereço de e-mail field_comments: Comentário field_url: URL field_start_page: Página inicial -field_subproject: Sub-projeto +field_subproject: Subprojecto field_hours: Horas -field_activity: Atividade +field_activity: Actividade field_spent_on: Data field_identifier: Identificador field_is_filter: Usado como filtro field_issue_to_id: Tarefa relacionada field_delay: Atraso -field_assignable: Issues can be assigned to this role -field_redirect_existing_links: Redirect existing links -field_estimated_hours: Estimated time +field_assignable: As tarefas não podem ser associados a esta regra +field_redirect_existing_links: Redireccionar as hiperligações +field_estimated_hours: Estimativa de horas field_default_value: Padrão setting_app_title: Título da aplicação -setting_app_subtitle: Sub-título da aplicação +setting_app_subtitle: Subtítulo da aplicação setting_welcome_text: Texto de boas-vindas setting_default_language: Linguagem padrão setting_login_required: Autenticação obrigatória setting_self_registration: Registro permitido setting_attachment_max_size: Tamanho máximo do anexo setting_issues_export_limit: Limite de exportação das tarefas -setting_mail_from: Email enviado de +setting_mail_from: E-mail enviado de setting_host_name: Servidor setting_text_formatting: Formato do texto setting_wiki_compression: Compactação do histórico do Wiki setting_feeds_limit: Limite do Feed setting_autofetch_changesets: Buscar automaticamente commits -setting_sys_api_enabled: Ativa WS para gerenciamento do repositório -setting_commit_ref_keywords: Palavras-chave de referôncia +setting_sys_api_enabled: Activar Web Service para gestão do repositório +setting_commit_ref_keywords: Palavras-chave de referência setting_commit_fix_keywords: Palavras-chave fixas -setting_autologin: Autologin -setting_date_format: Date format -setting_cross_project_issue_relations: Allow cross-project issue relations +setting_autologin: Acesso automático +setting_date_format: Formato da data +setting_cross_project_issue_relations: Permitir relações de tarefas de projectos diferentes -label_user: Usuário -label_user_plural: Usuários -label_user_new: Novo usuário -label_project: Projeto -label_project_new: Novo projeto -label_project_plural: Projetos -label_project_all: All Projects -label_project_latest: Últimos projetos +label_user: Utilizador +label_user_plural: Utilizadores +label_user_new: Novo utilizador +label_project: Projecto +label_project_new: Novo projecto +label_project_plural: Projectos +label_project_all: Todos os projectos +label_project_latest: Últimos projectos label_issue: Tarefa label_issue_new: Nova tarefa label_issue_plural: Tarefas @@ -213,9 +213,9 @@ label_tracker: Tipo label_tracker_plural: Tipos label_tracker_new: Novo tipo label_workflow: Workflow -label_issue_status: Status da tarefa -label_issue_status_plural: Status das tarefas -label_issue_status_new: Novo status +label_issue_status: Estado da tarefa +label_issue_status_plural: Estado das tarefas +label_issue_status_new: Novo estado label_issue_category: Categoria da tarefa label_issue_category_plural: Categorias das tarefas label_issue_category_new: Nova categoria @@ -226,32 +226,32 @@ label_enumerations: Enumeração label_enumeration_new: Novo valor label_information: Informação label_information_plural: Informações -label_please_login: Efetue login -label_register: Registre-se -label_password_lost: Perdi a senha +label_please_login: Efectuar acesso +label_register: Registe-se +label_password_lost: Perdi a palavra-chave label_home: Página inicial -label_my_page: Minha página +label_my_page: Página pessoal label_my_account: Minha conta -label_my_projects: Meus projetos +label_my_projects: Meus projectos label_administration: Administração -label_login: Login -label_logout: Logout +label_login: Entrar +label_logout: Sair label_help: Ajuda label_reported_issues: Tarefas reportadas -label_assigned_to_me_issues: Tarefas atribuídas à mim -label_last_login: Útima conexão +label_assigned_to_me_issues: Tarefas atribuídas +label_last_login: Último acesso label_last_updates: Última alteração label_last_updates_plural: %d Últimas alterações -label_registered_on: Registrado em -label_activity: Atividade +label_registered_on: Registado em +label_activity: Actividade label_new: Novo -label_logged_as: Logado como +label_logged_as: Ligado como label_environment: Ambiente label_authentication: Autenticação label_auth_source: Modo de autenticação label_auth_source_new: Novo modo de autenticação label_auth_source_plural: Modos de autenticação -label_subproject_plural: Sub-projetos +label_subproject_plural: Subprojectos label_min_max_length: Tamanho min-max label_list: Lista label_date: Data @@ -264,7 +264,7 @@ label_attribute_plural: Atributos label_download: %d Download label_download_plural: %d Downloads label_no_data: Sem dados para mostrar -label_change_status: Mudar status +label_change_status: Mudar estado label_history: Histórico label_attachment: Arquivo label_attachment_new: Novo arquivo @@ -286,15 +286,15 @@ label_version_plural: Versões label_confirmation: Confirmação label_export_to: Exportar para label_read: Ler... -label_public_projects: Projetos públicos +label_public_projects: Projectos públicos label_open_issues: Aberto label_open_issues_plural: Abertos label_closed_issues: Fechado label_closed_issues_plural: Fechados label_total: Total label_permissions: Permissões -label_current_status: Status atual -label_new_statuses_allowed: Novo status permitido +label_current_status: Estado actual +label_new_statuses_allowed: Novo estado permitido label_all: todos label_none: nenhum label_next: Próximo @@ -309,7 +309,7 @@ label_gantt: Gantt label_internal: Interno label_last_changes: últimas %d mudanças label_change_view_all: Mostrar todas as mudanças -label_personalize_page: Personalizar esta página +label_personalize_page: Personalizar página label_comment: Comentário label_comment_plural: Comentários label_comment_add: Adicionar comentário @@ -326,7 +326,7 @@ label_in_less_than: é maior que label_in_more_than: é menor que label_in: em label_today: hoje -label_this_week: this week +label_this_week: esta semana label_less_than_ago: faz menos de label_more_than_ago: faz mais de label_ago: dias atrás @@ -341,7 +341,7 @@ label_revision: Revisão label_revision_plural: Revisões label_added: adicionado label_modified: modificado -label_deleted: deletado +label_deleted: apagado label_latest_revision: Última revisão label_latest_revision_plural: Últimas revisões label_view_revisions: Ver revisões @@ -353,20 +353,20 @@ label_sort_lower: Mover para baixo label_sort_lowest: Mover para o fim label_roadmap: Roadmap label_roadmap_due_in: Termina em -label_roadmap_overdue: %s late +label_roadmap_overdue: %s atrasado label_roadmap_no_issues: Sem tarefas para essa versão -label_search: Busca +label_search: Procurar label_result_plural: Resultados label_all_words: Todas as palavras label_wiki: Wiki -label_wiki_edit: Wiki edit -label_wiki_edit_plural: Wiki edits -label_wiki_page: Wiki page -label_wiki_page_plural: Wiki pages -label_index_by_title: Index by title -label_index_by_date: Index by date -label_current_version: Versão atual -label_preview: Prévia +label_wiki_edit: Editar Wiki +label_wiki_edit_plural: Editar Wiki's +label_wiki_page: Página de Wiki +label_wiki_page_plural: Páginas de Wiki +label_index_by_title: Índice por título +label_index_by_date: Índice por data +label_current_version: Versão actual +label_preview: Pré-visualizar label_feed_plural: Feeds label_changes_details: Detalhes de todas as mudanças label_issue_tracking: Tarefas @@ -386,10 +386,10 @@ label_copy_workflow_from: Copiar workflow de label_permissions_report: Relatório de permissões label_watched_issues: Tarefas observadas label_related_issues: tarefas relacionadas -label_applied_status: Status aplicado +label_applied_status: Estado aplicado label_loading: Carregando... label_relation_new: Nova relação -label_relation_delete: Deletar relação +label_relation_delete: Apagar relação label_relates_to: relacionado à label_duplicates: duplicadas label_blocks: bloqueios @@ -398,38 +398,38 @@ label_precedes: procede label_follows: segue label_end_to_start: fim ao início label_end_to_end: fim ao fim -label_start_to_start: ínícia ao inícia -label_start_to_end: inícia ao fim -label_stay_logged_in: Rester connecté -label_disabled: désactivé -label_show_completed_versions: Voire les versions passées -label_me: me +label_start_to_start: início ao início +label_start_to_end: início ao fim +label_stay_logged_in: Guardar sessão +label_disabled: desactivar +label_show_completed_versions: Ver as versões completas +label_me: Eu label_board: Forum -label_board_new: New forum -label_board_plural: Forums -label_topic_plural: Topics -label_message_plural: Messages -label_message_last: Last message -label_message_new: New message -label_reply_plural: Replies -label_send_information: Send account information to the user -label_year: Year -label_month: Month -label_week: Week -label_date_from: From -label_date_to: To -label_language_based: Language based -label_sort_by: Sort by %s -label_send_test_email: Send a test email -label_feeds_access_key_created_on: RSS access key created %s ago -label_module_plural: Modules -label_added_time_by: Added by %s %s ago -label_updated_time: Updated %s ago -label_jump_to_a_project: Jump to a project... +label_board_new: Novo forum +label_board_plural: Foruns +label_topic_plural: Topicos +label_message_plural: Mensagens +label_message_last: Ultima mensagem +label_message_new: Nova mensagem +label_reply_plural: Respostas +label_send_information: Enviar dados da conta para o utilizador +label_year: Ano +label_month: Mês +label_week: Semana +label_date_from: De +label_date_to: Para +label_language_based: Baseado na língua +label_sort_by: Ordenar por %s +label_send_test_email: Enviar e-mail de teste +label_feeds_access_key_created_on: Chave RSS criada à %s atrás +label_module_plural: Módulos +label_added_time_by: Adicionado por %s %s atrás +label_updated_time: Actualizado %s atrás +label_jump_to_a_project: Ir para o projecto... -button_login: Login +button_login: Entrar button_submit: Enviar -button_save: Salvar +button_save: Guardar button_check_all: Marcar todos button_uncheck_all: Desmarcar todos button_delete: Apagar @@ -448,195 +448,195 @@ button_view: Ver button_move: Mover button_back: Voltar button_cancel: Cancelar -button_activate: Ativar +button_activate: Activar button_sort: Ordenar button_log_time: Tempo de trabalho button_rollback: Voltar para esta versão button_watch: Observar button_unwatch: Não observar -button_reply: Reply -button_archive: Archive -button_unarchive: Unarchive -button_reset: Reset -button_rename: Rename +button_reply: Responder +button_archive: Arquivar +button_unarchive: Desarquivar +button_reset: Reinicializar +button_rename: Renomear -status_active: ativo +status_active: activo status_registered: registrado status_locked: bloqueado -text_select_mail_notifications: Selecionar ações para ser enviada uma notificação por email +text_select_mail_notifications: Seleccionar as acções que originam uma notificação por e-mail text_regexp_info: ex. ^[A-Z0-9]+$ text_min_max_length_info: 0 siginifica sem restrição -text_project_destroy_confirmation: Você tem certeza que deseja deletar este projeto e todos os dados relacionados? -text_workflow_edit: Selecione uma regra e um tipo de tarefa para editar o workflow -text_are_you_sure: Você tem certeza ? +text_project_destroy_confirmation: Você tem certeza que deseja apagar este projecto e todos os dados relacionados? +text_workflow_edit: Seleccione uma regra e um tipo de tarefa para editar o workflow +text_are_you_sure: Você tem certeza? text_journal_changed: alterado de %s para %s text_journal_set_to: alterar para %s text_journal_deleted: apagado text_tip_task_begin_day: tarefa começa neste dia text_tip_task_end_day: tarefa termina neste dia text_tip_task_begin_end_day: tarefa começa e termina neste dia -text_project_identifier_info: 'Letras minúsculas (a-z), números e traços permitido.
Uma vez salvo, o identificador nao pode ser mudado.' -text_caracters_maximum: %d móximo de caracteres +text_project_identifier_info: 'Letras minúsculas (a-z), números e traços permitido.
Uma vez gravado, o identificador nao pode ser mudado.' +text_caracters_maximum: %d máximo de caracteres text_length_between: Tamanho entre %d e %d caracteres. text_tracker_no_workflow: Sem workflow definido para este tipo. text_unallowed_characters: Caracteres não permitidos -text_comma_separated: Permitido múltiplos valores (separados por vírgula). +text_comma_separated: Permitidos múltiplos valores (separados por vírgula). text_issues_ref_in_commit_messages: Referenciando e arrumando tarefas nas mensagens de commit text_issue_added: Tarefa %s foi incluída (by %s). text_issue_updated: Tarefa %s foi alterada (by %s). -text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ? -text_issue_category_destroy_question: Some issues (%d) are assigned to this category. What do you want to do ? -text_issue_category_destroy_assignments: Remove category assignments -text_issue_category_reassign_to: Reassing issues to this category +text_wiki_destroy_confirmation: Tem certeza que quer apagar esta página de wiki e todo o conteudo relacionado? +text_issue_category_destroy_question: Existem tarefas (%d) associadas a esta categoria. Seleccione uma opção? +text_issue_category_destroy_assignments: Remover as relações com a categoria +text_issue_category_reassign_to: Re-associar as tarefas á categoria -default_role_manager: Gerente de Projeto +default_role_manager: Gestor de Projecto default_role_developper: Desenvolvedor default_role_reporter: Analista de Suporte default_tracker_bug: Bug -default_tracker_feature: Implementaçõo +default_tracker_feature: Implementação default_tracker_support: Suporte default_issue_status_new: Novo default_issue_status_assigned: Atribuído default_issue_status_resolved: Resolvido -default_issue_status_feedback: Feedback +default_issue_status_feedback: Comentário default_issue_status_closed: Fechado default_issue_status_rejected: Rejeitado -default_doc_category_user: Documentação do usuário +default_doc_category_user: Documentação do utilizador default_doc_category_tech: Documentação técnica default_priority_low: Baixo default_priority_normal: Normal default_priority_high: Alto default_priority_urgent: Urgente default_priority_immediate: Imediato -default_activity_design: Design +default_activity_design: Desenho default_activity_development: Desenvolvimento enumeration_issue_priorities: Prioridade das tarefas enumeration_doc_categories: Categorias de documento -enumeration_activities: Atividades (time tracking) -label_file_plural: Files -label_changeset_plural: Changesets -field_column_names: Columns -label_default_columns: Default columns -setting_issue_list_default_columns: Default columns displayed on the issue list -setting_repositories_encodings: Repositories encodings -notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit." -label_bulk_edit_selected_issues: Bulk edit selected issues -label_no_change_option: (No change) -notice_failed_to_save_issues: "Failed to save %d issue(s) on %d selected: %s." -label_theme: Theme -label_default: Default -label_search_titles_only: Search titles only -label_nobody: nobody -button_change_password: Change password -text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)." -label_user_mail_option_selected: "For any event on the selected projects only..." -label_user_mail_option_all: "For any event on all my projects" -label_user_mail_option_none: "Only for things I watch or I'm involved in" -setting_emails_footer: Emails footer +enumeration_activities: Actividades (time tracking) +label_file_plural: Arquivos +label_changeset_plural: Alterações +field_column_names: Colunas +label_default_columns: Valores por defeito das colunas +setting_issue_list_default_columns: Colunas listadas nas tarefas por defeito +setting_repositories_encodings: Codificação dos repositórios +notice_no_issue_selected: "Nenhuma tarefa seleccionada! Por favor, selecione uma tarefa para editar." +label_bulk_edit_selected_issues: Edição em massa das tarefas seleccionadas +label_no_change_option: (Sem alterações) +notice_failed_to_save_issues: "Erro ao gravar %d tarefa(s) no %d seleccionado: %s." +label_theme: Tema +label_default: Padrão +label_search_titles_only: Procurar apenas nos títulos +label_nobody: desconhecido +button_change_password: Alterar palavra-chave +text_user_mail_option: "Para os projectos não seleccionados, irá receber e-mails de notificação apenas de eventos que esteja a observar ou envolvido (isto é, tarefas que é autor ou que estão atribuidas a si)." +label_user_mail_option_selected: "Qualquer evento que ocorra nos projectos selecionados apenas..." +label_user_mail_option_all: "Todos eventos em todos os projectos" +label_user_mail_option_none: "Apenas eventos que sou observador ou que estou envolvido" +setting_emails_footer: Rodapé do e-mail label_float: Float -button_copy: Copy -mail_body_account_information_external: You can use your "%s" account to log in. -mail_body_account_information: Your account information -setting_protocol: Protocol -label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself" -setting_time_format: Time format -label_registration_activation_by_email: account activation by email -mail_subject_account_activation_request: %s account activation request -mail_body_account_activation_request: 'A new user (%s) has registered. His account his pending your approval:' -label_registration_automatic_activation: automatic account activation -label_registration_manual_activation: manual account activation -notice_account_pending: "Your account was created and is now pending administrator approval." -field_time_zone: Time zone -text_caracters_minimum: Must be at least %d characters long. -setting_bcc_recipients: Blind carbon copy recipients (bcc) -button_annotate: Annotate -label_issues_by: Issues by %s -field_searchable: Searchable -label_display_per_page: 'Per page: %s' +button_copy: Copiar +mail_body_account_information_external: Pode utilizar a sua conta "%s" para entrar. +mail_body_account_information: Informação da sua conta de acesso +setting_protocol: Protocolo +label_user_mail_no_self_notified: "Não quero ser notificado de alterações efectuadas por mim" +setting_time_format: Formato da hora +label_registration_activation_by_email: Activação de conta de acesso por e-mail +mail_subject_account_activation_request: %s pedido de activação de conta de acesso +mail_body_account_activation_request: 'Novo utilizador (%s) registado. Conta de acesso pendente a aguardar validação:' +label_registration_automatic_activation: Activação de conta de acesso automático +label_registration_manual_activation: activação de conta de acesso manual +notice_account_pending: "Conta de acesso criada, mas pendente para validação do administrador" +field_time_zone: Fuso horário +text_caracters_minimum: Tem que ter no minimo %d caracteres. +setting_bcc_recipients: Esconder endereços destinos de e-mail (bcc) +button_annotate: Anotar +label_issues_by: tarefas por %s +field_searchable: Pesquisável +label_display_per_page: 'Por página: %s' setting_per_page_options: Objects per page options -label_age: Age -notice_default_data_loaded: Default configuration successfully loaded. -text_load_default_configuration: Load the default configuration -text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded." -error_can_t_load_default_data: "Default configuration could not be loaded: %s" -button_update: Update -label_change_properties: Change properties -label_general: General -label_repository_plural: Repositories -label_associated_revisions: Associated revisions -setting_user_format: Users display format +label_age: Idade +notice_default_data_loaded: Configuração inicial por defeito carregada. +text_load_default_configuration: Inserir configuração por defeito inicial +text_no_configuration_data: "Regras, trackers, estado das tarefas e workflow ainda não foram configurados.\nÉ recomendado que carregue a configuração por defeito. Posteriormente poderá alterar a configuração carregada." +error_can_t_load_default_data: "Configuração inical por defeito não pode ser carregada: %s" +button_update: Actualizar +label_change_properties: Alterar propriedades +label_general: Geral +label_repository_plural: Repositórios +label_associated_revisions: Versões associadas +setting_user_format: Formato para visualizar o utilizador text_status_changed_by_changeset: Applied in changeset %s. -label_more: More -text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?' +label_more: mais +text_issues_destroy_confirmation: 'Tem certeza que deseja apagar as tarefa(s) seleccionada(s)?' label_scm: SCM -text_select_project_modules: 'Select modules to enable for this project:' -label_issue_added: Issue added -label_issue_updated: Issue updated -label_document_added: Document added -label_message_posted: Message added -label_file_added: File added -label_news_added: News added +text_select_project_modules: 'Seleccione o(s) modulo(s) que deseja activar para o projecto:' +label_issue_added: Tarefa adicionada +label_issue_updated: Tarefa alterada +label_document_added: Documento adicionado +label_message_posted: Mensagem adicionada +label_file_added: Arquivo adicionado +label_news_added: Noticia adicionada project_module_boards: Boards -project_module_issue_tracking: Issue tracking +project_module_issue_tracking: Tracking de tarefas project_module_wiki: Wiki -project_module_files: Files -project_module_documents: Documents -project_module_repository: Repository -project_module_news: News +project_module_files: Ficheiros +project_module_documents: Documentos +project_module_repository: Repositório +project_module_news: Noticias project_module_time_tracking: Time tracking -text_file_repository_writable: File repository writable -text_default_administrator_account_changed: Default administrator account changed -text_rmagick_available: RMagick available (optional) -button_configure: Configure +text_file_repository_writable: Repositório de ficheiros com permissões de escrita +text_default_administrator_account_changed: Dados da conta de administrador padrão alterados +text_rmagick_available: RMagick disponível (opcional) +button_configure: Configurar label_plugins: Plugins -label_ldap_authentication: LDAP authentication +label_ldap_authentication: autenticação por LDAP label_downloads_abbr: D/L -label_this_month: this month -label_last_n_days: last %d days -label_all_time: all time -label_this_year: this year -label_date_range: Date range -label_last_week: last week -label_yesterday: yesterday -label_last_month: last month -label_add_another_file: Add another file -label_optional_description: Optional description -text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ? -error_issue_not_found_in_project: 'The issue was not found or does not belong to this project' -text_assign_time_entries_to_project: Assign reported hours to the project -text_destroy_time_entries: Delete reported hours -text_reassign_time_entries: 'Reassign reported hours to this issue:' -setting_activity_days_default: Days displayed on project activity -label_chronological_order: In chronological order -field_comments_sorting: Display comments -label_reverse_chronological_order: In reverse chronological order -label_preferences: Preferences -setting_display_subprojects_issues: Display subprojects issues on main projects by default -label_overall_activity: Overall activity -setting_default_projects_public: New projects are public by default -error_scm_annotate: "The entry does not exist or can not be annotated." -label_planning: Planning -text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.' -label_and_its_subprojects: %s and its subprojects -mail_body_reminder: "%d issue(s) that are assigned to you are due in the next %d days:" -mail_subject_reminder: "%d issue(s) due in the next days" -text_user_wrote: '%s wrote:' -label_duplicated_by: duplicated by -setting_enabled_scm: Enabled SCM -text_enumeration_category_reassign_to: 'Reassign them to this value:' -text_enumeration_destroy_question: '%d objects are assigned to this value.' -label_incoming_emails: Incoming emails -label_generate_key: Generate a key -setting_mail_handler_api_enabled: Enable WS for incoming emails -setting_mail_handler_api_key: API key -text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them." -field_parent_title: Parent page -label_issue_watchers: Watchers -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 +label_this_month: este mês +label_last_n_days: últimos %d dias +label_all_time: todo o tempo +label_this_year: este ano +label_date_range: intervalo de datas +label_last_week: ultima semana +label_yesterday: ontem +label_last_month: último mês +label_add_another_file: Adicionar outro ficheiro +label_optional_description: Descrição opcional +text_destroy_time_entries_question: %.02f horas reportadas nesta tarefa. Estas horas serão eliminada. Continuar? +error_issue_not_found_in_project: 'Esta tarefa não foi encontrada ou não pertence a este projecto' +text_assign_time_entries_to_project: Associar as horas reportadas ao projecto +text_destroy_time_entries: Apagar as horas reportadas +text_reassign_time_entries: 'Re-associar as horas reportadas a esta tarefa:' +setting_activity_days_default: dias visualizados da actividade do projecto +label_chronological_order: Ordem cronológica +field_comments_sorting: Apresentar comentários +label_reverse_chronological_order: Ordem cronológica inversa +label_preferences: Preferências +setting_display_subprojects_issues: Ver tarefas dos subprojectos no projecto principal por defeito +label_overall_activity: Ver todas as actividades +setting_default_projects_public: Novos projectos são classificados como publicos por defeito +error_scm_annotate: "Esta entrada não existe ou não pode ser alterada." +label_planning: Plano +text_subprojects_destroy_warning: 'O(s) subprojecto(s): %s serão tambem apagados.' +label_and_its_subprojects: %s e os subprojectos +mail_body_reminder: "%d tarefa(s) que estão associadas a si e que tem de ser feitas nos próximos %d dias:" +mail_subject_reminder: "%d tarefa(s) para fazer nos próximos dias" +text_user_wrote: '%s escreveu:' +label_duplicated_by: duplicado por +setting_enabled_scm: Activar SCM +text_enumeration_category_reassign_to: 're-associar a este valor:' +text_enumeration_destroy_question: '%d objectos estão associados com este valor.' +label_incoming_emails: Receber e-mails +label_generate_key: Gerar uma chave +setting_mail_handler_api_enabled: Activar Serviço Web para as receber mensagens de e-mail +setting_mail_handler_api_key: Chave da API +text_email_delivery_not_configured: "Servidor de e-mail por configurar e notificações inactivas.\nConfigure o servidor de e-mail (SMTP) no ficheiro config/email.yml e re-inicie a aplicação." +field_parent_title: Página origem +label_issue_watchers: Observadores +setting_commit_logs_encoding: Guardar codificação das mensagens de log +button_quote: Comentário +setting_sequential_project_identifiers: Gerar identificador sequencial +notice_unable_delete_version: Impossível apagar esta versão +label_renamed: renomeado +label_copied: copiado diff --git a/lang/ro.yml b/lang/ro.yml index 855662c..9427825 100644 --- a/lang/ro.yml +++ b/lang/ro.yml @@ -352,7 +352,7 @@ label_sort_higher: Muta sus label_sort_lower: Mota jos label_sort_lowest: Mota ultima label_roadmap: Harta activitatiilor -label_roadmap_due_in: Rezolvat in +label_roadmap_due_in: Rezolvat in %s label_roadmap_overdue: %s intarziere label_roadmap_no_issues: Nu sunt tichete pentru aceasta reviziune label_search: Cauta diff --git a/lang/ru.yml b/lang/ru.yml index 0f705c0..ce5e43b 100644 --- a/lang/ru.yml +++ b/lang/ru.yml @@ -477,7 +477,7 @@ label_result_plural: Результаты label_reverse_chronological_order: В обратном порядке label_revision_plural: Редакции label_revision: Редакция -label_roadmap_due_in: Вовремя +label_roadmap_due_in: Вовремя %s label_roadmap_no_issues: Нет задач для данной версии label_roadmap_overdue: %s опоздание label_roadmap: Оперативный план diff --git a/lang/sr.yml b/lang/sr.yml index 574470e..720dfcd 100644 --- a/lang/sr.yml +++ b/lang/sr.yml @@ -362,7 +362,7 @@ label_sort_higher: premesti na gore label_sort_lower: Premesti na dole label_sort_lowest: Premesti na dno label_roadmap: Roadmap -label_roadmap_due_in: Završava se za +label_roadmap_due_in: Završava se za %s label_roadmap_overdue: %s kasni label_roadmap_no_issues: Nema kartica za ovu verziju label_search: Traži diff --git a/lang/sv.yml b/lang/sv.yml index 1e7d292..393ade8 100644 --- a/lang/sv.yml +++ b/lang/sv.yml @@ -352,7 +352,7 @@ label_sort_higher: Flytta up label_sort_lower: Flytta ner label_sort_lowest: Flytta till botten label_roadmap: Roadmap -label_roadmap_due_in: Färdig om +label_roadmap_due_in: Färdig om %s label_roadmap_overdue: %s late label_roadmap_no_issues: Inga brister för denna version label_search: Sök diff --git a/lang/th.yml b/lang/th.yml index 0ad6b9b..362e447 100644 --- a/lang/th.yml +++ b/lang/th.yml @@ -408,7 +408,7 @@ label_sort_higher: ย้ายขึ้น label_sort_lower: ย้ายลง label_sort_lowest: ย้ายไปล่างสุด label_roadmap: แผนงาน -label_roadmap_due_in: ถึงกำหนดใน +label_roadmap_due_in: ถึงกำหนดใน %s label_roadmap_overdue: %s ช้ากว่ากำหนด label_roadmap_no_issues: ไม่มีปัญหาสำหรับรุ่นนี้ label_search: ค้นหา diff --git a/lang/tr.yml b/lang/tr.yml index 7cb2a9e..ba9c0b4 100644 --- a/lang/tr.yml +++ b/lang/tr.yml @@ -405,7 +405,7 @@ label_sort_higher: Yukarı taşı label_sort_lower: Aşağı taşı label_sort_lowest: Dibe taşı label_roadmap: Yol Haritası -label_roadmap_due_in: Due in +label_roadmap_due_in: Due in %s label_roadmap_overdue: %s geç label_roadmap_no_issues: Bu versiyon için ileti yok label_search: Ara diff --git a/lang/uk.yml b/lang/uk.yml index 055d27e..de5f65e 100644 --- a/lang/uk.yml +++ b/lang/uk.yml @@ -368,7 +368,7 @@ label_sort_higher: Вгору label_sort_lower: Вниз label_sort_lowest: У кінець label_roadmap: Оперативний план -label_roadmap_due_in: Строк +label_roadmap_due_in: Строк %s label_roadmap_overdue: %s запізнення label_roadmap_no_issues: Немає питань для даної версії label_search: Пошук diff --git a/lang/zh-tw.yml b/lang/zh-tw.yml index db4615a..6feb0a0 100644 --- a/lang/zh-tw.yml +++ b/lang/zh-tw.yml @@ -418,7 +418,7 @@ label_sort_higher: 往上移動 label_sort_lower: 往下移動 label_sort_lowest: 移動至結尾 label_roadmap: 版本藍圖 -label_roadmap_due_in: 倒數天數: +label_roadmap_due_in: 倒數天數 %s label_roadmap_overdue: %s 逾期 label_roadmap_no_issues: 此版本尚未包含任何項目 label_search: 搜尋 diff --git a/lang/zh.yml b/lang/zh.yml index 5c3cf06..d2e571b 100644 --- a/lang/zh.yml +++ b/lang/zh.yml @@ -418,7 +418,7 @@ label_sort_higher: 上移 label_sort_lower: 下移 label_sort_lowest: 置底 label_roadmap: 路线图 -label_roadmap_due_in: 截止日期到 +label_roadmap_due_in: 截止日期到 %s label_roadmap_overdue: %s 延期 label_roadmap_no_issues: 该版本没有问题 label_search: 搜索 diff --git a/lib/redmine/unified_diff.rb b/lib/redmine/unified_diff.rb index aa89944..36a36cb 100644 --- a/lib/redmine/unified_diff.rb +++ b/lib/redmine/unified_diff.rb @@ -54,8 +54,8 @@ module Redmine @file_name = $2 return false elsif line =~ /^@@ (\+|\-)(\d+)(,\d+)? (\+|\-)(\d+)(,\d+)? @@/ - @line_num_l = $5.to_i - @line_num_r = $2.to_i + @line_num_l = $2.to_i + @line_num_r = $5.to_i @parsing = true end else @@ -63,8 +63,8 @@ module Redmine @parsing = false return false elsif line =~ /^@@ (\+|\-)(\d+)(,\d+)? (\+|\-)(\d+)(,\d+)? @@/ - @line_num_l = $5.to_i - @line_num_r = $2.to_i + @line_num_l = $2.to_i + @line_num_r = $5.to_i else @nb_line += 1 if parse_line(line, @type) end @@ -116,18 +116,18 @@ module Redmine if line[0, 1] == "+" diff = sbs? type, 'add' @before = 'add' - diff.line_left = escapeHTML line[1..-1] - diff.nb_line_left = @line_num_l - diff.type_diff_left = 'diff_in' - @line_num_l += 1 + diff.line_right = escapeHTML line[1..-1] + diff.nb_line_right = @line_num_r + diff.type_diff_right = 'diff_in' + @line_num_r += 1 true elsif line[0, 1] == "-" diff = sbs? type, 'remove' @before = 'remove' - diff.line_right = escapeHTML line[1..-1] - diff.nb_line_right = @line_num_r - diff.type_diff_right = 'diff_out' - @line_num_r += 1 + diff.line_left = escapeHTML line[1..-1] + diff.nb_line_left = @line_num_l + diff.type_diff_left = 'diff_out' + @line_num_l += 1 true elsif line[0, 1] =~ /\s/ @before = 'same' diff --git a/test/functional/account_controller_test.rb b/test/functional/account_controller_test.rb index 26218d1..a6e3799 100644 --- a/test/functional/account_controller_test.rb +++ b/test/functional/account_controller_test.rb @@ -46,12 +46,12 @@ class AccountControllerTest < Test::Unit::TestCase def test_login_should_redirect_to_back_url_param # request.uri is "test.host" in test environment - post :login, :username => 'jsmith', :password => 'jsmith', :back_url => 'http://test.host/issues/show/1' + post :login, :username => 'jsmith', :password => 'jsmith', :back_url => 'http%3A%2F%2Ftest.host%2Fissues%2Fshow%2F1' assert_redirected_to '/issues/show/1' end def test_login_should_not_redirect_to_another_host - post :login, :username => 'jsmith', :password => 'jsmith', :back_url => 'http://test.foo/fake' + post :login, :username => 'jsmith', :password => 'jsmith', :back_url => 'http%3A%2F%2Ftest.foo%2Ffake' assert_redirected_to '/my/page' end diff --git a/test/unit/auth_source_ldap_test.rb b/test/unit/auth_source_ldap_test.rb new file mode 100644 index 0000000..30abd5d --- /dev/null +++ b/test/unit/auth_source_ldap_test.rb @@ -0,0 +1,36 @@ +# Redmine - project management software +# Copyright (C) 2006-2008 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +require File.dirname(__FILE__) + '/../test_helper' + +class AuthSourceLdapTest < Test::Unit::TestCase + + def setup + end + + def test_create + a = AuthSourceLdap.new(:name => 'My LDAP', :host => 'ldap.example.net', :port => 389, :base_dn => 'dc=example,dc=net', :attr_login => 'sAMAccountName') + assert a.save + end + + def test_should_strip_ldap_attributes + a = AuthSourceLdap.new(:name => 'My LDAP', :host => 'ldap.example.net', :port => 389, :base_dn => 'dc=example,dc=net', :attr_login => 'sAMAccountName', + :attr_firstname => 'givenName ') + assert a.save + assert_equal 'givenName', a.reload.attr_firstname + end +end diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb index 7ef47f5..35e26eb 100644 --- a/test/unit/helpers/application_helper_test.rb +++ b/test/unit/helpers/application_helper_test.rb @@ -367,4 +367,18 @@ EXPECTED assert_equal Time.now.strftime('%d %m %Y %H %M'), format_time(now) assert_equal Time.now.strftime('%H %M'), format_time(now, false) end + + def test_due_date_distance_in_words + to_test = { Date.today => 'Due in 0 days', + Date.today + 1 => 'Due in 1 day', + Date.today + 100 => 'Due in 100 days', + Date.today + 20000 => 'Due in 20000 days', + Date.today - 1 => '1 day late', + Date.today - 100 => '100 days late', + Date.today - 20000 => '20000 days late', + } + to_test.each do |date, expected| + assert_equal expected, due_date_distance_in_words(date) + end + end end diff --git a/test/unit/version_test.rb b/test/unit/version_test.rb new file mode 100644 index 0000000..29bdc03 --- /dev/null +++ b/test/unit/version_test.rb @@ -0,0 +1,36 @@ +# Redmine - project management software +# Copyright (C) 2006-2008 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +require File.dirname(__FILE__) + '/../test_helper' + +class VersionTest < Test::Unit::TestCase + fixtures :projects, :issues, :issue_statuses, :versions + + def setup + end + + def test_create + v = Version.new(:project => Project.find(1), :name => '1.1', :effective_date => '2011-03-25') + assert v.save + end + + def test_invalid_effective_date_validation + v = Version.new(:project => Project.find(1), :name => '1.1', :effective_date => '99999-01-01') + assert !v.save + assert_equal 'activerecord_error_not_a_date', v.errors.on(:effective_date) + end +end