Compare commits
43 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
900305fdcc | ||
|
|
e0b4f151a2 | ||
|
|
5581bfa539 | ||
|
|
84c61545a9 | ||
|
|
eb2638a25f | ||
|
|
6d66abe3ac | ||
|
|
6c6519e595 | ||
|
|
55d5e79e5f | ||
|
|
1dcdba7cdc | ||
|
|
3a474ead99 | ||
|
|
9318cd2fbe | ||
|
|
ce67da88c4 | ||
|
|
f5cb899efe | ||
|
|
0efc84dad7 | ||
|
|
e41bec7999 | ||
|
|
2eef4795c0 | ||
|
|
53cc9148d4 | ||
|
|
d8d1895315 | ||
|
|
77b58fc351 | ||
|
|
5e8ee66d69 | ||
|
|
f1c23ac295 | ||
|
|
695596aa8a | ||
|
|
0de2718d97 | ||
|
|
e56dd42e64 | ||
|
|
a0c34ab916 | ||
|
|
c8a6b01e9f | ||
|
|
ff02412e75 | ||
|
|
166c3c15dd | ||
|
|
65a7c7e96c | ||
|
|
9a8cf5fa60 | ||
|
|
bf0008cd4e | ||
|
|
b849b9a47e | ||
|
|
011d9587a5 | ||
|
|
b7d813047b | ||
|
|
08784f551e | ||
|
|
faad143c03 | ||
|
|
08b6d7b654 | ||
|
|
18a30fd942 | ||
|
|
2813b93370 | ||
|
|
930cf0b487 | ||
|
|
27ac3193e3 | ||
|
|
80f5d3d041 | ||
|
|
a3f8fbaee6 |
@@ -29,6 +29,11 @@ class AttachmentsController < ApplicationController
|
||||
@diff = File.new(@attachment.diskfile, "rb").read
|
||||
@diff_type = params[:type] || User.current.pref[:diff_type] || 'inline'
|
||||
@diff_type = 'inline' unless %w(inline sbs).include?(@diff_type)
|
||||
# Save diff type as user preference
|
||||
if User.current.logged? && @diff_type != User.current.pref[:diff_type]
|
||||
User.current.pref[:diff_type] = @diff_type
|
||||
User.current.preference.save
|
||||
end
|
||||
render :action => 'diff'
|
||||
elsif @attachment.is_text? && @attachment.filesize <= Setting.file_max_size_displayed.to_i.kilobyte
|
||||
@content = File.new(@attachment.diskfile, "rb").read
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,22 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 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.
|
||||
|
||||
module CalendarsHelper
|
||||
def link_to_previous_month(year, month, options={})
|
||||
target_year, target_month = if month == 1
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
module IssueMovesHelper
|
||||
end
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
@@ -83,7 +85,8 @@ module QueriesHelper
|
||||
else
|
||||
# retrieve from session
|
||||
@query = Query.find_by_id(session[:query][:id]) if session[:query][:id]
|
||||
@query ||= Query.new(:name => "_", :project => @project, :filters => session[:query][:filters], :group_by => session[:query][:group_by], :column_names => session[:query][:column_names])
|
||||
@query ||= Query.new(:name => "_", :filters => session[:query][:filters], :group_by => session[:query][:group_by], :column_names => session[:query][:column_names])
|
||||
@query.project = @project
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Helpers to sort tables using clickable column headers.
|
||||
#
|
||||
# Author: Stuart Rackham <srackham@methods.co.nz>, March 2005.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
#
|
||||
|
||||
@@ -51,6 +51,14 @@ class Group < Principal
|
||||
end
|
||||
end
|
||||
|
||||
def self.human_attribute_name(attribute_key_name)
|
||||
attr_name = attribute_key_name
|
||||
if attr_name == 'lastname'
|
||||
attr_name = "name"
|
||||
end
|
||||
super(attr_name)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Removes references that are not handled by associations
|
||||
|
||||
@@ -74,7 +74,7 @@ class Mailer < ActionMailer::Base
|
||||
subject s
|
||||
body :issue => issue,
|
||||
:journal => journal,
|
||||
:issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
|
||||
:issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}")
|
||||
|
||||
render_multipart('issue_edit', body)
|
||||
end
|
||||
|
||||
@@ -56,6 +56,10 @@ class Version < ActiveRecord::Base
|
||||
effective_date
|
||||
end
|
||||
|
||||
def due_date=(arg)
|
||||
self.effective_date=(arg)
|
||||
end
|
||||
|
||||
# Returns the total estimated time for this version
|
||||
# (sum of leaves estimated_hours)
|
||||
def estimated_hours
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %>
|
||||
<%= prompt_to_remote(image_tag('add.png', :style => 'vertical-align: middle;'),
|
||||
l(:label_issue_category_new),
|
||||
'category[name]',
|
||||
'issue_category[name]',
|
||||
{:controller => 'issue_categories', :action => 'create', :project_id => @project},
|
||||
:title => l(:label_issue_category_new),
|
||||
:tabindex => 199) if authorize_for('issue_categories', 'new') %></p>
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
<div id="footer">
|
||||
<div class="bgl"><div class="bgr">
|
||||
Powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %> © 2006-2011 Jean-Philippe Lang
|
||||
Powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %> © 2006-2012 Jean-Philippe Lang
|
||||
</div></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
<%= javascript_include_tag "revision_graph.js" %>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.onload = function(){
|
||||
Event.observe(window,"load", function(){
|
||||
branchGraph(document.getElementById("holder"));
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<div id="holder" class="graph"></div>
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
<% show_revision_graph = ( @repository.supports_revision_graph? && path.blank? ) %>
|
||||
<% form_tag({:controller => 'repositories', :action => 'diff', :id => @project, :path => to_path_param(path)}, :method => :get) do %>
|
||||
<table class="list changesets">
|
||||
<thead><tr>
|
||||
<% if @repository.supports_revision_graph? %>
|
||||
<th></th>
|
||||
<% if show_revision_graph %>
|
||||
<th></th>
|
||||
<% end %>
|
||||
<th>#</th>
|
||||
<th></th>
|
||||
@@ -16,7 +17,7 @@
|
||||
<% line_num = 1 %>
|
||||
<% revisions.each do |changeset| %>
|
||||
<tr class="changeset <%= cycle 'odd', 'even' %>">
|
||||
<% if @repository.supports_revision_graph? %>
|
||||
<% if show_revision_graph %>
|
||||
<% if line_num == 1 %>
|
||||
<td class="revision_graph" rowspan="<%= revisions.size %>">
|
||||
<% href_base = Proc.new {|x| url_for(:controller => 'repositories',
|
||||
@@ -39,7 +40,7 @@
|
||||
<td class="checkbox"><%= radio_button_tag('rev_to', changeset.identifier, (line_num==2), :id => "cbto-#{line_num}", :onclick => "if ($('cb-#{line_num}').checked==true) {$('cb-#{line_num-1}').checked=true;}") if show_diff && (line_num > 1) %></td>
|
||||
<td class="committed_on"><%= format_time(changeset.committed_on) %></td>
|
||||
<td class="author"><%= h truncate(changeset.author.to_s, :length => 30) %></td>
|
||||
<% if @repository.supports_revision_graph? %>
|
||||
<% if show_revision_graph %>
|
||||
<td class="comments_nowrap">
|
||||
<%= textilizable(truncate(truncate_at_line_break(changeset.comments, 0), :length => 90)) %>
|
||||
</td>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<% form_tag({:action => 'edit', :tab => 'repositories'}) do %>
|
||||
|
||||
<fieldset class="box settings enabled_scm">
|
||||
<%= hidden_field_tag 'settings[enabled_scm][]', '' %>
|
||||
<legend><%= l(:setting_enabled_scm) %></legend>
|
||||
<table>
|
||||
<tr>
|
||||
|
||||
1008
config/locales/ar.yml
Normal file
1008
config/locales/ar.yml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -370,7 +370,7 @@ bg:
|
||||
setting_issue_done_ratio_issue_status: Използване на състоянието на задачите
|
||||
setting_start_of_week: Първи ден на седмицата
|
||||
setting_rest_api_enabled: Разрешаване на REST web сървис
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
setting_cache_formatted_text: Кещиране на форматираните текстове
|
||||
setting_default_notification_option: Подразбиращ се начин за известяване
|
||||
setting_commit_logtime_enabled: Разрешаване на отчитането на работното време
|
||||
setting_commit_logtime_activity_id: Дейност при отчитане на работното време
|
||||
|
||||
@@ -320,7 +320,7 @@ es:
|
||||
field_start_date: Fecha de inicio
|
||||
field_start_page: Página principal
|
||||
field_status: Estado
|
||||
field_subject: Tema
|
||||
field_subject: Asunto
|
||||
field_subproject: Proyecto secundario
|
||||
field_summary: Resumen
|
||||
field_time_zone: Zona horaria
|
||||
@@ -1012,34 +1012,34 @@ es:
|
||||
label_git_report_last_commit: Informar del último commit para ficheros y directorios
|
||||
text_scm_config: Puede configurar las órdenes de cada scm en configuration/configuration.yml. Por favor, reinicie la aplicación después de editarlo
|
||||
text_scm_command_not_available: La orden para el Scm no está disponible. Por favor, compruebe la configuración en el panel de administración.
|
||||
notice_issue_successful_create: Issue %{id} created.
|
||||
label_between: between
|
||||
setting_issue_group_assignment: Allow issue assignment to groups
|
||||
label_diff: diff
|
||||
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
|
||||
description_query_sort_criteria_direction: Sort direction
|
||||
description_project_scope: Search scope
|
||||
description_filter: Filter
|
||||
description_user_mail_notification: Mail notification settings
|
||||
description_date_from: Enter start date
|
||||
description_message_content: Message content
|
||||
description_available_columns: Available Columns
|
||||
description_date_range_interval: Choose range by selecting start and end date
|
||||
description_issue_category_reassign: Choose issue category
|
||||
description_search: Searchfield
|
||||
description_notes: Notes
|
||||
description_date_range_list: Choose range from list
|
||||
description_choose_project: Projects
|
||||
description_date_to: Enter end date
|
||||
description_query_sort_criteria_attribute: Sort attribute
|
||||
description_wiki_subpages_reassign: Choose new parent page
|
||||
description_selected_columns: Selected Columns
|
||||
label_parent_revision: Parent
|
||||
label_child_revision: Child
|
||||
notice_issue_successful_create: Petición %{id} creada.
|
||||
label_between: entre
|
||||
setting_issue_group_assignment: Permitir asignar peticiones a grupos
|
||||
label_diff: diferencias
|
||||
text_git_repository_note: El repositorio es básico y local (p.e. /gitrepo, c:\gitrepo)
|
||||
description_query_sort_criteria_direction: Dirección de ordenación
|
||||
description_project_scope: Ámbito de búsqueda
|
||||
description_filter: Filtro
|
||||
description_user_mail_notification: Configuración de notificaciones por correo
|
||||
description_date_from: Introduzca la fecha de inicio
|
||||
description_message_content: Contenido del mensaje
|
||||
description_available_columns: Columnas disponibles
|
||||
description_date_range_interval: Elija el rango seleccionando la fecha de inicio y fin
|
||||
description_issue_category_reassign: Elija la categoría de la petición
|
||||
description_search: Campo de búsqueda
|
||||
description_notes: Notas
|
||||
description_date_range_list: Elija el rango en la lista
|
||||
description_choose_project: Proyectos
|
||||
description_date_to: Introduzca la fecha fin
|
||||
description_query_sort_criteria_attribute: Atributo de ordenación
|
||||
description_wiki_subpages_reassign: Elija la nueva página padre
|
||||
description_selected_columns: Columnas seleccionadas
|
||||
label_parent_revision: Padre
|
||||
label_child_revision: Hijo
|
||||
setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
|
||||
button_edit_section: Edit this section
|
||||
setting_repositories_encodings: Attachments and repositories encodings
|
||||
description_all_columns: All Columns
|
||||
button_export: Export
|
||||
label_export_options: "%{export_format} export options"
|
||||
error_attachment_too_big: This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})
|
||||
description_all_columns: Todas las columnas
|
||||
button_export: Exportar
|
||||
label_export_options: "%{export_format} opciones de exportación"
|
||||
error_attachment_too_big: Este fichero no se puede adjuntar porque excede el tamaño máximo de fichero (%{max_size})
|
||||
|
||||
@@ -898,7 +898,7 @@ fa:
|
||||
text_user_wrote: "%{value} نوشت:"
|
||||
text_enumeration_destroy_question: "%{count} داده به این برشمردنی وابسته شدهاند."
|
||||
text_enumeration_category_reassign_to: 'به این برشمردنی وابسته شوند:'
|
||||
text_email_delivery_not_configured: "دریافت ایمیل پیکربندی نشده است و آگاهسازیها غیر فعال هستند.\nکارگزار SMTP خود را در config/email.yml پیکربندی کنید و برنامه را بازنشانی کنید تا فعال شوند."
|
||||
text_email_delivery_not_configured: "دریافت ایمیل پیکربندی نشده است و آگاهسازیها غیر فعال هستند.\nکارگزار SMTP خود را در config/configuration.yml پیکربندی کنید و برنامه را بازنشانی کنید تا فعال شوند."
|
||||
text_repository_usernames_mapping: "کاربر Redmine که به هر نام کاربری پیامهای انباره نگاشت میشود را برگزینید.\nکاربرانی که نام کاربری یا ایمیل همسان دارند، خود به خود نگاشت میشوند."
|
||||
text_diff_truncated: '... این تفاوت بریده شده چون بیشتر از بیشترین اندازه نمایش دادنی است.'
|
||||
text_custom_field_possible_values_info: 'یک خط برای هر مقدار'
|
||||
|
||||
@@ -349,8 +349,8 @@ ja:
|
||||
setting_default_language: 既定の言語
|
||||
setting_login_required: 認証が必要
|
||||
setting_self_registration: ユーザは自分で登録できる
|
||||
setting_attachment_max_size: 添付ファイルの最大サイズ
|
||||
setting_issues_export_limit: 出力するチケット数の上限
|
||||
setting_attachment_max_size: 添付ファイルサイズの上限
|
||||
setting_issues_export_limit: エクスポートするチケット数の上限
|
||||
setting_mail_from: 送信元メールアドレス
|
||||
setting_bcc_recipients: ブラインドカーボンコピーで受信(bcc)
|
||||
setting_plain_text_mail: プレインテキストのみ(HTMLなし)
|
||||
@@ -376,7 +376,7 @@ ja:
|
||||
setting_per_page_options: ページ毎の表示件数
|
||||
setting_user_format: ユーザ名の表示書式
|
||||
setting_activity_days_default: プロジェクトの活動ページに表示される日数
|
||||
setting_display_subprojects_issues: デフォルトでサブプロジェクトのチケットをメインプロジェクトに表示する
|
||||
setting_display_subprojects_issues: サブプロジェクトのチケットをメインプロジェクトに表示する
|
||||
setting_enabled_scm: 使用するバージョン管理システム
|
||||
setting_mail_handler_body_delimiters: "メール本文から一致する行以降を切り取る"
|
||||
setting_mail_handler_api_enabled: 受信メール用のWebサービスを有効にする
|
||||
@@ -385,7 +385,7 @@ ja:
|
||||
setting_gravatar_enabled: Gravatarのアイコンを使用する
|
||||
setting_gravatar_default: デフォルトのGravatarアイコン
|
||||
setting_diff_max_lines_displayed: 差分の表示行数の上限
|
||||
setting_file_max_size_displayed: テキストファイルのインライン表示行数の上限
|
||||
setting_file_max_size_displayed: 画面表示するテキストファイルサイズの上限
|
||||
setting_repository_log_display_limit: ファイルのリビジョン表示数の上限
|
||||
setting_openid: OpenIDによるログインと登録
|
||||
setting_password_min_length: パスワードの最低必要文字数
|
||||
@@ -439,7 +439,7 @@ ja:
|
||||
permission_rename_wiki_pages: Wikiページ名の変更
|
||||
permission_delete_wiki_pages: Wikiページの削除
|
||||
permission_view_wiki_pages: Wikiの閲覧
|
||||
permission_export_wiki_pages: Wikiページを他の形式に出力
|
||||
permission_export_wiki_pages: Wikiページを他の形式にエクスポート
|
||||
permission_view_wiki_edits: Wiki履歴の閲覧
|
||||
permission_edit_wiki_pages: Wikiページの編集
|
||||
permission_delete_wiki_pages_attachments: 添付ファイルの削除
|
||||
@@ -583,7 +583,7 @@ ja:
|
||||
label_version_plural: バージョン
|
||||
label_confirmation: 確認
|
||||
label_close_versions: 完了したバージョンを終了にする
|
||||
label_export_to: '他の形式に出力:'
|
||||
label_export_to: '他の形式にエクスポート:'
|
||||
label_read: 読む...
|
||||
label_public_projects: 公開プロジェクト
|
||||
label_open_issues: 未完了
|
||||
@@ -680,7 +680,7 @@ ja:
|
||||
label_latest_revision_plural: 最新リビジョン
|
||||
label_view_revisions: リビジョンを見る
|
||||
label_view_all_revisions: すべてのリビジョンを見る
|
||||
label_max_size: 最大サイズ
|
||||
label_max_size: サイズの上限
|
||||
label_sort_highest: 一番上へ
|
||||
label_sort_higher: 上へ
|
||||
label_sort_lower: 下へ
|
||||
@@ -878,7 +878,7 @@ ja:
|
||||
button_change_password: パスワード変更
|
||||
button_copy: コピー
|
||||
button_copy_and_follow: コピー後表示
|
||||
button_annotate: 注釈
|
||||
button_annotate: アノテート
|
||||
button_update: 更新
|
||||
button_configure: 設定
|
||||
button_quote: 引用
|
||||
@@ -1012,27 +1012,27 @@ ja:
|
||||
notice_issue_successful_create: チケット %{id} が作成されました。
|
||||
label_between: 次の範囲内
|
||||
setting_issue_group_assignment: グループへのチケット割り当てを許可
|
||||
description_query_sort_criteria_direction: Sort direction
|
||||
description_project_scope: Search scope
|
||||
description_query_sort_criteria_direction: 順序
|
||||
description_project_scope: 検索範囲
|
||||
description_filter: Filter
|
||||
description_user_mail_notification: Mail notification settings
|
||||
description_date_from: Enter start date
|
||||
description_message_content: Message content
|
||||
description_available_columns: Available Columns
|
||||
description_date_range_interval: Choose range by selecting start and end date
|
||||
description_issue_category_reassign: Choose issue category
|
||||
description_search: Searchfield
|
||||
description_notes: Notes
|
||||
description_date_range_list: Choose range from list
|
||||
description_choose_project: Projects
|
||||
description_date_to: Enter end date
|
||||
description_query_sort_criteria_attribute: Sort attribute
|
||||
description_wiki_subpages_reassign: Choose new parent page
|
||||
description_selected_columns: Selected Columns
|
||||
error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
|
||||
setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
|
||||
button_edit_section: Edit this section
|
||||
description_all_columns: All Columns
|
||||
button_export: Export
|
||||
label_export_options: "%{export_format} export options"
|
||||
error_attachment_too_big: This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})
|
||||
description_user_mail_notification: メール通知の設定
|
||||
description_date_from: 開始日
|
||||
description_message_content: 内容
|
||||
description_available_columns: 利用できる項目
|
||||
description_date_range_interval: 日付で指定
|
||||
description_issue_category_reassign: 新しいカテゴリを選択してください
|
||||
description_search: 検索キーワード
|
||||
description_notes: 注記
|
||||
description_date_range_list: 一覧から選択
|
||||
description_choose_project: プロジェクト
|
||||
description_date_to: 終了日
|
||||
description_query_sort_criteria_attribute: 項目
|
||||
description_wiki_subpages_reassign: 新しい親ページを選択してください
|
||||
description_selected_columns: 選択された項目
|
||||
error_scm_annotate_big_text_file: テキストファイルサイズの上限を超えているためアノテートできません。
|
||||
setting_default_issue_start_date_to_creation_date: 現在の日付を新しいチケットの開始日とする
|
||||
button_edit_section: このセクションを編集
|
||||
description_all_columns: すべての項目
|
||||
button_export: エクスポート
|
||||
label_export_options: "%{export_format} エクスポート設定"
|
||||
error_attachment_too_big: このファイルはアップロードできません。添付ファイルサイズの上限(%{max_size})を超えています。
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
# by Kihyun Yoon(ddumbugie@gmail.com),http://plenum.textcube.com/
|
||||
# by John Hwang (jhwang@tavon.org),http://github.com/tavon
|
||||
# by Yonghwan SO(please insert your email), last update at 2009-09-11
|
||||
# last update at 2010-09-06 by Kihyun Yoon
|
||||
# by Ki Won Kim(xyz37@naver.com, http://xyz37.blog.me, https://x10.mine.nu/redmine), last update at 2012-02-01
|
||||
# last update at 2012-02-02 by Ki Won Kim
|
||||
ko:
|
||||
direction: ltr
|
||||
date:
|
||||
@@ -176,7 +177,7 @@ ko:
|
||||
greater_than_start_date: "는 시작날짜보다 커야 합니다"
|
||||
not_same_project: "는 같은 프로젝트에 속해 있지 않습니다"
|
||||
circular_dependency: "이 관계는 순환 의존관계를 만들 수 있습니다"
|
||||
cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
|
||||
cant_link_an_issue_with_a_descendant: "일감은 그것의 하위 일감과 연결할 수 없습니다."
|
||||
|
||||
actionview_instancetag_blank_option: 선택하세요
|
||||
|
||||
@@ -287,7 +288,7 @@ ko:
|
||||
field_admin: 관리자
|
||||
field_last_login_on: 마지막 로그인
|
||||
field_language: 언어
|
||||
field_effective_date: 일자
|
||||
field_effective_date: 날짜
|
||||
field_password: 비밀번호
|
||||
field_new_password: 새 비밀번호
|
||||
field_password_confirmation: 비밀번호 확인
|
||||
@@ -363,7 +364,7 @@ ko:
|
||||
setting_user_format: 사용자 표시 형식
|
||||
setting_activity_days_default: 프로젝트 작업내역에 표시할 기간
|
||||
setting_display_subprojects_issues: 하위 프로젝트의 일감을 함께 표시
|
||||
setting_enabled_scm: 지원할 SCM
|
||||
setting_enabled_scm: "지원할 SCM(Source Control Management)"
|
||||
setting_mail_handler_api_enabled: 수신 메일에 WS를 허용
|
||||
setting_mail_handler_api_key: API 키
|
||||
setting_sequential_project_identifiers: 프로젝트 식별자를 순차적으로 생성
|
||||
@@ -686,10 +687,10 @@ ko:
|
||||
label_blocked_by: "다음 일감에게 막혀 있음:"
|
||||
label_precedes: "다음에 진행할 일감:"
|
||||
label_follows: "다음 일감을 우선 진행:"
|
||||
label_end_to_start: end to start
|
||||
label_end_to_end: end to end
|
||||
label_start_to_start: start to start
|
||||
label_start_to_end: start to end
|
||||
label_end_to_start: "끝에서 시작"
|
||||
label_end_to_end: "끝에서 끝"
|
||||
label_start_to_start: "시작에서 시작"
|
||||
label_start_to_end: "시작에서 끝"
|
||||
label_stay_logged_in: 로그인 유지
|
||||
label_disabled: 비활성화
|
||||
label_show_completed_versions: 완료된 버전 보기
|
||||
@@ -987,74 +988,74 @@ ko:
|
||||
setting_commit_logtime_activity_id: 기록된 시간에 적용할 작업분류
|
||||
text_time_logged_by_changeset: "변경묶음 %{value}에서 적용되었습니다."
|
||||
setting_commit_logtime_enabled: 커밋 시점에 작업 시간 기록 활성화
|
||||
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
|
||||
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
|
||||
field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
|
||||
text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
|
||||
label_my_queries: My custom queries
|
||||
text_journal_changed_no_detail: "%{label} updated"
|
||||
label_news_comment_added: Comment added to a news
|
||||
button_expand_all: Expand all
|
||||
button_collapse_all: Collapse all
|
||||
label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
|
||||
label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
|
||||
label_bulk_edit_selected_time_entries: Bulk edit selected time entries
|
||||
text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
|
||||
notice_gantt_chart_truncated: "표시할 수 있는 최대 항목수(%{max})를 초과하여 차트가 잘렸습니다."
|
||||
setting_gantt_items_limit: "Gantt 차트에 표시되는 최대 항목수"
|
||||
field_warn_on_leaving_unsaved: "저장하지 않은 페이지를 빠져나갈 때 나에게 알림"
|
||||
text_warn_on_leaving_unsaved: "현재 페이지는 저장되지 않은 문자가 있습니다. 이 페이지를 빠져나가면 내용을 잃을것입니다."
|
||||
label_my_queries: "내 검색 양식"
|
||||
text_journal_changed_no_detail: "%{label}이 변경되었습니다."
|
||||
label_news_comment_added: "뉴스에 설명이 추가되었습니다."
|
||||
button_expand_all: "모두 확장"
|
||||
button_collapse_all: "모두 축소"
|
||||
label_additional_workflow_transitions_for_assignee: "사용자가 작업자일 때 허용되는 추가 상태"
|
||||
label_additional_workflow_transitions_for_author: "사용자가 저자일 때 허용되는 추가 상태"
|
||||
label_bulk_edit_selected_time_entries: "선택된 소요 시간 대량 편집"
|
||||
text_time_entries_destroy_confirmation: "선택한 소요 시간 항목을 삭제하시겠습니까?"
|
||||
label_role_anonymous: Anonymous
|
||||
label_role_non_member: Non member
|
||||
label_issue_note_added: Note added
|
||||
label_issue_status_updated: Status updated
|
||||
label_issue_priority_updated: Priority updated
|
||||
label_issues_visibility_own: Issues created by or assigned to the user
|
||||
field_issues_visibility: Issues visibility
|
||||
label_issues_visibility_all: All issues
|
||||
permission_set_own_issues_private: Set own issues public or private
|
||||
field_is_private: Private
|
||||
permission_set_issues_private: Set issues public or private
|
||||
label_issues_visibility_public: All non private issues
|
||||
text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
|
||||
field_commit_logs_encoding: 제출(commit) 기록 인코딩
|
||||
field_scm_path_encoding: Path encoding
|
||||
text_scm_path_encoding_note: "Default: UTF-8"
|
||||
field_path_to_repository: Path to repository
|
||||
field_root_directory: Root directory
|
||||
field_cvs_module: Module
|
||||
field_cvsroot: CVSROOT
|
||||
text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
notice_issue_successful_create: Issue %{id} created.
|
||||
label_between: between
|
||||
setting_issue_group_assignment: Allow issue assignment to groups
|
||||
label_diff: diff
|
||||
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
|
||||
description_query_sort_criteria_direction: Sort direction
|
||||
description_project_scope: Search scope
|
||||
description_filter: Filter
|
||||
description_user_mail_notification: Mail notification settings
|
||||
description_date_from: Enter start date
|
||||
description_message_content: Message content
|
||||
description_available_columns: Available Columns
|
||||
description_date_range_interval: Choose range by selecting start and end date
|
||||
description_issue_category_reassign: Choose issue category
|
||||
description_search: Searchfield
|
||||
description_notes: Notes
|
||||
description_date_range_list: Choose range from list
|
||||
description_choose_project: Projects
|
||||
description_date_to: Enter end date
|
||||
description_query_sort_criteria_attribute: Sort attribute
|
||||
description_wiki_subpages_reassign: Choose new parent page
|
||||
description_selected_columns: Selected Columns
|
||||
label_parent_revision: Parent
|
||||
label_child_revision: Child
|
||||
error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
|
||||
setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
|
||||
button_edit_section: Edit this section
|
||||
setting_repositories_encodings: Attachments and repositories encodings
|
||||
description_all_columns: All Columns
|
||||
button_export: Export
|
||||
label_export_options: "%{export_format} export options"
|
||||
error_attachment_too_big: This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})
|
||||
label_issue_note_added: "덧글이 추가되었습니다."
|
||||
label_issue_status_updated: "상태가 변경되었습니다."
|
||||
label_issue_priority_updated: "우선 순위가 변경되었습니다."
|
||||
label_issues_visibility_own: "일감을 생성하거나 할당된 사용자"
|
||||
field_issues_visibility: "일감 보임"
|
||||
label_issues_visibility_all: "모든 일감"
|
||||
permission_set_own_issues_private: "자신의 일감을 공개나 비공개로 설정"
|
||||
field_is_private: "비공개"
|
||||
permission_set_issues_private: "일감을 공개나 비공개로 설정"
|
||||
label_issues_visibility_public: "모든 비공개 일감"
|
||||
text_issues_destroy_descendants_confirmation: "%{count} 개의 하위 일감을 삭제할 것입니다."
|
||||
field_commit_logs_encoding: "제출(commit) 기록 인코딩"
|
||||
field_scm_path_encoding: "경로 인코딩"
|
||||
text_scm_path_encoding_note: "기본: UTF-8"
|
||||
field_path_to_repository: "저장소 경로"
|
||||
field_root_directory: "루트 경로"
|
||||
field_cvs_module: "모듈"
|
||||
field_cvsroot: "CVS 루트"
|
||||
text_mercurial_repository_note: "로컬 저장소 (예: /hgrepo, c:\hgrepo)"
|
||||
text_scm_command: "명령"
|
||||
text_scm_command_version: "버전"
|
||||
label_git_report_last_commit: "파일이나 폴더의 마지막 제출(commit)을 보고"
|
||||
text_scm_config: "SCM 명령을 config/configuration.yml에서 수정할 수 있습니다. 수정후에는 재시작하십시오."
|
||||
text_scm_command_not_available: "SCM 명령을 사용할 수 없습니다. 관리 페이지의 설정을 검사하십시오."
|
||||
notice_issue_successful_create: "%{id} 일감이 생성되었습니다."
|
||||
label_between: "사이"
|
||||
setting_issue_group_assignment: "그룹에 일감 할당 허용"
|
||||
label_diff: "비교(diff)"
|
||||
text_git_repository_note: "저장소는 노출된 로컬입니다. (예: /gitrepo, c:\gitrepo)"
|
||||
description_query_sort_criteria_direction: "정렬 방향"
|
||||
description_project_scope: "검색 범위"
|
||||
description_filter: "검색 조건"
|
||||
description_user_mail_notification: "메일 알림 설정"
|
||||
description_date_from: "시작 날짜 입력"
|
||||
description_message_content: "메세지 내용"
|
||||
description_available_columns: "가능한 컬럼"
|
||||
description_date_range_interval: 시작과 끝 날짜로 범위를 선택하십시오."
|
||||
description_issue_category_reassign: "일감 범주를 선택하십시오."
|
||||
description_search: "검색항목"
|
||||
description_notes: "덧글"
|
||||
description_date_range_list: "목록에서 범위를 선택 하십시오."
|
||||
description_choose_project: "프로젝트"
|
||||
description_date_to: "종료 날짜 입력"
|
||||
description_query_sort_criteria_attribute: "정렬 속성"
|
||||
description_wiki_subpages_reassign: "새로운 상위 페이지를 선택하십시오."
|
||||
description_selected_columns: "선택된 컬럼"
|
||||
label_parent_revision: "상위"
|
||||
label_child_revision: "하위"
|
||||
error_scm_annotate_big_text_file: "최대 텍스트 파일 크기를 초과 하면 항목은 이력화 될 수 없습니다."
|
||||
setting_default_issue_start_date_to_creation_date: "새로운 일감의 시작 날짜로 오늘 날짜 사용"
|
||||
button_edit_section: "이 부분 수정"
|
||||
setting_repositories_encodings: "첨부파일이나 저장소 인코딩"
|
||||
description_all_columns: "모든 컬럼"
|
||||
button_export: "내보내기"
|
||||
label_export_options: "내보내기 옵션: %{export_format}"
|
||||
error_attachment_too_big: "이 파일은 제한된 크기(%{max_size})를 초과하였기 때문에 업로드 할 수 없습니다."
|
||||
|
||||
@@ -1000,23 +1000,25 @@ pt-BR:
|
||||
setting_issue_group_assignment: Allow issue assignment to groups
|
||||
label_diff: diff
|
||||
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
|
||||
|
||||
description_query_sort_criteria_direction: Sort direction
|
||||
description_project_scope: Search scope
|
||||
description_filter: Filter
|
||||
description_user_mail_notification: Mail notification settings
|
||||
description_date_from: Enter start date
|
||||
description_message_content: Message content
|
||||
description_available_columns: Available Columns
|
||||
description_date_range_interval: Choose range by selecting start and end date
|
||||
description_issue_category_reassign: Choose issue category
|
||||
description_project_scope: Escopo da pesquisa
|
||||
description_filter: Filtro
|
||||
description_user_mail_notification: Configuração de notificações por e-mail
|
||||
description_date_from: Digita a data inicial
|
||||
description_message_content: Conteúdo da mensagem
|
||||
description_available_columns: Colunas disponíveis
|
||||
description_date_range_interval: Escolha um período selecionando a data de início e fim
|
||||
description_issue_category_reassign: Escolha uma categoria de tarefas
|
||||
description_search: Searchfield
|
||||
description_notes: Notes
|
||||
description_date_range_list: Choose range from list
|
||||
description_choose_project: Projects
|
||||
description_date_to: Enter end date
|
||||
description_notes: Notas
|
||||
description_date_range_list: Escolha um período a partira da lista
|
||||
description_choose_project: Projetos
|
||||
description_date_to: Digite a data final
|
||||
description_query_sort_criteria_attribute: Sort attribute
|
||||
description_wiki_subpages_reassign: Choose new parent page
|
||||
description_selected_columns: Selected Columns
|
||||
description_wiki_subpages_reassign: Escolha uma nova página pai
|
||||
description_selected_columns: Colunas selecionadas
|
||||
|
||||
label_parent_revision: Parent
|
||||
label_child_revision: Child
|
||||
error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
|
||||
|
||||
@@ -8,10 +8,10 @@ uk:
|
||||
default: "%Y-%m-%d"
|
||||
short: "%b %d"
|
||||
long: "%B %d, %Y"
|
||||
|
||||
|
||||
day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
|
||||
abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
|
||||
|
||||
|
||||
# Don't forget the nil at the beginning; there's no such thing as a 0th month
|
||||
month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
|
||||
abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
|
||||
@@ -29,7 +29,7 @@ uk:
|
||||
long: "%B %d, %Y %H:%M"
|
||||
am: "am"
|
||||
pm: "pm"
|
||||
|
||||
|
||||
datetime:
|
||||
distance_in_words:
|
||||
half_a_minute: "half a minute"
|
||||
@@ -67,32 +67,32 @@ uk:
|
||||
one: "almost 1 year"
|
||||
other: "almost %{count} years"
|
||||
|
||||
number:
|
||||
number:
|
||||
format:
|
||||
separator: "."
|
||||
delimiter: ""
|
||||
precision: 3
|
||||
human:
|
||||
format:
|
||||
human:
|
||||
format:
|
||||
precision: 1
|
||||
delimiter: ""
|
||||
storage_units:
|
||||
storage_units:
|
||||
format: "%n %u"
|
||||
units:
|
||||
units:
|
||||
kb: KB
|
||||
tb: TB
|
||||
gb: GB
|
||||
byte:
|
||||
byte:
|
||||
one: Byte
|
||||
other: Bytes
|
||||
mb: MB
|
||||
|
||||
|
||||
# Used in array.to_sentence.
|
||||
support:
|
||||
array:
|
||||
sentence_connector: "and"
|
||||
skip_last_comma: false
|
||||
|
||||
|
||||
activerecord:
|
||||
errors:
|
||||
template:
|
||||
@@ -126,7 +126,7 @@ uk:
|
||||
cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
|
||||
|
||||
actionview_instancetag_blank_option: Оберіть
|
||||
|
||||
|
||||
general_text_No: 'Ні'
|
||||
general_text_Yes: 'Так'
|
||||
general_text_no: 'Ні'
|
||||
@@ -137,7 +137,7 @@ uk:
|
||||
general_csv_encoding: UTF-8
|
||||
general_pdf_encoding: UTF-8
|
||||
general_first_day_of_week: '1'
|
||||
|
||||
|
||||
notice_account_updated: Обліковий запис успішно оновлений.
|
||||
notice_account_invalid_creditentials: Неправильне ім'я користувача або пароль
|
||||
notice_account_password_updated: Пароль успішно оновлений.
|
||||
@@ -161,7 +161,7 @@ uk:
|
||||
notice_failed_to_save_issues: "Не вдалося зберегти %{count} пункт(ів) з %{total} вибраних: %{ids}."
|
||||
notice_no_issue_selected: "Не вибрано жодної задачі! Будь ласка, відзначте задачу, яку ви хочете відредагувати."
|
||||
notice_account_pending: "Ваш обліковий запис створено і він чекає на підтвердження адміністратором."
|
||||
|
||||
|
||||
mail_subject_lost_password: "Ваш %{value} пароль"
|
||||
mail_body_lost_password: 'Для зміни пароля, зайдіть за наступним посиланням:'
|
||||
mail_subject_register: "Активація облікового запису %{value}"
|
||||
@@ -170,10 +170,10 @@ uk:
|
||||
mail_body_account_information: Інформація по Вашому обліковому запису
|
||||
mail_subject_account_activation_request: "Запит на активацію облікового запису %{value}"
|
||||
mail_body_account_activation_request: "Новий користувач (%{value}) зареєструвався. Його обліковий запис чекає на ваше підтвердження:"
|
||||
|
||||
|
||||
gui_validation_error: 1 помилка
|
||||
gui_validation_error_plural: "%{count} помилки(ок)"
|
||||
|
||||
|
||||
field_name: Ім'я
|
||||
field_description: Опис
|
||||
field_summary: Короткий опис
|
||||
@@ -191,8 +191,8 @@ uk:
|
||||
field_is_for_all: Для усіх проектів
|
||||
field_possible_values: Можливі значення
|
||||
field_regexp: Регулярний вираз
|
||||
field_min_length: Мінімальна довжина
|
||||
field_max_length: Максимальна довжина
|
||||
field_min_length: Мінімальна довжина
|
||||
field_max_length: Максимальна довжина
|
||||
field_value: Значення
|
||||
field_category: Категорія
|
||||
field_title: Назва
|
||||
@@ -214,9 +214,9 @@ uk:
|
||||
field_is_public: Публічний
|
||||
field_parent: Підпроект
|
||||
field_is_in_roadmap: Питання, що відображаються в оперативному плані
|
||||
field_login: Вхід
|
||||
field_login: Вхід
|
||||
field_mail_notification: Повідомлення за електронною поштою
|
||||
field_admin: Адміністратор
|
||||
field_admin: Адміністратор
|
||||
field_last_login_on: Останнє підключення
|
||||
field_language: Мова
|
||||
field_effective_date: Дата
|
||||
@@ -255,7 +255,7 @@ uk:
|
||||
field_column_names: Колонки
|
||||
field_time_zone: Часовий пояс
|
||||
field_searchable: Вживається у пошуку
|
||||
|
||||
|
||||
setting_app_title: Назва додатку
|
||||
setting_app_subtitle: Підзаголовок додатку
|
||||
setting_welcome_text: Текст привітання
|
||||
@@ -281,7 +281,7 @@ uk:
|
||||
setting_issue_list_default_columns: Колонки, що відображаються за умовчанням в списку питань
|
||||
setting_emails_footer: Підпис до електронної пошти
|
||||
setting_protocol: Протокол
|
||||
|
||||
|
||||
label_user: Користувач
|
||||
label_user_plural: Користувачі
|
||||
label_user_new: Новий користувач
|
||||
@@ -404,15 +404,15 @@ uk:
|
||||
label_total: Всього
|
||||
label_permissions: Права доступу
|
||||
label_current_status: Поточний статус
|
||||
label_new_statuses_allowed: Дозволені нові статуси
|
||||
label_new_statuses_allowed: Дозволені нові статуси
|
||||
label_all: Усі
|
||||
label_none: Нікому
|
||||
label_nobody: Ніхто
|
||||
label_next: Наступний
|
||||
label_previous: Попередній
|
||||
label_used_by: Використовується
|
||||
label_used_by: Використовується
|
||||
label_details: Подробиці
|
||||
label_add_note: Додати зауваження
|
||||
label_add_note: Додати зауваження
|
||||
label_per_page: На сторінку
|
||||
label_calendar: Календар
|
||||
label_months_from: місяців(ця) з
|
||||
@@ -442,8 +442,8 @@ uk:
|
||||
label_in: у
|
||||
label_today: сьогодні
|
||||
label_this_week: цього тижня
|
||||
label_less_than_ago: менш ніж днів(я) назад
|
||||
label_more_than_ago: більш ніж днів(я) назад
|
||||
label_less_than_ago: менш ніж днів(я) назад
|
||||
label_more_than_ago: більш ніж днів(я) назад
|
||||
label_ago: днів(я) назад
|
||||
label_contains: містить
|
||||
label_not_contains: не містить
|
||||
@@ -455,7 +455,7 @@ uk:
|
||||
label_revision: Версія
|
||||
label_revision_plural: Версій
|
||||
label_added: додано
|
||||
label_modified: змінене
|
||||
label_modified: змінене
|
||||
label_deleted: видалено
|
||||
label_latest_revision: Остання версія
|
||||
label_latest_revision_plural: Останні версії
|
||||
@@ -470,11 +470,11 @@ uk:
|
||||
label_roadmap_overdue: "%{value} запізнення"
|
||||
label_roadmap_no_issues: Немає питань для даної версії
|
||||
label_search: Пошук
|
||||
label_result_plural: Результати
|
||||
label_result_plural: Результати
|
||||
label_all_words: Всі слова
|
||||
label_wiki: Wiki
|
||||
label_wiki_edit: Редагування Wiki
|
||||
label_wiki_edit_plural: Редагування Wiki
|
||||
label_wiki_edit_plural: Редагування Wiki
|
||||
label_wiki_page: Сторінка Wiki
|
||||
label_wiki_page_plural: Сторінки Wiki
|
||||
label_index_by_title: Індекс за назвою
|
||||
@@ -482,7 +482,7 @@ uk:
|
||||
label_current_version: Поточна версія
|
||||
label_preview: Попередній перегляд
|
||||
label_feed_plural: Подання
|
||||
label_changes_details: Подробиці по всіх змінах
|
||||
label_changes_details: Подробиці по всіх змінах
|
||||
label_issue_tracking: Координація питань
|
||||
label_spent_time: Витрачений час
|
||||
label_f_hour: "%{value} година"
|
||||
@@ -491,7 +491,7 @@ uk:
|
||||
label_change_plural: Зміни
|
||||
label_statistics: Статистика
|
||||
label_commits_per_month: Подань на місяць
|
||||
label_commits_per_author: Подань на користувача
|
||||
label_commits_per_author: Подань на користувача
|
||||
label_view_diff: Проглянути відмінності
|
||||
label_diff_inline: підключений
|
||||
label_diff_side_by_side: поряд
|
||||
@@ -507,7 +507,7 @@ uk:
|
||||
label_relates_to: пов'язане з
|
||||
label_duplicates: дублює
|
||||
label_blocks: блокує
|
||||
label_blocked_by: заблоковане
|
||||
label_blocked_by: заблоковане
|
||||
label_precedes: передує
|
||||
label_follows: наступний за
|
||||
label_end_to_start: з кінця до початку
|
||||
@@ -555,12 +555,12 @@ uk:
|
||||
label_registration_manual_activation: ручна активація облікового запису
|
||||
label_registration_automatic_activation: автоматична активація облыкового
|
||||
label_my_time_report: Мій звіт витраченого часу
|
||||
|
||||
|
||||
button_login: Вхід
|
||||
button_submit: Відправити
|
||||
button_save: Зберегти
|
||||
button_check_all: Відзначити все
|
||||
button_uncheck_all: Очистити
|
||||
button_check_all: Відзначити все
|
||||
button_uncheck_all: Очистити
|
||||
button_delete: Видалити
|
||||
button_create: Створити
|
||||
button_test: Перевірити
|
||||
@@ -588,14 +588,14 @@ uk:
|
||||
button_unarchive: Розархівувати
|
||||
button_reset: Перезапустити
|
||||
button_rename: Перейменувати
|
||||
button_change_password: Змінити пароль
|
||||
button_change_password: Змінити пароль
|
||||
button_copy: Копіювати
|
||||
button_annotate: Анотувати
|
||||
|
||||
|
||||
status_active: Активний
|
||||
status_registered: Зареєстрований
|
||||
status_registered: Зареєстрований
|
||||
status_locked: Заблокований
|
||||
|
||||
|
||||
text_select_mail_notifications: Виберіть дії, на які відсилатиметься повідомлення на електронну пошту.
|
||||
text_regexp_info: eg. ^[A-Z0-9]+$
|
||||
text_min_max_length_info: 0 означає відсутність заборон
|
||||
@@ -620,12 +620,14 @@ uk:
|
||||
text_issue_category_destroy_assignments: Видалити призначення категорії
|
||||
text_issue_category_reassign_to: Перепризначити задачі до даної категорії
|
||||
text_user_mail_option: "Для невибраних проектів ви отримуватимете повідомлення тільки про те, що проглядаєте або в чому берете участь (наприклад, питання автором яких ви є або які вам призначені)."
|
||||
|
||||
|
||||
default_role_manager: Менеджер
|
||||
default_role_developer: Розробник
|
||||
default_role_reporter: Репортер
|
||||
звітів default_tracker_bug: Помилка
|
||||
default_tracker_feature: Властивість
|
||||
# default_tracker_bug: Bug
|
||||
# звітів default_tracker_bug: Помилка
|
||||
default_tracker_bug: Помилка
|
||||
default_tracker_feature: Властивість
|
||||
default_tracker_support: Підтримка
|
||||
default_issue_status_new: Новий
|
||||
default_issue_status_in_progress: In Progress
|
||||
@@ -634,7 +636,7 @@ uk:
|
||||
default_issue_status_closed: Зачинено
|
||||
default_issue_status_rejected: Відмовлено
|
||||
default_doc_category_user: Документація користувача
|
||||
default_doc_category_tech: Технічна документація
|
||||
default_doc_category_tech: Технічна документація
|
||||
default_priority_low: Низький
|
||||
default_priority_normal: Нормальний
|
||||
default_priority_high: Високий
|
||||
@@ -642,7 +644,7 @@ uk:
|
||||
default_priority_immediate: Негайний
|
||||
default_activity_design: Проектування
|
||||
default_activity_development: Розробка
|
||||
|
||||
|
||||
enumeration_issue_priorities: Пріоритети питань
|
||||
enumeration_doc_categories: Категорії документів
|
||||
enumeration_activities: Дії (облік часу)
|
||||
@@ -663,7 +665,6 @@ uk:
|
||||
label_file_added: File added
|
||||
label_more: More
|
||||
field_default_value: Default value
|
||||
default_tracker_bug: Bug
|
||||
label_scm: SCM
|
||||
label_general: General
|
||||
button_update: Update
|
||||
|
||||
@@ -80,7 +80,7 @@ ActionController::Routing::Routes.draw do |map|
|
||||
map.resources :queries, :except => [:show]
|
||||
|
||||
# Misc issue routes. TODO: move into resources
|
||||
map.auto_complete_issues '/issues/auto_complete', :controller => 'auto_completes', :action => 'issues'
|
||||
map.auto_complete_issues '/issues/auto_complete', :controller => 'auto_completes', :action => 'issues', :conditions => { :method => :get }
|
||||
map.preview_issue '/issues/preview/:id', :controller => 'previews', :action => 'issue' # TODO: would look nicer as /issues/:id/preview
|
||||
map.issues_context_menu '/issues/context_menu', :controller => 'context_menus', :action => 'issues'
|
||||
map.issue_changes '/issues/changes', :controller => 'journals', :action => 'index'
|
||||
|
||||
121
doc/CHANGELOG
121
doc/CHANGELOG
@@ -1,9 +1,128 @@
|
||||
== Redmine changelog
|
||||
|
||||
Redmine - project management software
|
||||
Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
Copyright (C) 2006-2012 Jean-Philippe Lang
|
||||
http://www.redmine.org/
|
||||
|
||||
== 2012-02-06 v1.3.1
|
||||
|
||||
* Defect #9775: app/views/repository/_revision_graph.html.erb sets window.onload directly..
|
||||
* Defect #9792: Ruby 1.9: [v1.3.0] Error: incompatible character encodings for it translation on Calendar page
|
||||
* Defect #9793: Bad spacing between numbered list and heading (recently broken).
|
||||
* Defect #9795: Unrelated error message when creating a group with an invalid name
|
||||
* Defect #9832: Revision graph height should depend on height of rows in revisions table
|
||||
* Defect #9937: Repository settings are not saved when all SCM are disabled
|
||||
* Defect #9961: Ukrainian "default_tracker_bug" is wrong
|
||||
* Defect #10013: Rest API - Create Version -> Internal server error 500
|
||||
* Defect #10115: Javascript error - Can't attach more than 1 file on IE 6 and 7
|
||||
* Defect #10130: Broken italic text style in edited comment preview
|
||||
* Defect #10152: Attachment diff type is not saved in user preference
|
||||
* Feature #9943: Arabic translation
|
||||
* Patch #9874: pt-BR translation updates
|
||||
* Patch #9922: Spanish translation updated
|
||||
* Patch #10137: Korean language file ko.yml updated to Redmine 1.3.0
|
||||
|
||||
== 2011-12-10 v1.3.0
|
||||
|
||||
* Defect #2109: Context menu is being submitted twice per right click
|
||||
* Defect #7717: MailHandler user creation for unknown_user impossible due to diverging length-limits of login and email fields
|
||||
* Defect #7917: Creating users via email fails if user real name containes special chars
|
||||
* Defect #7966: MailHandler does not include JournalDetail for attached files
|
||||
* Defect #8368: Bad decimal separator in time entry CSV
|
||||
* Defect #8371: MySQL error when filtering a custom field using the REST api
|
||||
* Defect #8549: Export CSV has character encoding error
|
||||
* Defect #8573: Do not show inactive Enumerations where not needed
|
||||
* Defect #8611: rake/rdoctask is deprecated
|
||||
* Defect #8751: Email notification: bug, when number of recipients more then 8
|
||||
* Defect #8894: Private issues - make it more obvious in the UI?
|
||||
* Defect #8994: Hardcoded French string "anonyme"
|
||||
* Defect #9043: Hardcoded string "diff" in Wiki#show and Repositories_Helper
|
||||
* Defect #9051: wrong "text_issue_added" in russian translation.
|
||||
* Defect #9108: Custom query not saving status filter
|
||||
* Defect #9252: Regression: application title escaped 2 times
|
||||
* Defect #9264: Bad Portuguese translation
|
||||
* Defect #9470: News list is missing Avatars
|
||||
* Defect #9471: Inline markup broken in Wiki link labels
|
||||
* Defect #9489: Label all input field and control tags
|
||||
* Defect #9534: Precedence: bulk email header is non standard and discouraged
|
||||
* Defect #9540: Issue filter by assigned_to_role is not project specific
|
||||
* Defect #9619: Time zone ignored when logging time while editing ticket
|
||||
* Defect #9638: Inconsistent image filename extensions
|
||||
* Defect #9669: Issue list doesn't sort assignees/authors regarding user display format
|
||||
* Defect #9672: Message-quoting in forums module broken
|
||||
* Defect #9719: Filtering by numeric custom field types broken after update to master
|
||||
* Defect #9724: Can't remote add new categories
|
||||
* Defect #9738: Setting of cross-project custom query is not remembered inside project
|
||||
* Defect #9748: Error about configuration.yml validness should mention file path
|
||||
* Feature #69: Textilized description in PDF
|
||||
* Feature #401: Add pdf export for WIKI page
|
||||
* Feature #1567: Make author column sortable and groupable
|
||||
* Feature #2222: Single section edit.
|
||||
* Feature #2269: Default issue start date should become configurable.
|
||||
* Feature #2371: character encoding for attachment file
|
||||
* Feature #2964: Ability to assign issues to groups
|
||||
* Feature #3033: Bug Reporting: Using "Create and continue" should show bug id of saved bug
|
||||
* Feature #3261: support attachment images in PDF export
|
||||
* Feature #4264: Update CodeRay to 1.0 final
|
||||
* Feature #4324: Redmine renames my files, it shouldn't.
|
||||
* Feature #4729: Add Date-Based Filters for Issues List
|
||||
* Feature #4742: CSV export: option to export selected or all columns
|
||||
* Feature #4976: Allow rdm-mailhandler to read the API key from a file
|
||||
* Feature #5501: Git: Mercurial: Adding visual merge/branch history to repository view
|
||||
* Feature #5634: Export issue to PDF does not include Subtasks and Related Issues
|
||||
* Feature #5670: Cancel option for file upload
|
||||
* Feature #5737: Custom Queries available through the REST Api
|
||||
* Feature #6180: Searchable custom fields do not provide adequate operators
|
||||
* Feature #6954: Filter from date to date
|
||||
* Feature #7180: List of statuses in REST API
|
||||
* Feature #7181: List of trackers in REST API
|
||||
* Feature #7366: REST API for Issue Relations
|
||||
* Feature #7403: REST API for Versions
|
||||
* Feature #7671: REST API for reading attachments
|
||||
* Feature #7832: Ability to assign issue categories to groups
|
||||
* Feature #8420: Consider removing #7013 workaround
|
||||
* Feature #9196: Improve logging in MailHandler when user creation fails
|
||||
* Feature #9496: Adds an option in mailhandler to disable server certificate verification
|
||||
* Feature #9553: CRUD operations for "Issue categories" in REST API
|
||||
* Feature #9593: HTML title should be reordered
|
||||
* Feature #9600: Wiki links for news and forums
|
||||
* Feature #9607: Filter for issues without start date (or any another field based on date type)
|
||||
* Feature #9609: Upgrade to Rails 2.3.14
|
||||
* Feature #9612: "side by side" and "inline" patch view for attachments
|
||||
* Feature #9667: Check attachment size before upload
|
||||
* Feature #9690: Link in notification pointing to the actual update
|
||||
* Feature #9720: Add note number for single issue's PDF
|
||||
* Patch #8617: Indent subject of subtask ticket in exported issues PDF
|
||||
* Patch #8778: Traditional Chinese 'issue' translation change
|
||||
* Patch #9053: Fix up Russian translation
|
||||
* Patch #9129: Improve wording of Git repository note at project setting
|
||||
* Patch #9148: Better handling of field_due_date italian translation
|
||||
* Patch #9273: Fix typos in russian localization
|
||||
* Patch #9484: Limit SCM annotate to text files under the maximum file size for viewing
|
||||
* Patch #9659: Indexing rows in auth_sources/index view
|
||||
* Patch #9692: Fix Textilized description in PDF for CodeRay
|
||||
|
||||
== 2011-12-10 v1.2.3
|
||||
|
||||
* Defect #8707: Reposman: wrong constant name
|
||||
* Defect #8809: Table in timelog report overflows
|
||||
* Defect #9055: Version files in Files module cannot be downloaded if issue tracking is disabled
|
||||
* Defect #9137: db:encrypt fails to handle repositories with blank password
|
||||
* Defect #9394: Custom date field only validating on regex and not a valid date
|
||||
* Defect #9405: Any user with :log_time permission can edit time entries via context menu
|
||||
* Defect #9448: The attached images are not shown in documents
|
||||
* Defect #9520: Copied private query not visible after project copy
|
||||
* Defect #9552: Error when reading ciphered text from the database without cipher key configured
|
||||
* Defect #9566: Redmine.pm considers all projects private when login_required is enabled
|
||||
* Defect #9567: Redmine.pm potential security issue with cache credential enabled and subversion
|
||||
* Defect #9577: Deleting a subtasks doesn't update parent's rgt & lft values
|
||||
* Defect #9597: Broken version links in wiki annotate history
|
||||
* Defect #9682: Wiki HTML Export only useful when Access history is accessible
|
||||
* Defect #9737: Custom values deleted before issue submit
|
||||
* Defect #9741: calendar-hr.js (Croatian) is not UTF-8
|
||||
* Patch #9558: Simplified Chinese translation for 1.2.2 updated
|
||||
* Patch #9695: Bulgarian translation (r7942)
|
||||
|
||||
== 2011-11-11 v1.2.2
|
||||
|
||||
* Defect #3276: Incorrect handling of anchors in Wiki to HTML export
|
||||
|
||||
@@ -49,7 +49,7 @@ Authen::Simple::LDAP (and IO::Socket::SSL if LDAPS is used):
|
||||
|
||||
PerlAccessHandler Apache::Authn::Redmine::access_handler
|
||||
PerlAuthenHandler Apache::Authn::Redmine::authen_handler
|
||||
|
||||
|
||||
## for mysql
|
||||
RedmineDSN "DBI:mysql:database=databasename;host=my.db.server"
|
||||
## for postgres
|
||||
@@ -144,7 +144,7 @@ my @directives = (
|
||||
},
|
||||
);
|
||||
|
||||
sub RedmineDSN {
|
||||
sub RedmineDSN {
|
||||
my ($self, $parms, $arg) = @_;
|
||||
$self->{RedmineDSN} = $arg;
|
||||
my $query = "SELECT
|
||||
@@ -164,12 +164,12 @@ sub RedmineDSN {
|
||||
|
||||
sub RedmineDbUser { set_val('RedmineDbUser', @_); }
|
||||
sub RedmineDbPass { set_val('RedmineDbPass', @_); }
|
||||
sub RedmineDbWhereClause {
|
||||
sub RedmineDbWhereClause {
|
||||
my ($self, $parms, $arg) = @_;
|
||||
$self->{RedmineQuery} = trim($self->{RedmineQuery}.($arg ? $arg : "")." ");
|
||||
}
|
||||
|
||||
sub RedmineCacheCredsMax {
|
||||
sub RedmineCacheCredsMax {
|
||||
my ($self, $parms, $arg) = @_;
|
||||
if ($arg) {
|
||||
$self->{RedmineCachePool} = APR::Pool->new;
|
||||
@@ -216,10 +216,10 @@ sub access_handler {
|
||||
|
||||
sub authen_handler {
|
||||
my $r = shift;
|
||||
|
||||
|
||||
my ($res, $redmine_pass) = $r->get_basic_auth_pw();
|
||||
return $res unless $res == OK;
|
||||
|
||||
|
||||
if (is_member($r->user, $redmine_pass, $r)) {
|
||||
return OK;
|
||||
} else {
|
||||
@@ -246,7 +246,7 @@ sub is_authentication_forced {
|
||||
}
|
||||
$sth->finish();
|
||||
undef $sth;
|
||||
|
||||
|
||||
$dbh->disconnect();
|
||||
undef $dbh;
|
||||
|
||||
@@ -256,7 +256,7 @@ sub is_authentication_forced {
|
||||
sub is_public_project {
|
||||
my $project_id = shift;
|
||||
my $r = shift;
|
||||
|
||||
|
||||
if (is_authentication_forced($r)) {
|
||||
return 0;
|
||||
}
|
||||
@@ -283,12 +283,12 @@ sub is_public_project {
|
||||
|
||||
sub anonymous_role_allows_browse_repository {
|
||||
my $r = shift;
|
||||
|
||||
|
||||
my $dbh = connect_database($r);
|
||||
my $sth = $dbh->prepare(
|
||||
"SELECT permissions FROM roles WHERE builtin = 2;"
|
||||
);
|
||||
|
||||
|
||||
$sth->execute();
|
||||
my $ret = 0;
|
||||
if (my @row = $sth->fetchrow_array) {
|
||||
@@ -300,7 +300,7 @@ sub anonymous_role_allows_browse_repository {
|
||||
undef $sth;
|
||||
$dbh->disconnect();
|
||||
undef $dbh;
|
||||
|
||||
|
||||
$ret;
|
||||
}
|
||||
|
||||
@@ -328,7 +328,7 @@ sub is_member {
|
||||
my $project_id = get_project_identifier($r);
|
||||
|
||||
my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass);
|
||||
|
||||
|
||||
my $access_mode = defined $read_only_methods{$r->method} ? "R" : "W";
|
||||
|
||||
my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
|
||||
@@ -397,7 +397,7 @@ sub is_member {
|
||||
|
||||
sub get_project_identifier {
|
||||
my $r = shift;
|
||||
|
||||
|
||||
my $location = $r->location;
|
||||
my ($identifier) = $r->uri =~ m{$location/*([^/]+)};
|
||||
$identifier;
|
||||
@@ -405,7 +405,7 @@ sub get_project_identifier {
|
||||
|
||||
sub connect_database {
|
||||
my $r = shift;
|
||||
|
||||
|
||||
my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
|
||||
return DBI->connect($cfg->{RedmineDSN}, $cfg->{RedmineDbUser}, $cfg->{RedmineDbPass});
|
||||
}
|
||||
|
||||
@@ -79,7 +79,13 @@ module Redmine
|
||||
private
|
||||
|
||||
def load_from_yaml(filename, env)
|
||||
yaml = YAML::load_file(filename)
|
||||
yaml = nil
|
||||
begin
|
||||
yaml = YAML::load_file(filename)
|
||||
rescue ArgumentError
|
||||
$stderr.puts "Your Redmine configuration file located at #{filename} is not a valid YAML file and could not be loaded."
|
||||
exit 1
|
||||
end
|
||||
conf = {}
|
||||
if yaml.is_a?(Hash)
|
||||
if yaml['default']
|
||||
@@ -89,7 +95,7 @@ module Redmine
|
||||
conf.merge!(yaml[env])
|
||||
end
|
||||
else
|
||||
$stderr.puts "#{filename} is not a valid Redmine configuration file"
|
||||
$stderr.puts "Your Redmine configuration file located at #{filename} is not a valid Redmine configuration file."
|
||||
exit 1
|
||||
end
|
||||
conf
|
||||
|
||||
@@ -452,12 +452,16 @@ module Redmine
|
||||
pdf.SetFontStyle('B',9)
|
||||
pdf.RDMCell(190,5, l(:label_history), "B")
|
||||
pdf.Ln
|
||||
indice = 0
|
||||
for journal in issue.journals.find(
|
||||
:all, :include => [:user, :details],
|
||||
:order => "#{Journal.table_name}.created_on ASC")
|
||||
indice = indice + 1
|
||||
pdf.SetFontStyle('B',8)
|
||||
pdf.RDMCell(190,5,
|
||||
format_time(journal.created_on) + " - " + journal.user.name)
|
||||
"#" + indice.to_s +
|
||||
" - " + format_time(journal.created_on) +
|
||||
" - " + journal.user.name)
|
||||
pdf.Ln
|
||||
pdf.SetFontStyle('I',8)
|
||||
for detail in journal.details
|
||||
|
||||
@@ -3,14 +3,14 @@ require 'rexml/document'
|
||||
module Redmine
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 1
|
||||
MINOR = 2
|
||||
TINY = 2
|
||||
MINOR = 3
|
||||
TINY = 1
|
||||
|
||||
# Branch values:
|
||||
# * official release: nil
|
||||
# * stable branch: stable
|
||||
# * trunk: devel
|
||||
BRANCH = 'devel'
|
||||
BRANCH = 'stable'
|
||||
|
||||
def self.revision
|
||||
revision = nil
|
||||
|
||||
@@ -77,7 +77,7 @@ module Redmine
|
||||
end
|
||||
|
||||
desc "Displays a list of all available macros, including description if available."
|
||||
macro :macro_list do
|
||||
macro :macro_list do |obj, args|
|
||||
out = ''
|
||||
@@available_macros.keys.collect(&:to_s).sort.each do |macro|
|
||||
out << content_tag('dt', content_tag('code', macro))
|
||||
|
||||
@@ -89,7 +89,7 @@ function addFileField() {
|
||||
var fields = $('attachments_fields');
|
||||
if (fields.childElements().length >= 10) return false;
|
||||
fileFieldCount++;
|
||||
var s = document.createElement("span");
|
||||
var s = new Element('span');
|
||||
s.update(fields.down('span').innerHTML);
|
||||
s.down('input.file').name = "attachments[" + fileFieldCount + "][file]";
|
||||
s.down('input.description').name = "attachments[" + fileFieldCount + "][description]";
|
||||
@@ -293,6 +293,7 @@ function observeParentIssueField(url) {
|
||||
{ minChars: 3,
|
||||
frequency: 0.5,
|
||||
paramName: 'q',
|
||||
method: 'get',
|
||||
updateElement: function(value) {
|
||||
document.getElementById('issue_parent_issue_id').value = value.id;
|
||||
}});
|
||||
@@ -305,6 +306,7 @@ function observeRelatedIssueField(url) {
|
||||
{ minChars: 3,
|
||||
frequency: 0.5,
|
||||
paramName: 'q',
|
||||
method: 'get',
|
||||
updateElement: function(value) {
|
||||
document.getElementById('relation_issue_to_id').value = value.id;
|
||||
},
|
||||
|
||||
125
public/javascripts/calendar/lang/calendar-ar.js
Normal file
125
public/javascripts/calendar/lang/calendar-ar.js
Normal file
@@ -0,0 +1,125 @@
|
||||
// Calendar AR language
|
||||
// Author: SmartData.com.sa
|
||||
// Encoding: any
|
||||
// Distributed under the same terms as the calendar itself.
|
||||
|
||||
// For translators: please use UTF-8 if possible. We strongly believe that
|
||||
// Unicode is the answer to a real internationalized world. Also please
|
||||
// include your contact information in the header, as can be seen above.
|
||||
|
||||
// full day names
|
||||
Calendar._DN = new Array
|
||||
("الاحد",
|
||||
"الاثنين",
|
||||
"الثلاثاء",
|
||||
"الاربعاء",
|
||||
"الخميس",
|
||||
"الجمعة",
|
||||
"السبت",
|
||||
"الاحد");
|
||||
|
||||
// Please note that the following array of short day names (and the same goes
|
||||
// for short month names, _SMN) isn't absolutely necessary. We give it here
|
||||
// for exemplification on how one can customize the short day names, but if
|
||||
// they are simply the first N letters of the full name you can simply say:
|
||||
//
|
||||
// Calendar._SDN_len = N; // short day name length
|
||||
// Calendar._SMN_len = N; // short month name length
|
||||
//
|
||||
// If N = 3 then this is not needed either since we assume a value of 3 if not
|
||||
// present, to be compatible with translation files that were written before
|
||||
// this feature.
|
||||
|
||||
// short day names
|
||||
Calendar._SDN = new Array
|
||||
("أح",
|
||||
"إث",
|
||||
"ث",
|
||||
"أر",
|
||||
"خ",
|
||||
"ج",
|
||||
"س",
|
||||
"أح");
|
||||
|
||||
// First day of the week. "0" means display Sunday first, "1" means display
|
||||
// Monday first, etc.
|
||||
Calendar._FD = 0;
|
||||
|
||||
// full month names
|
||||
Calendar._MN = new Array
|
||||
("كانون الثاني",
|
||||
"شباط",
|
||||
"حزيران",
|
||||
"آذار",
|
||||
"أيار",
|
||||
"نيسان",
|
||||
"تموز",
|
||||
"آب",
|
||||
"أيلول",
|
||||
"تشرين الاول",
|
||||
"تشرين الثاني",
|
||||
"كانون الاول");
|
||||
|
||||
// short month names
|
||||
Calendar._SMN = new Array
|
||||
("كانون الثاني",
|
||||
"شباط",
|
||||
"حزيران",
|
||||
"آذار",
|
||||
"أيار",
|
||||
"نيسان",
|
||||
"تموز",
|
||||
"آب",
|
||||
"أيلول",
|
||||
"تشرين الاول",
|
||||
"تشرين الثاني",
|
||||
"كانون الاول");
|
||||
|
||||
// tooltips
|
||||
Calendar._TT = {};
|
||||
Calendar._TT["INFO"] = "حول التقويم";
|
||||
|
||||
Calendar._TT["ABOUT"] =
|
||||
"اختيار الوقت والتاريخ\n" +
|
||||
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
|
||||
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
|
||||
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
|
||||
"\n\n" +
|
||||
"اختيار التاريخ:\n" +
|
||||
"- استخدم هذه الازرار \xab, \xbb لاختيار السنة\n" +
|
||||
"- استخدم هذه الازرار " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " لاختيار الشهر\n" +
|
||||
"- استمر في النقر فوق الازرار للتظليل السريع.";
|
||||
Calendar._TT["ABOUT_TIME"] = "\n\n" +
|
||||
"اختيار الوقت:\n" +
|
||||
"- انقر على اي جزء من اجزاء الوقت لزيادته\n" +
|
||||
"- لانقاصهShiftاو انقر مع الضغط على مفتاح \n" +
|
||||
"- او انقر واسحب للتظليل السريع.";
|
||||
|
||||
Calendar._TT["PREV_YEAR"] = "السنة السابقة";
|
||||
Calendar._TT["PREV_MONTH"] = "الشهر السابق";
|
||||
Calendar._TT["GO_TODAY"] = "اذهب لليوم";
|
||||
Calendar._TT["NEXT_MONTH"] = "الشهر القادم";
|
||||
Calendar._TT["NEXT_YEAR"] = "السنة القادمة";
|
||||
Calendar._TT["SEL_DATE"] = "اختر التاريخ";
|
||||
Calendar._TT["DRAG_TO_MOVE"] = "اسحب للتتحرك";
|
||||
Calendar._TT["PART_TODAY"] = "اليوم";
|
||||
|
||||
// the following is to inform that "%s" is to be the first day of week
|
||||
// %s will be replaced with the day name.
|
||||
Calendar._TT["DAY_FIRST"] = " اولا%sاعرض ";
|
||||
|
||||
// This may be locale-dependent. It specifies the week-end days, as an array
|
||||
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
|
||||
// means Monday, etc.
|
||||
Calendar._TT["WEEKEND"] = "5,6";
|
||||
|
||||
Calendar._TT["CLOSE"] = "مغلق";
|
||||
Calendar._TT["TODAY"] = "اليوم";
|
||||
Calendar._TT["TIME_PART"] = "انقر او اسحب لتغير القيمة";
|
||||
|
||||
// date formats
|
||||
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
|
||||
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
|
||||
|
||||
Calendar._TT["WK"] = "رقم الاسبوع";
|
||||
Calendar._TT["TIME"] = "الوقت:";
|
||||
@@ -18,7 +18,7 @@ Calendar._DN = new Array
|
||||
"Cetvrtak",
|
||||
"Petak",
|
||||
"Subota",
|
||||
"Nedjelja");
|
||||
"Nedjelja");
|
||||
|
||||
// Please note that the following array of short day names (and the same goes
|
||||
// for short month names, _SMN) isn't absolutely necessary. We give it here
|
||||
@@ -51,7 +51,7 @@ Calendar._FD = 0;
|
||||
Calendar._MN = new Array
|
||||
("Sijecanj",
|
||||
"Veljaca",
|
||||
"Ožujak",
|
||||
"Ožujak",
|
||||
"Travanj",
|
||||
"Svibanj",
|
||||
"Lipanj",
|
||||
@@ -66,7 +66,7 @@ Calendar._MN = new Array
|
||||
Calendar._SMN = new Array
|
||||
("Sij",
|
||||
"Velj",
|
||||
"Ožu",
|
||||
"Ožu",
|
||||
"Tra",
|
||||
"Svi",
|
||||
"Lip",
|
||||
@@ -100,7 +100,7 @@ Calendar._TT["ABOUT_TIME"] = "\n\n" +
|
||||
|
||||
Calendar._TT["PREV_YEAR"] = "Prethodna godina (hold for menu)";
|
||||
Calendar._TT["PREV_MONTH"] = "Prethodni mjesec (hold for menu)";
|
||||
Calendar._TT["GO_TODAY"] = "Na današnji dan";
|
||||
Calendar._TT["GO_TODAY"] = "Na današnji dan";
|
||||
Calendar._TT["NEXT_MONTH"] = "Naredni mjesec (hold for menu)";
|
||||
Calendar._TT["NEXT_YEAR"] = "Naredna godina (hold for menu)";
|
||||
Calendar._TT["SEL_DATE"] = "Odaberite datum";
|
||||
@@ -109,7 +109,7 @@ Calendar._TT["PART_TODAY"] = " (Danas)";
|
||||
|
||||
// the following is to inform that "%s" is to be the first day of week
|
||||
// %s will be replaced with the day name.
|
||||
Calendar._TT["DAY_FIRST"] = "Prikaži %s prvo";
|
||||
Calendar._TT["DAY_FIRST"] = "Prikaži %s prvo";
|
||||
|
||||
// This may be locale-dependent. It specifies the week-end days, as an array
|
||||
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
|
||||
|
||||
16
public/javascripts/jstoolbar/lang/jstoolbar-ar.js
Normal file
16
public/javascripts/jstoolbar/lang/jstoolbar-ar.js
Normal file
@@ -0,0 +1,16 @@
|
||||
jsToolBar.strings = {};
|
||||
jsToolBar.strings ['Strong'] = 'قوي';
|
||||
jsToolBar.strings ['Italic'] = 'مائل';
|
||||
jsToolBar.strings ['Underline'] = 'تسطير';
|
||||
jsToolBar.strings ['Deleted'] = 'محذوف';
|
||||
jsToolBar.strings ['Code'] = 'رمز ضمني';
|
||||
jsToolBar.strings ['Heading 1'] = 'عنوان 1';
|
||||
jsToolBar.strings ['Heading 2'] = 'عنوان 2';
|
||||
jsToolBar.strings ['Heading 3'] = 'عنوان 3';
|
||||
jsToolBar.strings ['Unordered list'] = 'قائمة غير مرتبة';
|
||||
jsToolBar.strings ['Ordered list'] = 'قائمة مرتبة';
|
||||
jsToolBar.strings ['Quote'] = 'اقتباس';
|
||||
jsToolBar.strings ['Unquote'] = 'إزالة الاقتباس';
|
||||
jsToolBar.strings ['Preformatted text'] = 'نص مسبق التنسيق';
|
||||
jsToolBar.strings ['Wiki link'] = 'رابط الى صفحة ويكي';
|
||||
jsToolBar.strings ['Image'] = 'صورة';
|
||||
@@ -26,7 +26,8 @@ for (var k = 0; k < max_space; k++) {
|
||||
}
|
||||
|
||||
function branchGraph(holder) {
|
||||
var xstep = 20, ystep = 20;
|
||||
var xstep = 20;
|
||||
var ystep = $$('tr.changeset')[0].getHeight();
|
||||
var ch, cw;
|
||||
cw = max_space * xstep + xstep;
|
||||
ch = max_rdmid * ystep + ystep;
|
||||
|
||||
@@ -391,7 +391,7 @@ ul.properties li span {font-style:italic;}
|
||||
.total-hours span.hours-int { font-size: 120%; }
|
||||
|
||||
.autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
|
||||
#user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select { width: 90%; }
|
||||
#user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select, #user_identity_url { width: 90%; }
|
||||
|
||||
#workflow_copy_form select { width: 200px; }
|
||||
|
||||
@@ -443,8 +443,6 @@ margin-left: 5px !important;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
form em {font-style:normal;font-size:90%;color:#888;}
|
||||
|
||||
label.no-css {
|
||||
font-weight: inherit;
|
||||
float:none;
|
||||
@@ -749,6 +747,8 @@ div.wiki a.new {
|
||||
color: #b73535;
|
||||
}
|
||||
|
||||
div.wiki ul, div.wiki ol {margin-bottom:1em;}
|
||||
|
||||
div.wiki pre {
|
||||
margin: 1em 1em 1em 1.6em;
|
||||
padding: 2px 2px 2px 0;
|
||||
|
||||
@@ -91,6 +91,21 @@ class AttachmentsControllerTest < ActionController::TestCase
|
||||
set_tmp_attachments_directory
|
||||
end
|
||||
|
||||
def test_save_diff_type
|
||||
@request.session[:user_id] = 1 # admin
|
||||
user = User.find(1)
|
||||
get :show, :id => 5
|
||||
assert_response :success
|
||||
assert_template 'diff'
|
||||
user.reload
|
||||
assert_equal "inline", user.pref[:diff_type]
|
||||
get :show, :id => 5, :type => 'sbs'
|
||||
assert_response :success
|
||||
assert_template 'diff'
|
||||
user.reload
|
||||
assert_equal "sbs", user.pref[:diff_type]
|
||||
end
|
||||
|
||||
def test_show_text_file
|
||||
get :show, :id => 4
|
||||
assert_response :success
|
||||
|
||||
@@ -254,6 +254,28 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
assert_not_nil assigns(:issue_count_by_group)
|
||||
end
|
||||
|
||||
def test_index_with_query_id_and_project_id_should_set_session_query
|
||||
get :index, :project_id => 1, :query_id => 4
|
||||
assert_response :success
|
||||
assert_kind_of Hash, session[:query]
|
||||
assert_equal 4, session[:query][:id]
|
||||
assert_equal 1, session[:query][:project_id]
|
||||
end
|
||||
|
||||
def test_index_with_cross_project_query_in_session_should_show_project_issues
|
||||
q = Query.create!(:name => "test", :user_id => 2, :is_public => false, :project => nil)
|
||||
@request.session[:query] = {:id => q.id, :project_id => 1}
|
||||
|
||||
with_settings :display_subprojects_issues => '0' do
|
||||
get :index, :project_id => 1
|
||||
end
|
||||
assert_response :success
|
||||
assert_not_nil assigns(:query)
|
||||
assert_equal q.id, assigns(:query).id
|
||||
assert_equal 1, assigns(:query).project_id
|
||||
assert_equal [1], assigns(:issues).map(&:project_id).uniq
|
||||
end
|
||||
|
||||
def test_private_query_should_not_be_available_to_other_users
|
||||
q = Query.create!(:name => "private", :user => User.find(2), :is_public => false, :project => nil)
|
||||
@request.session[:user_id] = 3
|
||||
|
||||
@@ -308,6 +308,26 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
def test_save_diff_type
|
||||
@request.session[:user_id] = 1 # admin
|
||||
user = User.find(1)
|
||||
get :diff,
|
||||
:id => PRJ_ID,
|
||||
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
||||
assert_response :success
|
||||
assert_template 'diff'
|
||||
user.reload
|
||||
assert_equal "inline", user.pref[:diff_type]
|
||||
get :diff,
|
||||
:id => PRJ_ID,
|
||||
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7',
|
||||
:type => 'sbs'
|
||||
assert_response :success
|
||||
assert_template 'diff'
|
||||
user.reload
|
||||
assert_equal "sbs", user.pref[:diff_type]
|
||||
end
|
||||
|
||||
def test_annotate
|
||||
get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
|
||||
assert_response :success
|
||||
|
||||
@@ -42,6 +42,8 @@ class SettingsControllerTest < ActionController::TestCase
|
||||
get :edit
|
||||
assert_response :success
|
||||
assert_template 'edit'
|
||||
|
||||
assert_tag 'input', :attributes => {:name => 'settings[enabled_scm][]', :value => ''}
|
||||
end
|
||||
|
||||
def test_post_edit_notifications
|
||||
|
||||
@@ -69,6 +69,20 @@ class ApiTest::VersionsTest < ActionController::IntegrationTest
|
||||
assert_tag 'version', :child => {:tag => 'id', :content => version.id.to_s}
|
||||
end
|
||||
|
||||
should "create the version with due date" do
|
||||
assert_difference 'Version.count' do
|
||||
post '/projects/1/versions.xml', {:version => {:name => 'API test', :due_date => '2012-01-24'}}, :authorization => credentials('jsmith')
|
||||
end
|
||||
|
||||
version = Version.first(:order => 'id DESC')
|
||||
assert_equal 'API test', version.name
|
||||
assert_equal Date.parse('2012-01-24'), version.due_date
|
||||
|
||||
assert_response :created
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
assert_tag 'version', :child => {:tag => 'id', :content => version.id.to_s}
|
||||
end
|
||||
|
||||
context "with failure" do
|
||||
should "return the errors" do
|
||||
assert_no_difference('Version.count') do
|
||||
|
||||
@@ -28,11 +28,29 @@ class GroupTest < ActiveSupport::TestCase
|
||||
:workflows,
|
||||
:groups_users
|
||||
|
||||
include Redmine::I18n
|
||||
|
||||
def test_create
|
||||
g = Group.new(:lastname => 'New group')
|
||||
assert g.save
|
||||
end
|
||||
|
||||
def test_blank_name_error_message
|
||||
set_language_if_valid 'en'
|
||||
g = Group.new
|
||||
assert !g.save
|
||||
assert_include "Name can't be blank", g.errors.full_messages
|
||||
end
|
||||
|
||||
def test_blank_name_error_message_fr
|
||||
set_language_if_valid 'fr'
|
||||
str = "Nom doit \xc3\xaatre renseign\xc3\xa9(e)"
|
||||
str.force_encoding('UTF-8') if str.respond_to?(:force_encoding)
|
||||
g = Group.new
|
||||
assert !g.save
|
||||
assert_include str, g.errors.full_messages
|
||||
end
|
||||
|
||||
def test_roles_given_to_new_user
|
||||
group = Group.find(11)
|
||||
user = User.find(9)
|
||||
|
||||
@@ -765,7 +765,7 @@ RAW
|
||||
'</ul>'
|
||||
|
||||
@project = Project.find(1)
|
||||
assert textilizable(raw).gsub("\n", "").include?(expected), textilizable(raw)
|
||||
assert textilizable(raw).gsub("\n", "").include?(expected)
|
||||
end
|
||||
|
||||
def test_table_of_content_should_contain_included_page_headings
|
||||
|
||||
@@ -278,6 +278,22 @@ class IssueTest < ActiveSupport::TestCase
|
||||
assert_equal custom_value.id, issue.custom_value_for(field).id
|
||||
end
|
||||
|
||||
def test_should_not_update_custom_fields_on_changing_tracker_with_different_custom_fields
|
||||
issue = Issue.new(:project_id => 1)
|
||||
issue.attributes = {:tracker_id => 1, :author_id => 1, :status_id => 1, :subject => 'Test', :custom_field_values => {'2' => 'Test'}}
|
||||
issue.save!
|
||||
|
||||
assert !Tracker.find(2).custom_field_ids.include?(2)
|
||||
|
||||
issue = Issue.find(issue.id)
|
||||
issue.attributes = {:tracker_id => 2, :custom_field_values => {'1' => ''}}
|
||||
|
||||
issue = Issue.find(issue.id)
|
||||
custom_value = issue.custom_value_for(2)
|
||||
assert_not_nil custom_value
|
||||
assert_equal 'Test', custom_value.value
|
||||
end
|
||||
|
||||
def test_assigning_tracker_id_should_reload_custom_fields_values
|
||||
issue = Issue.new(:project => Project.find(1))
|
||||
assert issue.custom_field_values.empty?
|
||||
|
||||
@@ -48,7 +48,7 @@ class MailerTest < ActiveSupport::TestCase
|
||||
assert_select_email do
|
||||
# link to the main ticket
|
||||
assert_select "a[href=?]",
|
||||
"https://mydomain.foo/issues/1",
|
||||
"https://mydomain.foo/issues/1#change-2",
|
||||
:text => "Bug #1: Can't print recipes"
|
||||
# link to a referenced ticket
|
||||
assert_select "a[href=?][title=?]",
|
||||
@@ -78,7 +78,7 @@ class MailerTest < ActiveSupport::TestCase
|
||||
assert_select_email do
|
||||
# link to the main ticket
|
||||
assert_select "a[href=?]",
|
||||
"http://mydomain.foo/rdm/issues/1",
|
||||
"http://mydomain.foo/rdm/issues/1#change-2",
|
||||
:text => "Bug #1: Can't print recipes"
|
||||
# link to a referenced ticket
|
||||
assert_select "a[href=?][title=?]",
|
||||
@@ -111,7 +111,7 @@ class MailerTest < ActiveSupport::TestCase
|
||||
assert_select_email do
|
||||
# link to the main ticket
|
||||
assert_select "a[href=?]",
|
||||
"http://mydomain.foo/rdm/issues/1",
|
||||
"http://mydomain.foo/rdm/issues/1#change-2",
|
||||
:text => "Bug #1: Can't print recipes"
|
||||
# link to a referenced ticket
|
||||
assert_select "a[href=?][title=?]",
|
||||
@@ -213,6 +213,11 @@ class MailerTest < ActiveSupport::TestCase
|
||||
assert_not_nil mail
|
||||
assert_equal Mailer.message_id_for(journal), mail.message_id
|
||||
assert_equal Mailer.message_id_for(journal.issue), mail.references.first.to_s
|
||||
assert_select_email do
|
||||
# link to the update
|
||||
assert_select "a[href=?]",
|
||||
"http://mydomain.foo/issues/#{journal.journalized_id}#change-#{journal.id}"
|
||||
end
|
||||
end
|
||||
|
||||
def test_message_posted_message_id
|
||||
|
||||
@@ -71,7 +71,6 @@ module Redmine
|
||||
custom_field_values.each do |custom_value|
|
||||
custom_value.value = values[custom_value.custom_field_id.to_s] if values.has_key?(custom_value.custom_field_id.to_s)
|
||||
end if values.is_a?(Hash)
|
||||
self.custom_values = custom_field_values
|
||||
end
|
||||
|
||||
def custom_field_values
|
||||
@@ -92,6 +91,7 @@ module Redmine
|
||||
end
|
||||
|
||||
def save_custom_field_values
|
||||
self.custom_values = custom_field_values
|
||||
custom_field_values.each(&:save)
|
||||
@custom_field_values_changed = false
|
||||
@custom_field_values = nil
|
||||
|
||||
8
vendor/plugins/rfpdf/lib/tcpdf.rb
vendored
8
vendor/plugins/rfpdf/lib/tcpdf.rb
vendored
@@ -3532,11 +3532,11 @@ class TCPDF
|
||||
@page = base_page;
|
||||
@x = base_x + @tdwidth;
|
||||
@y = base_y;
|
||||
elsif (@pre_state == true and element.length > 0)
|
||||
Write(@lasth, unhtmlentities(element), '', fill);
|
||||
elsif (element.strip.length > 0)
|
||||
if @pre_state != true
|
||||
element.gsub!(/[\t\r\n\f]/, "");
|
||||
element.gsub!(/ /, " ");
|
||||
end
|
||||
element.gsub!(/[\t\r\n\f]/, "");
|
||||
element.gsub!(/ /, " ");
|
||||
Write(@lasth, unhtmlentities(element), '', fill);
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user