def redirect_back_or_default(default)
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 or to the login or register page
- if (uri.relative? || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)})
- redirect_to(back_url) and return
+ begin
+ uri = URI.parse(back_url)
+ # do not redirect user to another host or to the login or register page
+ if (uri.relative? || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)})
+ redirect_to(back_url) and return
+ end
+ rescue URI::InvalidURIError
+ # redirect to default
end
end
redirect_to default
else
@grouped = documents.group_by(&:category)
end
+ @document = @project.documents.build
render :layout => false if request.xhr?
end
if request.post?
@journal.update_attributes(:notes => params[:notes]) if params[:notes]
@journal.destroy if @journal.details.empty? && @journal.notes.blank?
+ call_hook(:controller_journals_edit_post, { :journal => @journal, :params => params})
respond_to do |format|
format.html { redirect_to :controller => 'issues', :action => 'show', :id => @journal.journalized_id }
format.js { render :action => 'update' }
require 'coderay'
require 'coderay/helpers/file_type'
require 'forwardable'
+require 'cgi'
module ApplicationHelper
include Redmine::WikiFormatting::Macros::Definitions
def back_url_hidden_field_tag
back_url = params[:back_url] || request.env['HTTP_REFERER']
- hidden_field_tag('back_url', back_url) unless back_url.blank?
+ hidden_field_tag('back_url', CGI.escape(back_url)) unless back_url.blank?
end
def check_all_links(form_name)
validates_presence_of :project, :title, :category
validates_length_of :title, :maximum => 60
+
+ def after_initialize
+ if new_record?
+ self.category ||= Enumeration.default('DCAT')
+ end
+ end
end
end
def before_save
- Enumeration.update_all("is_default = #{connection.quoted_false}", {:opt => opt}) if is_default?
+ if is_default? && is_default_changed?
+ Enumeration.update_all("is_default = #{connection.quoted_false}", {:opt => opt})
+ end
end
def objects_count
token = Token.find_by_action_and_value('autologin', key)
token && (token.created_on > Setting.autologin.to_i.day.ago) && token.user.active? ? token.user : nil
end
+
+ # Makes find_by_mail case-insensitive
+ def self.find_by_mail(mail)
+ find(:first, :conditions => ["LOWER(mail) = ?", mail.to_s.downcase])
+ end
# Sort users by their display names
def <=>(user)
<% form_remote_tag(:url => {}, :html => { :id => "journal-#{@journal.id}-form" }) do %>
<%= text_area_tag :notes, @journal.notes, :class => 'wiki-edit',
:rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min) %>
+ <%= call_hook(:view_journals_notes_form_after_notes, { :journal => @journal}) %>
<p><%= submit_tag l(:button_save) %>
<%= link_to l(:button_cancel), '#', :onclick => "Element.remove('journal-#{@journal.id}-form'); " +
"Element.show('journal-#{@journal.id}-notes'); return false;" %></p>
page.show "journal-#{@journal.id}-notes"
page.remove "journal-#{@journal.id}-form"
end
+
+call_hook(:view_journals_update_rjs_bottom, { :page => page, :journal => @journal })
label_registered_on: Angemeldet am
label_activity: Aktivität
label_overall_activity: Aktivität aller Projekte anzeigen
+label_user_activity: "Aktivität von %s"
label_new: Neu
label_logged_as: Angemeldet als
label_environment: Environment
label_feeds_access_key_created_on: Atom-Zugriffsschlüssel vor %s erstellt
label_module_plural: Module
label_added_time_by: Von %s vor %s hinzugefügt
+label_updated_time_by: Von %s vor %s aktualisiert
label_updated_time: Vor %s aktualisiert
label_jump_to_a_project: Zu einem Projekt springen...
label_file_plural: Dateien
enumeration_issue_priorities: Ticket-Prioritäten
enumeration_doc_categories: Dokumentenkategorien
enumeration_activities: Aktivitäten (Zeiterfassung)
-label_user_activity: "%s's activity"
-label_updated_time_by: Updated by %s %s ago
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
setting_diff_max_lines_displayed: Max number of diff lines displayed
actionview_instancetag_blank_option: Por favor seleccione
activerecord_error_accepted: debe ser aceptado
activerecord_error_blank: no puede estar en blanco
-activerecord_error_circular_dependency: Esta relación podría crear una dependencia anidada
+activerecord_error_circular_dependency: Esta relación podría crear una dependencia circular
activerecord_error_confirmation: la confirmación no coincide
activerecord_error_empty: no puede estar vacío
activerecord_error_exclusion: está reservado
-activerecord_error_greater_than_start_date: debe ser la fecha mayor que del comienzo
+activerecord_error_greater_than_start_date: debe ser posterior a la fecha de comienzo
activerecord_error_inclusion: no está incluído en la lista
activerecord_error_invalid: no es válido
activerecord_error_not_a_date: no es una fecha válida
field_is_filter: Usado como filtro
field_is_for_all: Para todos los proyectos
field_is_in_chlog: Consultar las peticiones en el histórico
-field_is_in_roadmap: Consultar las peticiones en el roadmap
+field_is_in_roadmap: Consultar las peticiones en la planificación
field_is_public: Público
field_is_required: Obligatorio
field_issue: Petición
-field_issue_to_id: Petición Relacionada
+field_issue_to_id: Petición relacionada
field_language: Idioma
field_last_login_on: Última conexión
field_lastname: Apellido
field_summary: Resumen
field_time_zone: Zona horaria
field_title: Título
-field_tracker: Tracker
+field_tracker: Tipo
field_type: Tipo
field_updated_on: Actualizado
field_url: URL
label_all: todos
label_all_time: todo el tiempo
label_all_words: Todas las palabras
-label_and_its_subprojects: %s y sus subproyectos
+label_and_its_subprojects: %s y proyectos secundarios
label_applied_status: Aplicar estado
label_assigned_to_me_issues: Peticiones que me están asignadas
label_associated_revisions: Revisiones asociadas
label_board: Foro
label_board_new: Nuevo foro
label_board_plural: Foros
-label_boolean: Boleano
+label_boolean: Booleano
label_browse: Hojear
label_bulk_edit_selected_issues: Editar las peticiones seleccionadas
label_calendar: Calendario
label_environment: Entorno
label_equals: igual
label_example: Ejemplo
-label_export_to: Exportar a
+label_export_to: 'Exportar a:'
label_f_hour: %.2f hora
label_f_hour_plural: %.2f horas
label_feed_plural: Feeds
label_issue_category_plural: Categorías de las peticiones
label_issue_new: Nueva petición
label_issue_plural: Peticiones
-label_issue_status: Estado de petición
+label_issue_status: Estado de la petición
label_issue_status_new: Nuevo estado
label_issue_status_plural: Estados de las peticiones
label_issue_tracking: Peticiones
label_issues_by: Peticiones por %s
label_jump_to_a_project: Ir al proyecto...
label_language_based: Basado en el idioma
-label_last_changes: %d cambios del último
+label_last_changes: últimos %d cambios
label_last_login: Última conexión
label_last_month: último mes
label_last_n_days: últimos %d días
label_news_view_all: Ver todas las noticias
label_next: Siguiente
label_no_change_option: (Sin cambios)
-label_no_data: Ningun dato a mostrar
+label_no_data: Ningún dato a mostrar
label_nobody: nadie
label_none: ninguno
label_not_contains: no contiene
label_overall_activity: Actividad global
label_overview: Vistazo
label_password_lost: ¿Olvidaste la contraseña?
-label_per_page: Por la página
+label_per_page: Por página
label_permissions: Permisos
label_permissions_report: Informe de permisos
label_personalize_page: Personalizar esta página
label_reverse_chronological_order: En orden cronológico inverso
label_revision: Revisión
label_revision_plural: Revisiones
-label_roadmap: Roadmap
+label_roadmap: Planificación
label_roadmap_due_in: Finaliza en %s
label_roadmap_no_issues: No hay peticiones para esta versión
label_roadmap_overdue: %s tarde
label_send_information: Enviar información de la cuenta al usuario
label_send_test_email: Enviar un correo de prueba
label_settings: Configuración
-label_show_completed_versions: Muestra las versiones completas
+label_show_completed_versions: Muestra las versiones terminadas
label_sort_by: Ordenar por %s
label_sort_higher: Subir
label_sort_highest: Primero
label_today: hoy
label_topic_plural: Temas
label_total: Total
-label_tracker: Tracker
-label_tracker_new: Nuevo tracker
-label_tracker_plural: Trackers
+label_tracker: Tipo
+label_tracker_new: Nuevo tipo
+label_tracker_plural: Tipos de peticiones
label_updated_time: Actualizado hace %s
+label_updated_time_by: Actualizado por %s hace %s
label_used_by: Utilizado por
label_user: Usuario
+label_user_activity: "Actividad de %s"
label_user_mail_no_self_notified: "No quiero ser avisado de cambios hechos por mí"
label_user_mail_option_all: "Para cualquier evento en todos mis proyectos"
label_user_mail_option_none: "Sólo para elementos monitorizados o relacionados conmigo"
-label_user_mail_option_selected: "Para cualquier evento del proyecto seleccionado..."
+label_user_mail_option_selected: "Para cualquier evento de los proyectos seleccionados..."
label_user_new: Nuevo usuario
label_user_plural: Usuarios
label_version: Versión
label_workflow: Flujo de trabajo
label_year: Año
label_yesterday: ayer
-mail_body_account_activation_request: "Un nuevo usuario (%s) ha sido registrado. Esta cuenta está pendiende de aprobación"
+mail_body_account_activation_request: 'Se ha inscrito un nuevo usuario (%s). La cuenta está pendiende de aprobación:'
mail_body_account_information: Información sobre su cuenta
mail_body_account_information_external: Puede usar su cuenta "%s" para conectarse.
-mail_body_lost_password: 'Para cambiar su contraseña, haga click en el siguiente enlace:'
-mail_body_register: 'Para activar su cuenta, haga click en el siguiente enlace:'
+mail_body_lost_password: 'Para cambiar su contraseña, haga clic en el siguiente enlace:'
+mail_body_register: 'Para activar su cuenta, haga clic en el siguiente enlace:'
mail_body_reminder: "%d peticion(es) asignadas a tí finalizan en los próximos %d días:"
mail_subject_account_activation_request: Petición de activación de cuenta %s
mail_subject_lost_password: Tu contraseña del %s
mail_subject_register: Activación de la cuenta del %s
mail_subject_reminder: "%d peticion(es) finalizan en los próximos días"
-notice_account_activated: Su cuenta ha sido activada. Ahora se encuentra conectado.
+notice_account_activated: Su cuenta ha sido activada. Ya puede conectarse.
notice_account_invalid_creditentials: Usuario o contraseña inválido.
notice_account_lost_email_sent: Se le ha enviado un correo con instrucciones para elegir una nueva contraseña.
notice_account_password_updated: Contraseña modificada correctamente.
-notice_account_pending: "Su cuenta ha sido creada y está pendiende de la aprobación por parte de administrador"
-notice_account_register_done: Cuenta creada correctamente.
+notice_account_pending: "Su cuenta ha sido creada y está pendiende de la aprobación por parte del administrador."
+notice_account_register_done: Cuenta creada correctamente. Para activarla, haga clic sobre el enlace que le ha sido enviado por correo.
notice_account_unknown_email: Usuario desconocido.
notice_account_updated: Cuenta actualizada correctamente.
notice_account_wrong_password: Contraseña incorrecta.
notice_default_data_loaded: Configuración por defecto cargada correctamente.
notice_email_error: Ha ocurrido un error mientras enviando el correo (%s)
notice_email_sent: Se ha enviado un correo a %s
-notice_failed_to_save_issues: "Imposible salvar %s peticion(es) en %d seleccionado: %s."
-notice_feeds_access_key_reseted: Su clave de acceso para RSS ha sido reiniciada
-notice_file_not_found: La página a la que intentas acceder no existe.
+notice_failed_to_save_issues: "Imposible grabar %s peticion(es) en %d seleccionado: %s."
+notice_feeds_access_key_reseted: Su clave de acceso para RSS ha sido reiniciada.
+notice_file_not_found: La página a la que intenta acceder no existe.
notice_locking_conflict: Los datos han sido modificados por otro usuario.
notice_no_issue_selected: "Ninguna petición seleccionada. Por favor, compruebe la petición que quiere modificar"
notice_not_authorized: No tiene autorización para acceder a esta página.
permission_commit_access: Acceso de escritura
permission_delete_issues: Borrar peticiones
permission_delete_messages: Borrar mensajes
+permission_delete_own_messages: Borrar mensajes propios
permission_delete_wiki_pages: Borrar páginas wiki
permission_delete_wiki_pages_attachments: Borrar ficheros
-permission_delete_own_messages: Borrar mensajes propios
permission_edit_issue_notes: Modificar notas
permission_edit_issues: Modificar peticiones
permission_edit_messages: Modificar mensajes
setting_commit_logs_encoding: Codificación de los mensajes de commit
setting_commit_ref_keywords: Palabras clave para la referencia
setting_cross_project_issue_relations: Permitir relacionar peticiones de distintos proyectos
-setting_date_format: Formato de la fecha
+setting_date_format: Formato de fecha
setting_default_language: Idioma por defecto
setting_default_projects_public: Los proyectos nuevos son públicos por defecto
-setting_display_subprojects_issues: Mostrar peticiones de un subproyecto en el proyecto padre por defecto
+setting_diff_max_lines_displayed: Número máximo de diferencias mostradas
+setting_display_subprojects_issues: Mostrar por defecto peticiones de proy. secundarios en el principal
setting_emails_footer: Pie de mensajes
setting_enabled_scm: Activar SCM
setting_feeds_limit: Límite de contenido para sindicación
setting_gravatar_enabled: Usar iconos de usuario (Gravatar)
-setting_host_name: Nombre de host
+setting_host_name: Nombre y ruta del servidor
setting_issue_list_default_columns: Columnas por defecto para la lista de peticiones
setting_issues_export_limit: Límite de exportación de peticiones
setting_login_required: Se requiere identificación
status_active: activo
status_locked: bloqueado
status_registered: registrado
-text_are_you_sure: ¿ Estás seguro ?
+text_are_you_sure: ¿Está seguro?
text_assign_time_entries_to_project: Asignar las horas al proyecto
text_caracters_maximum: %d caracteres como máximo.
text_caracters_minimum: %d caracteres como mínimo
text_default_administrator_account_changed: Cuenta de administrador por defecto modificada
text_destroy_time_entries: Borrar las horas
text_destroy_time_entries_question: Existen %.02f horas asignadas a la petición que quiere borrar. ¿Qué quiere hacer ?
+text_diff_truncated: '... Diferencia truncada por exceder el máximo tamaño visualizable.'
text_email_delivery_not_configured: "El envío de correos no está configurado, y las notificaciones se han desactivado. \n Configure el servidor de SMTP en config/email.yml y reinicie la aplicación para activar los cambios."
text_enumeration_category_reassign_to: 'Reasignar al siguiente valor:'
text_enumeration_destroy_question: '%d objetos con este valor asignado.'
text_file_repository_writable: Se puede escribir en el repositorio
-text_issue_added: Petición añadida por %s.
+text_issue_added: Petición %s añadida por %s.
text_issue_category_destroy_assignments: Dejar las peticiones sin categoría
text_issue_category_destroy_question: Algunas peticiones (%d) están asignadas a esta categoría. ¿Qué desea hacer?
text_issue_category_reassign_to: Reasignar las peticiones a la categoría
text_length_between: Longitud entre %d y %d caracteres.
text_load_default_configuration: Cargar la configuración por defecto
text_min_max_length_info: 0 para ninguna restricción
-text_no_configuration_data: "Todavía no se han configurado roles, ni trackers, ni estados y flujo de trabajo asociado a peticiones. Se recomiendo encarecidamente cargar la configuración por defecto. Una vez cargada, podrá modificarla."
+text_no_configuration_data: "Todavía no se han configurado perfiles, ni tipos, estados y flujo de trabajo asociado a peticiones. Se recomiendo encarecidamente cargar la configuración por defecto. Una vez cargada, podrá modificarla."
text_project_destroy_confirmation: ¿Estás seguro de querer eliminar el proyecto?
text_project_identifier_info: 'Letras minúsculas (a-z), números y signos de puntuación permitidos.<br />Una vez guardado, el identificador no puede modificarse.'
text_reassign_time_entries: 'Reasignar las horas a esta petición:'
text_regexp_info: ej. ^[A-Z0-9]+$
-text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
+text_repository_usernames_mapping: "Establezca la correspondencia entre los usuarios de Redmine y los presentes en el log del repositorio.\nLos usuarios con el mismo nombre o correo en Redmine y en el repositorio serán asociados automáticamente."
text_rmagick_available: RMagick disponible (opcional)
text_select_mail_notifications: Seleccionar los eventos a notificar
text_select_project_modules: 'Seleccione los módulos a activar para este proyecto:'
text_status_changed_by_changeset: Aplicado en los cambios %s
-text_subprojects_destroy_warning: 'Los subproyectos: %s también se eliminarán'
+text_subprojects_destroy_warning: 'Los proyectos secundarios: %s también se eliminarán'
text_tip_task_begin_day: tarea que comienza este día
text_tip_task_begin_end_day: tarea que comienza y termina este día
text_tip_task_end_day: tarea que termina este día
-text_tracker_no_workflow: No hay ningún flujo de trabajo definido para este tracker
+text_tracker_no_workflow: No hay ningún flujo de trabajo definido para este tipo de petición
text_unallowed_characters: Caracteres no permitidos
-text_user_mail_option: "En los proyectos no seleccionados, sólo recibirá notificaciones sobre elementos monitorizados o elementos en los que esté involucrado (por ejemplo, peticiones de las que usted sea autor o asignadas a usted)."
+text_user_mail_option: "De los proyectos no seleccionados, sólo recibirá notificaciones sobre elementos monitorizados o elementos en los que esté involucrado (por ejemplo, peticiones de las que usted sea autor o asignadas a usted)."
text_user_wrote: '%s escribió:'
text_wiki_destroy_confirmation: ¿Seguro que quiere borrar el wiki y todo su contenido?
text_workflow_edit: Seleccionar un flujo de trabajo para actualizar
-label_user_activity: "%s's activity"
-label_updated_time_by: Updated by %s %s ago
-text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-setting_diff_max_lines_displayed: Max number of diff lines displayed
permission_edit_own_messages: Saját üzenetek szerkesztése
permission_delete_own_messages: Saját üzenetek törlése
label_user_activity: "%s tevékenységei"
-label_updated_time_by: Updated by %s %s ago
-text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-setting_diff_max_lines_displayed: Max number of diff lines displayed
+label_updated_time_by: "Módosította %s ennyivel ezelőtt: %s"
+text_diff_truncated: '... A diff fájl vége nem jelenik meg, mert hosszab, mint a megjeleníthető sorok száma.'
+setting_diff_max_lines_displayed: A megjelenítendő sorok száma (maximum) a diff fájloknál
field_due_date: 완료 기한
field_assigned_to: 담당자
field_priority: 우선순위
-field_fixed_version: 목표 버전
+field_fixed_version: 목표버전
field_user: 사용자
field_role: 역할
field_homepage: 홈페이지
field_is_public: 공개
field_parent: 상위 프로젝트
-field_is_in_chlog: 변경이력(changelog)에서 보여지는 일감들
-field_is_in_roadmap: 로드맵에서 보여지는 일감들
+field_is_in_chlog: 변경이력(changelog)에서 표시할 일감들
+field_is_in_roadmap: 로드맵에서표시할 일감들
field_login: 로그인
field_mail_notification: 메일 알림
field_admin: 관리자
-field_last_login_on: 최종 접속
+field_last_login_on: 마지막 로그인
field_language: 언어
field_effective_date: 일자
field_password: 비밀번호
setting_commit_fix_keywords: 일감 해결에 사용할 키워드들
setting_autologin: 자동 로그인
setting_date_format: 날짜 형식
-setting_cross_project_issue_relations: 프로젝트간 일감에 관련을 맺는 것을 허용
+setting_cross_project_issue_relations: 프로젝트간 일감에 관계을 맺는 것을 허용
setting_issue_list_default_columns: 일감 목록에 보여줄 기본 컬럼들
setting_repositories_encodings: 저장소 인코딩
setting_emails_footer: 메일 꼬리
label_project_plural: 프로젝트
label_project_all: 모든 프로젝트
label_project_latest: 최근 프로젝트
-label_issue: 일감 보기
+label_issue: 일감
label_issue_new: 새 일감만들기
label_issue_plural: 일감 보기
label_issue_view_all: 모든 일감 보기
label_last_updates: 최종 변경 내역
label_last_updates_plural: 최종변경 %d
label_registered_on: 등록시각
-label_activity: ì§\84í\96\89ì¤\91ì\9d¸ ì\9e\91ì\97\85
-label_new: ì\8b ê·\9c
-label_logged_as: ▶
+label_activity: ì\9e\91ì\97\85ë\82´ì\97
+label_new: ì\83\88ë¡\9c ë§\8cë\93¤ê¸°
+label_logged_as: '로그인계정:'
label_environment: 환경
label_authentication: 인증설정
label_auth_source: 인증 모드
label_report: 보고서
label_report_plural: 보고서
label_news: 뉴스
-label_news_new: 뉴스추가
+label_news_new: 새 뉴스
label_news_plural: 뉴스
label_news_latest: 최근 뉴스
label_news_view_all: 모든 뉴스
label_open_issues_plural: 진행중
label_closed_issues: 완료됨
label_closed_issues_plural: 완료됨
-label_total: Total
+label_total: 합계
label_permissions: 허가권한
label_current_status: 일감 상태
label_new_statuses_allowed: 허용되는 일감 상태
label_internal: 내부
label_last_changes: 지난 변경사항 %d 건
label_change_view_all: 모든 변경 내역 보기
-label_personalize_page: 입맛대로 구성하기(Drag & Drop)
+label_personalize_page: 입맛대로 구성하기
label_comment: 댓글
label_comment_plural: 댓글
label_comment_add: 댓글 추가
label_latest_revision_plural: 최근 개정판
label_view_revisions: 개정판 보기
label_max_size: 최대 크기
-label_on: 'on'
+label_on: '전체: '
label_sort_highest: 최상단으로
label_sort_higher: 위로
label_sort_lower: 아래로
label_roadmap: 로드맵
label_roadmap_due_in: 기한 %s
label_roadmap_overdue: %s 지연
-label_roadmap_no_issues: 이버전에 해당하는 일감 없음
+label_roadmap_no_issues: 이 버전에 해당하는 일감 없음
label_search: 검색
label_result_plural: 결과
label_all_words: 모든 단어
label_show_completed_versions: 완료된 버전 보기
label_me: 나
label_board: 게시판
-label_board_new: ì\8b ê·\9c 게시판
+label_board_new: ì\83\88 게시판
label_board_plural: 게시판
label_topic_plural: 주제
label_message_plural: 관련글
-label_message_last: 최종 글
+label_message_last: 마지막 글
label_message_new: 새글쓰기
label_reply_plural: 답글
label_send_information: 사용자에게 계정정보를 보냄
label_year: 년
label_month: 월
label_week: 주
-label_date_from: 에서
-label_date_to: (으)로
+label_date_from: '기간:'
+label_date_to: ' ~ '
label_language_based: 언어설정에 따름
label_sort_by: 정렬방법(%s)
label_send_test_email: 테스트 메일 보내기
enumeration_issue_priorities: 일감 우선순위
enumeration_doc_categories: 문서 카테고리
-enumeration_activities: ì§\84í\96\89í\99\9cë\8f\99(ì\8b\9cê°\84 추적)
+enumeration_activities: ì\9e\91ì\97\85ë¶\84ë¥\98(ì\8b\9cê°\84추적)
button_copy: 복사
mail_body_account_information_external: 레드마인에 로그인할 때 "%s" 계정을 사용하실 수 있습니다.
button_change_password: 비밀번호 변경
label_issues_by: 일감분류 방식 %s
field_searchable: 검색가능
label_display_per_page: '페이지당: %s'
-setting_per_page_options: í\8e\98ì\9d´ì§\80ë\8b¹ í\91\9cì\8b\9cí\95 ê°\9dì±\84 수
+setting_per_page_options: í\8e\98ì\9d´ì§\80ë\8b¹ í\91\9cì\8b\9cí\95 ê°\9dì²´ 수
label_age: 마지막 수정일
notice_default_data_loaded: 기본 설정을 성공적으로 로드하였습니다.
text_load_default_configuration: 기본 설정을 로딩하기
project_module_documents: 문서
project_module_repository: 저장소
project_module_news: 뉴스
-project_module_time_tracking: ì§\84í\96\89ì¤\91ì\9d¸ ì\9e\91ì\97\85
+project_module_time_tracking: ì\8b\9cê°\84ì¶\94ì \81
text_file_repository_writable: 파일 저장소 쓰기 가능
text_default_administrator_account_changed: 기본 관리자 계정이 변경되었습니다.
-text_rmagick_available: RMagick available (optional)
+text_rmagick_available: RMagick 사용가능(옵션)
button_configure: 설정
label_plugins: 플러그인
label_ldap_authentication: LDAP 인증
label_downloads_abbr: D/L
label_add_another_file: 다른 파일 추가
label_this_month: 이번 달
-text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ?
+text_destroy_time_entries_question: 삭제하려는 일감에 %.02f 시간이 보고되어 있습니다. 어떻게 하시겠습니까?
label_last_n_days: 지난 %d 일
label_all_time: 모든 시간
-error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
+error_issue_not_found_in_project: '일감이 없거나 이 프로젝트의 것이 아닙니다.'
label_this_year: 올해
text_assign_time_entries_to_project: 보고된 시간을 프로젝트에 할당하기
label_date_range: 날짜 범위
label_last_month: 지난 달
text_destroy_time_entries: 보고된 시간을 삭제하기
text_reassign_time_entries: '이 알림에 보고된 시간을 재할당하기:'
-setting_activity_days_default: 프로젝트 활동에 보여질 날수
+setting_activity_days_default: 프로젝트 작업내역에 보여줄 날수
label_chronological_order: 시간 순으로 정렬
field_comments_sorting: 히스토리 정렬 설정
label_reverse_chronological_order: 시간 역순으로 정렬
-label_preferences: Preferences
+label_preferences: 설정
setting_display_subprojects_issues: 하위 프로젝트의 일감을 최상위 프로젝트에서 표시
-label_overall_activity: ì \84ì²´ ì§\84í\96\89 ì\83\81í\99©
+label_overall_activity: ì \84ì²´ ì\9e\91ì\97\85ë\82´ì\97
setting_default_projects_public: 새 프로젝트를 공개로 설정
-error_scm_annotate: "The entry does not exist or can not be annotated."
+error_scm_annotate: "항목이 없거나 주석을 달 수 없습니다."
label_planning: 프로젝트계획(Planning)
text_subprojects_destroy_warning: '서브프로젝트(%s)가 자동으로 지워질 것입니다.'
label_and_its_subprojects: %s와 서브프로젝트들
text_repository_usernames_mapping: "저장소 로그에서 발견된 각 사용자에 레드마인 사용자를 업데이트할때 선택합니다.\n레드마인과 저장소의 이름이나 이메일이 같은 사용자가 자동으로 연결됩니다."
permission_edit_own_messages: 자기 메시지 편집
permission_delete_own_messages: 자기 메시지 삭제
-label_user_activity: "%s의 활동"
-label_updated_time_by: Updated by %s %s ago
-text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-setting_diff_max_lines_displayed: Max number of diff lines displayed
+label_user_activity: "%s의 작업내역"
+label_updated_time_by: %s가 %s 전에 변경
+text_diff_truncated: '... 이 차이점은 표시할 수 있는 최대 줄수를 초과해서 이 차이점은 잘렸습니다.'
+setting_diff_max_lines_displayed: 차이점보기에 표시할 최대 줄수
label_tracker_new: Новый трекер
label_tracker_plural: Трекеры
label_tracker: Трекер
-label_updated_time: Обновлен %s назад
+label_updated_time: Обновлено %s назад
+label_updated_time_by: Обновлено %s %s назад
label_used_by: Используется
label_user_activity: "Активность пользователя %s"
label_user_mail_no_self_notified: "Не извещать об изменениях, которые я сделал сам"
setting_date_format: Формат даты
setting_default_language: Язык по умолчанию
setting_default_projects_public: Новые проекты являются общедоступными
+setting_diff_max_lines_displayed: Максимальное число строк для diff
setting_display_subprojects_issues: Отображение подпроектов по умолчанию
setting_emails_footer: Подстрочные примечания Email
setting_enabled_scm: Разрешенные SCM
text_default_administrator_account_changed: Учетная запись администратора по умолчанию изменена
text_destroy_time_entries_question: Вы собираетесь удалить %.02f часа(ов) прикрепленных за этой задачей.
text_destroy_time_entries: Удалить зарегистрированное время
+text_diff_truncated: '... Этот diff ограничен, так как превышает максимальный отображаемый размер.'
text_email_delivery_not_configured: "Параметры работы с почтовым сервером не настроены и функция уведомления по email не активна.\nНастроить параметры для Вашего SMTP-сервера Вы можете в файле config/email.yml. Для применения изменений перезапустите приложение."
text_enumeration_category_reassign_to: 'Назначить им следующее значение:'
text_enumeration_destroy_question: '%d объект(а,ов) связаны с этим значением.'
text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную Wiki и все ее содержимое?
text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний
-label_updated_time_by: Updated by %s %s ago
-text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-setting_diff_max_lines_displayed: Max number of diff lines displayed
setting_mail_handler_api_key: API 金鑰
setting_sequential_project_identifiers: 循序產生專案識別碼
setting_gravatar_enabled: 啟用 Gravatar 全球認證大頭像
+setting_diff_max_lines_displayed: 差異顯示行數之最大值
permission_edit_project: 編輯專案
permission_select_project_modules: 選擇專案模組
text_enumeration_category_reassign_to: '重新設定其列舉值為:'
text_email_delivery_not_configured: "您尚未設定電子郵件傳送方式,因此提醒選項已被停用。\n請在 config/email.yml 中設定 SMTP 之後,重新啟動 Redmine,以啟用電子郵件提醒選項。"
text_repository_usernames_mapping: "選擇或更新 Redmine 使用者與版本庫使用者之對應關係。\n版本庫中之使用者帳號或電子郵件信箱,與 Redmine 設定相同者,將自動產生對應關係。"
+text_diff_truncated: '... 這份差異已被截短以符合顯示行數之最大值'
default_role_manager: 管理人員
default_role_developper: 開發人員
enumeration_issue_priorities: 項目優先權
enumeration_doc_categories: 文件分類
enumeration_activities: 活動 (時間追蹤)
-text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-setting_diff_max_lines_displayed: Max number of diff lines displayed
setting_mail_handler_api_key: API key
setting_sequential_project_identifiers: 顺序产生项目标识
setting_gravatar_enabled: 使用Gravatar用户头像
+setting_diff_max_lines_displayed: 查看差别页面上显示的最大行数
permission_edit_project: 编辑项目
permission_select_project_modules: 选择项目模块
label_feeds_access_key_created_on: RSS 存取键是在 %s 之前建立的
label_module_plural: 模块
label_added_time_by: 由 %s 在 %s 之前添加
-label_updated_time: 更新于 %s 前
+label_updated_time: 更新于 %s 之前
+label_updated_time_by: 由 %s 更新于 %s 之前
label_jump_to_a_project: 选择一个项目...
label_file_plural: 文件
label_changeset_plural: 变更
text_enumeration_destroy_question: '%d 个对象被关联到了这个枚举值。'
text_email_delivery_not_configured: "邮件参数尚未配置,因此邮件通知功能已被禁用。\n请在config/email.yml中配置您的SMTP服务器信息并重新启动以使其生效。"
text_repository_usernames_mapping: "选择或更新与版本库中的用户名对应的Redmine用户。\n版本库中与Redmine中的同名用户将被自动对应。"
+text_diff_truncated: '... 差别内容超过了可显示的最大行数并已被截断'
default_role_manager: 管理人员
default_role_developper: 开发人员
enumeration_issue_priorities: 问题优先级
enumeration_doc_categories: 文档类别
enumeration_activities: 活动(时间跟踪)
-label_updated_time_by: Updated by %s %s ago
-text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-setting_diff_max_lines_displayed: Max number of diff lines displayed
end
def test_index
+ # Sets a default category
+ e = Enumeration.find_by_name('Technical documentation')
+ e.update_attributes(:is_default => true)
+
get :index, :project_id => 'ecookbook'
assert_response :success
assert_template 'index'
assert_not_nil assigns(:grouped)
+
+ # Default category selected in the new document form
+ assert_tag :select, :attributes => {:name => 'document[category_id]'},
+ :child => {:tag => 'option', :attributes => {:selected => 'selected'},
+ :content => 'Technical documentation'}
end
def test_new_with_one_attachment
assert_response :success
assert_template "account/lost_password"
- post "account/lost_password", :mail => 'jsmith@somenet.foo'
+ post "account/lost_password", :mail => 'jSmith@somenet.foo'
assert_redirected_to "account/login"
token = Token.find(:first)
--- /dev/null
+# 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 DocumentTest < Test::Unit::TestCase
+ fixtures :projects, :enumerations, :documents
+
+ def test_create
+ doc = Document.new(:project => Project.find(1), :title => 'New document', :category => Enumeration.find_by_name('User documentation'))
+ assert doc.save
+ end
+
+ def test_create_with_default_category
+ # Sets a default category
+ e = Enumeration.find_by_name('Technical documentation')
+ e.update_attributes(:is_default => true)
+
+ doc = Document.new(:project => Project.find(1), :title => 'New document')
+ assert_equal e, doc.category
+ assert doc.save
+ end
+end
assert !Enumeration.find(7).in_use?
end
+ def test_default
+ e = Enumeration.default('IPRI')
+ assert e.is_a?(Enumeration)
+ assert e.is_default?
+ assert_equal 'Normal', e.name
+ end
+
+ def test_create
+ e = Enumeration.new(:opt => 'IPRI', :name => 'Very urgent', :is_default => false)
+ assert e.save
+ assert_equal 'Normal', Enumeration.default('IPRI').name
+ end
+
+ def test_create_as_default
+ e = Enumeration.new(:opt => 'IPRI', :name => 'Very urgent', :is_default => true)
+ assert e.save
+ assert_equal e, Enumeration.default('IPRI')
+ end
+
+ def test_update_default
+ e = Enumeration.default('IPRI')
+ e.update_attributes(:name => 'Changed', :is_default => true)
+ assert_equal e, Enumeration.default('IPRI')
+ end
+
+ def test_update_default_to_non_default
+ e = Enumeration.default('IPRI')
+ e.update_attributes(:name => 'Changed', :is_default => false)
+ assert_nil Enumeration.default('IPRI')
+ end
+
+ def test_change_default
+ e = Enumeration.find_by_name('Urgent')
+ e.update_attributes(:name => 'Urgent', :is_default => true)
+ assert_equal e, Enumeration.default('IPRI')
+ end
+
def test_destroy_with_reassign
Enumeration.find(4).destroy(Enumeration.find(6))
assert_nil Issue.find(:first, :conditions => {:priority_id => 4})
@jsmith.pref.comments_sorting = 'desc'
assert @jsmith.wants_comments_in_reverse_order?
end
+
+ def test_find_by_mail_should_be_case_insensitive
+ u = User.find_by_mail('JSmith@somenet.foo')
+ assert_not_nil u
+ assert_equal 'jsmith@somenet.foo', u.mail
+ end
end