diff --git a/app/controller/issues.php b/app/controller/issues.php
index d04c04ac..e574405e 100644
--- a/app/controller/issues.php
+++ b/app/controller/issues.php
@@ -77,7 +77,7 @@ protected function _buildFilter() {
// Build SQL ORDER BY string
$orderby = !empty($args['orderby']) ? $args['orderby'] : "priority";
$filter["orderby"] = $orderby;
- $ascdesc = !empty($args['ascdesc']) && $args['ascdesc'] == 'asc' ? "ASC" : "DESC";
+ $ascdesc = !empty($args['ascdesc']) && strtolower($args['ascdesc']) == 'asc' ? "ASC" : "DESC";
$filter["ascdesc"] = $ascdesc;
switch($orderby) {
case "id":
@@ -1031,31 +1031,43 @@ public function project_overview($f3, $params) {
}
/**
- * Helper function to get a percentage of completed issues across the entire tree
+ * Helper function to get a percentage of completed issues and some totals across the entire tree
* @param Issue $issue
* @var callable $completeCount This function, required for recursive calls
* @return array
*/
- $completeCount = function(\Model\Issue &$issue) use(&$completeCount) {
+ $projectStats = function(\Model\Issue &$issue) use(&$projectStats) {
$total = 0;
$complete = 0;
+ $hoursSpent = 0;
+ $hoursTotal = 0;
if($issue->id) {
$total ++;
if($issue->closed_date) {
$complete ++;
}
+ if($issue->hours_spent > 0) {
+ $hoursSpent += $issue->hours_spent;
+ }
+ if($issue->hours_total > 0) {
+ $hoursTotal += $issue->hours_total;
+ }
foreach($issue->getChildren() as $child) {
- $result = $completeCount($child);
+ $result = $projectStats($child);
$total += $result["total"];
$complete += $result["complete"];
+ $hoursSpent += $result["hours_spent"];
+ $hoursTotal += $result["hours_total"];
}
}
return array(
"total" => $total,
- "complete" => $complete
+ "complete" => $complete,
+ "hours_spent" => $hoursSpent,
+ "hours_total" => $hoursTotal,
);
};
- $f3->set("stats", $completeCount($project));
+ $f3->set("stats", $projectStats($project));
/**
* Helper function for recursive tree rendering
diff --git a/app/controller/user.php b/app/controller/user.php
index d3a0de32..e7d5278f 100644
--- a/app/controller/user.php
+++ b/app/controller/user.php
@@ -17,6 +17,9 @@ public function __construct() {
"pt" => \ISO::LC_pt . " (Português)",
"ru" => \ISO::LC_ru . " (Pу́сский)",
"nl" => \ISO::LC_nl . " (Nederlands)",
+ "de" => \ISO::LC_de . " (Deutsche)",
+ "cs" => \ISO::LC_cs . " (Češka)",
+ "zh" => \ISO::LC_zh . " (中国)",
);
}
@@ -100,7 +103,7 @@ private function _loadThemes() {
$f3 = \Base::instance();
// Get theme list
- $hidden_themes = array("backlog", "style", "taskboard", "datepicker", "jquery-ui-1.10.3", "bootstrap-tagsinput", "emote");
+ $hidden_themes = array("backlog", "style", "taskboard", "datepicker", "jquery-ui-1.10.3", "bootstrap-tagsinput", "emote", "fontawesome");
$themes = array();
foreach (glob("css/*.css") as $file) {
$name = pathinfo($file, PATHINFO_FILENAME);
diff --git a/app/dict/cs.ini b/app/dict/cs.ini
new file mode 100644
index 00000000..5a9fea30
--- /dev/null
+++ b/app/dict/cs.ini
@@ -0,0 +1,329 @@
+; Index, login, password reset
+log_in=Přihlísit
+register=Registrovat
+username=Uživatel
+password=Heslo
+email=Email
+email_address=Email address
+
+reset_password=Reset Password
+new_password=Nové heslo
+confirm_password=Opakujte heslo
+
+
+cancel=Zrušit
+
+logged_out=Odhlásit
+session_ended_message=Your session has ended. Please log in again.
+
+; Footer
+n_queries={0,number,integer} queries
+n_total_queries_n_cached={0,number,integer} total queries, {1,number,integer} cached
+page_generated_in_n_seconds=Page generated in {0,number} seconds
+real_usage_n_bytes=Real usage: {0,number,integer} bytes
+current_commit_n=Current commit: {0}
+
+; Installer
+install_phproject=Instalovat Phpproject
+
+; Navbar, basic terminology
+new=Nový
+sprint=Sprint
+sprints=Sprints
+browse=Hledat
+open=Otevřít
+closed=Closed
+created_by_me=Created by me
+assigned_to_me=Assigned to me
+issue_search=Quickly find an issue
+administration=Administration
+dashboard=Dashboard
+issues=Issues
+my_issues=My Issues
+my_account=My Account
+configuration=Configuration
+plugins=Plugins
+users=Users
+groups=Groups
+log_out=Log Out
+demo_notice=This site is running in demo mode. All content is public and may be reset at any time.
+loading=Loading…
+close=Close
+related=Related
+current_issue=Current issue
+toggle_navigation=Toggle Navigation
+
+; Errors
+error.loading_issue_history=Error loading issue history.
+error.loading_issue_watchers=Error loading issue watchers.
+error.loading_related_issues=Error loading related issues.
+error.loading_dependencies=Error loading dependencies.
+error.404_text=The page you requested is not available.
+
+; Dashboard
+taskboard=Taskboard
+my_projects=Moje projekty
+my_subprojects=Moje podprojekty
+my_tasks=My Tasks
+my_bugs=My Bugs
+repeat_work=Repeat Work
+my_watchlist=My Watch List
+add_project=Přidat projekt
+add_task=Přidat úkol
+add_bug=Přidat chybu
+
+; User pages
+created_issues=Created Issues
+assigned_issues=Assigned Issues
+overdue_issues=Overdue Issues
+issue_tree=Stom chyb
+
+; Account
+name=Název
+theme=Téma
+language=Jazyk
+
+task_color=Barva pro úlohi
+avatar=Avatar
+edit_on_gravatar=Edit on Gravatar
+save=Uložit
+current_password=Stávající heslo
+profile=Profil
+default=Default
+
+; Browse
+general=General
+exact_match=Exact Match
+submit=Odeslat
+export=Export
+go_previous=Předchozí
+go_next=Další
+
+; Issue fields
+cols.id=Id
+cols.title=Název
+cols.description=Popis
+cols.type=Typ
+cols.priority=Priorita
+cols.status=Stav
+cols.author=Autor
+cols.assignee=Přiřazeno
+cols.total_spent_hours=Strávené hodiny
+cols.planned_hours=Plánované hodiny
+cols.remaining_hours=Zbývající hodiny
+cols.start_date=Datum počátku
+cols.due_date=Due Date
+cols.repeat_cycle=Opakovat
+cols.parent_id=Nadřazené ID
+cols.parent=Rodič
+cols.sprint=Sprint
+cols.created=Vytvořeno
+cols.start=Počátek
+cols.due=Probíhá
+cols.closed=Zavřeno
+cols.hours_spent=Strávené hodiny
+cols.depends_on=Závisí na
+
+; Issue editing
+not_assigned=Nepřiřazeno
+choose_option=Vyberte
+
+repeating=Opakování
+not_repeating=Neopakuje se
+daily=Denně
+weekly=Týdně
+monthly=Měsíčně
+
+no_sprint=No Sprint
+
+comment=Komentář
+
+send_notifications=Poslat oznámení
+reset=Reset
+new_n=New {0}
+edit_n=Edit {0}
+create_n=Create {0}
+save_n=Save {0}
+
+; Issue page
+mark_complete=Mark Complete
+complete=Complete
+reopen=Reopen
+show_on_taskboard=Show on Taskboard
+copy=Copy
+watch=Watch
+unwatch=Unwatch
+edit=Edit
+delete=Delete
+
+files=Files
+upload=Upload
+upload_a_file=Upload a File
+attached_file=Attached file
+deleted=Deleted
+file_name=File Name
+uploaded_by=Uploaded By
+upload_date=Upload Date
+file_size=File Size
+file_deleted=File deleted.
+undo=Undo
+
+comments=Comments
+history=History
+watchers=Watchers
+child_tasks=Child Tasks
+sibling_tasks=Sibling Tasks
+related_tasks=Related Tasks
+
+notifications_sent=Notifications sent
+notifications_not_sent=Notifications not sent
+a_changed={0} changed:
+a_changed_from_b_to_c={0} changed from {1} to {2}
+a_set_to_b={0} set to {1}
+a_removed={0} removed
+
+dependencies=Dependencies
+dependency=Dependency
+dependent=Dependent
+task_depends=This task depends on:
+add_dependency=Add Dependency
+task_dependency=This task is a dependency for:
+add_dependent=Add Dependent
+
+; Dependency Types (Finish-Start, Finish-Finish, Start-Start, Start-Finish)
+fs=FS
+ff=FF
+ss=SS
+sf=SF
+
+write_a_comment=Write a comment…
+save_comment=Save Comment
+
+no_history_available=No history available
+add_watcher=Add Watcher
+
+new_sub_project=New Sub-Project
+new_task=New Task
+under_n=Under {0}
+no_related_issues=No related issues
+
+copy_issue=Copy Issue
+copy_issue_details=Copying this issue will duplicate it and all of its descendants. No comments, files, history, or watchers will be copied.
+
+deleted_success=Issue #{0} successfully deleted.
+deleted_notice=This issue has been deleted. Editing it will still send notifications, but the recipients will not be able to view the issue unless they are administrators.
+restore_issue=Restore Issue
+
+comment_delete_confirm=Are you sure you want to delete this comment?
+
+bulk_actions=Show Bulk Actions
+bulk_update=Update All Selected Tasks
+
+project_overview=Project Overview
+project_tree=Project Tree
+n_complete={0} complete
+n_child_issues={0} child issues
+
+; Tags
+issue_tags=Issue Tags
+no_tags_created=No issue tags have been created yet.
+tag_help_1=Tag an issue by adding a #hashtag to its description.
+tag_help_2=Hashtags can contain letters, numbers, and hyphens, and must start with a letter.
+view_all_tags=View all tags
+
+; Taskboard/Backlog
+backlog=Backlog
+filter_tasks=Filter Tasks
+filter_projects=Filter Projects
+all_projects=All Projects
+all_tasks=All Tasks
+my_groups=My Groups
+burndown=Burndown
+hours_remaining=Hours Remaining
+ideal_hours_remaining=Ideal Hours Remaining
+daily_hours_remaining=Daily Hours Remaining
+project=Project
+subproject=Subproject
+track_time_spent=Track Time Spent
+burn_hours=Burn hours
+backlog_old_help_text=Drag projects here to remove from a sprint
+previous_sprints=Show Previous Sprints
+future_sprints=Show Future Sprints
+
+; Administration
+overview=Overview
+new_user=New User
+edit_user=Edit User
+require_new_password=Require a new password on next login
+role=Role
+user=User
+deactivate=Deactivate
+reactivate=Reactivate
+administrator=Administrator
+members=Members
+group_name=Group Name
+group_name_saved=Group name saved
+manager=Manager
+set_as_manager=Set as Manager
+add_to_group=Add to Group
+no_groups_exist=No groups exist.
+new_sprint=New Sprint
+edit_sprint=Edit Sprint
+start_date=Start Date
+end_date=End Date
+version=Version
+current_version=Current Version
+update_available=Update Available
+update_to_n=Update to {0}
+backup_db=Are you sure?\nYou should back up your database before you proceed.
+show_deactivated_users=Show Deactivated Users
+
+; User Ranks
+rank=Rank
+ranks.0=Guest
+ranks.1=Client
+ranks.2=User
+ranks.3=Manager
+ranks.4=Admin
+ranks.5=Super Admin
+rank_permissions.0=Read-only
+rank_permissions.1=Can post comments
+rank_permissions.2=Can create/edit issues
+rank_permissions.3=Can delete issues/comments
+rank_permissions.4=Can create/edit/delete users/groups/sprints
+rank_permissions.5=Can edit configuration
+
+; Config
+site_basics=Site Basics
+text_parsing=Text Parsing
+email_smtp_imap=Email (SMTP/IMAP)
+advanced=Advanced
+site_name=Site Name
+site_description=Site Description
+timezone=Timezone
+default_theme=Default Theme
+logo=Logo
+allow_public_registration=Allow public registration
+parser_syntax=Parser Syntax
+advanced_options=Advanced Options (all enabled by default)
+convert_ids=Convert IDs to Links
+convert_hashtags=Convert Hashtags to Links
+convert_urls=Convert URLs to links
+convert_emoticons=Convert emoticons to glyphs
+outgoing_mail=Outgoing Mail (SMTP)
+from_address=From Address
+incoming_mail=Incoming Mail (IMAP)
+hostname=Hostname
+debug_level=Debug Level (DEBUG)
+cache_mode=Cache Mode (CACHE)
+cookie_expiration=Cookie Expiration (JAR.expire)
+max_upload_size=Max Upload Size (files.maxsize)
+censor_credit_card_numbers=Censor Credit Card Numbers (security.block_ccs)
+demo_user=Demo User (site.demo)
+config_note=Note
+imap_truncate_lines=IMAP Message Truncate Lines (mail.truncate_lines)
+package_mail_config_note={0} uses your default PHP mail configuration for outgoing email.
+imap_settings_note=IMAP settings here will have no effect unless the {0} cron is being run.
+email_leave_blank=Leave blank to disable outgoing email
+advanced_config_note=These values can be changed by editing the values in the {0} database table.
+
diff --git a/app/dict/de.ini b/app/dict/de.ini
index 603a1942..c2358030 100644
--- a/app/dict/de.ini
+++ b/app/dict/de.ini
@@ -302,6 +302,8 @@ timezone=Timezone
default_theme=Default Theme
logo=Logo
allow_public_registration=Allow public registration
+parser_syntax=Parser Syntax
+advanced_options=Advanced Options (all enabled by default)
convert_ids=Convert IDs to Links
convert_hashtags=Convert Hashtags to Links
convert_urls=Convert URLs to links
@@ -321,5 +323,5 @@ imap_truncate_lines=IMAP Message Truncate Lines (mail.truncate_lines)
package_mail_config_note={0} uses your default PHP mail configuration for outgoing email.
imap_settings_note=IMAP settings here will have no effect unless the {0} cron is being run.
email_leave_blank=Leave blank to disable outgoing email
-advanced_config_note==These values can be changed by editing the values in the {0} database table.
+advanced_config_note=These values can be changed by editing the values in the {0} database table.
diff --git a/app/dict/en.ini b/app/dict/en.ini
index 1782f9dd..8b63c283 100644
--- a/app/dict/en.ini
+++ b/app/dict/en.ini
@@ -302,6 +302,8 @@ timezone=Timezone
default_theme=Default Theme
logo=Logo
allow_public_registration=Allow public registration
+parser_syntax=Parser Syntax
+advanced_options=Advanced Options (all enabled by default)
convert_ids=Convert IDs to Links
convert_hashtags=Convert Hashtags to Links
convert_urls=Convert URLs to links
diff --git a/app/dict/es.ini b/app/dict/es.ini
index 1d76ea62..a35a2189 100644
--- a/app/dict/es.ini
+++ b/app/dict/es.ini
@@ -170,7 +170,7 @@ comments=Comentarios
history=Historia
watchers=Observadores
child_tasks=Tareas Secundarias
-sibling_tasks=Sibling Tasks
+sibling_tasks=Tareas Hermanos
related_tasks=Tareas Relacionadas
notifications_sent=Las notificaciones enviadas
@@ -292,33 +292,36 @@ rank_permissions.4=Puede crear/editar/borrar usuarios/grupos/carreras
rank_permissions.5=Puede editar configuración
; Config
-site_basics=Site Basics
+site_basics=Principios Del Sitio
text_parsing=Análisis de texto
-email_smtp_imap=Email (SMTP/IMAP)
+email_smtp_imap=Correo electrónico (SMTP/IMAP)
advanced=Avanzado
site_name=Nombre del sitio
site_description=Descripción del sitio
timezone=Zona horaria
-default_theme=Default Theme
+default_theme=Tema por defecto
logo=Logo
allow_public_registration=Permiten el registro público
-convert_ids=Convert IDs to Links
-convert_hashtags=Convert Hashtags to Links
-convert_urls=Convert URLs to links
-convert_emoticons=Convert emoticons to glyphs
-outgoing_mail=Outgoing Mail (SMTP)
+parser_syntax=Sintaxis De Analizador
+advanced_options=Opciones Avanzadas (todos activado por defecto)
+convert_ids=Convertir IDs en Enlaces
+convert_hashtags=Convertir Hashtags en Enlaces
+convert_urls=Convertir URLs en Enlaces
+convert_emoticons=Convertir emoticonos en glifos
+outgoing_mail=Correo Saliente (SMTP)
from_address=From Address
-incoming_mail=Incoming Mail (IMAP)
+incoming_mail=Correo Entrante (IMAP)
hostname=Hostname
-debug_level=Debug Level (DEBUG)
-cache_mode=Cache Mode (CACHE)
-cookie_expiration=Cookie Expiration (JAR.expire)
-max_upload_size=Max Upload Size (files.maxsize)
-censor_credit_card_numbers=Censor Credit Card Numbers (security.block_ccs)
+debug_level=El Nivel de depuración (DEBUG)
+cache_mode=Modo de caché (CACHE)
+cookie_expiration=Caducidad de las cookies (JAR.expire)
+max_upload_size=Tamaño máximo de carga (files.maxsize)
+censor_credit_card_numbers=Censurar a los Números de Tarjeta de Crédito (security.block_ccs)
demo_user=Usuario demo (site.demo)
config_note=Nota
imap_truncate_lines=Líneas de truncar mensajes IMAP (mail.truncate_lines)
-package_mail_config_note={0} uses your default PHP mail configuration for outgoing email.
+package_mail_config_note={0} utiliza su defecto de PHP configuración de correo electrónico para el correo electrónico saliente.
imap_settings_note=IMAP settings here will have no effect unless the {0} cron is being run.
email_leave_blank=Deje en blanco para desactivar el correo electrónico saliente
-advanced_config_note=These values can be changed by editing the values in the {0} database table.
+advanced_config_note=Estos valores pueden ser modificados por el tratamiento de los valores en la {0} tabla de base de datos.
+
diff --git a/app/dict/fr.ini b/app/dict/fr.ini
index 2a0dcadc..7d00bdb0 100644
--- a/app/dict/fr.ini
+++ b/app/dict/fr.ini
@@ -302,6 +302,8 @@ timezone=Timezone
default_theme=Default Theme
logo=Logo
allow_public_registration=Allow public registration
+parser_syntax=Parser Syntax
+advanced_options=Advanced Options (all enabled by default)
convert_ids=Convert IDs to Links
convert_hashtags=Convert Hashtags to Links
convert_urls=Convert URLs to links
@@ -321,5 +323,5 @@ imap_truncate_lines=IMAP Message Truncate Lines (mail.truncate_lines)
package_mail_config_note={0} uses your default PHP mail configuration for outgoing email.
imap_settings_note=IMAP settings here will have no effect unless the {0} cron is being run.
email_leave_blank=Leave blank to disable outgoing email
-advanced_config_note==These values can be changed by editing the values in the {0} database table.
+advanced_config_note=These values can be changed by editing the values in the {0} database table.
diff --git a/app/dict/nl.ini b/app/dict/nl.ini
index a21d0df0..c7f81047 100644
--- a/app/dict/nl.ini
+++ b/app/dict/nl.ini
@@ -302,6 +302,8 @@ timezone=Tijdzone
default_theme=Standaard thema
logo=Logo
allow_public_registration=Allow public registration
+parser_syntax=Parser Syntax
+advanced_options=Advanced Options (all enabled by default)
convert_ids=Zet IDs om naar links
convert_hashtags=Zet hashtags om naar links
convert_urls=Zet URLs om naar links
@@ -321,5 +323,5 @@ imap_truncate_lines=IMAP bericht afbreek lijnen (mail.truncate_lines)
package_mail_config_note={0} gebruikt uw standaard PHP mail configuratie voor uitgaande mail.
imap_settings_note=IMAP instellingen hebben geen effect tenzij het script {0} gestart wordt met cron.
email_leave_blank=Laat dit leeg om uitgaande mail uit te schakelen.
-advanced_config_note==These values can be changed by editing the values in the {0} database table.
+advanced_config_note=These values can be changed by editing the values in the {0} database table.
diff --git a/app/dict/pt.ini b/app/dict/pt.ini
index 903f4dd9..5cb6efa1 100644
--- a/app/dict/pt.ini
+++ b/app/dict/pt.ini
@@ -16,7 +16,7 @@ logged_out=Desconectado
session_ended_message=Sua sessão foi encerrada. Por favor, faça o login novamente.
; Footer
-n_queries={0,number,integer} queries
+n_queries={0,number,integer} consultas
n_total_queries_n_cached={0,number,integer} queries totais, {1,number,integer} em cache
page_generated_in_n_seconds=Página gerada em 5 {0,number} segundos
real_usage_n_bytes=Uso real: {0,number,integer} bytes
@@ -37,10 +37,10 @@ assigned_to_me=Atribuído a mim
issue_search=Pesquisar os problemas
administration=Administração
dashboard=Minha Página
-issues=Issues
+issues=Problema
my_issues=Meus Problemas
my_account=Minha Conta
-configuration=Configuration
+configuration=Configuração
plugins=Plugins
users=Usuários
groups=Grupos
@@ -49,14 +49,14 @@ demo_notice=Este site está sendo executado em modo de demonstração. Todo o co
loading=Carregando…
close=Fechar
related=Relacionados
-current_issue=Current issue
+current_issue=Problema atual
toggle_navigation=Navegação toggle
; Errors
-error.loading_issue_history=Erro ao carregar a história questão.
-error.loading_issue_watchers=Erro ao carregar a questão observadores.
+error.loading_issue_history=Erro ao carregar a história problema.
+error.loading_issue_watchers=Erro ao carregar a problema observadores.
error.loading_related_issues=Erro ao carregar os problemas relacionados.
-error.loading_dependencies=Error loading dependencies.
+error.loading_dependencies=Erro ao carregar as dependências.
error.404_text=A página que você solicitou não está disponível.
; Dashboard
@@ -74,7 +74,7 @@ add_bug=Adicionar Erro
; User pages
created_issues=Problemas Criados
assigned_issues=Problemas atribuído
-overdue_issues=Overdue Issues
+overdue_issues=Problemas de atraso
issue_tree=Árvore de Problemas
; Account
@@ -87,7 +87,7 @@ edit_on_gravatar=Editar na Gravatar
save=Salvar
current_password=Senha atual
profile=Informação Pessoal
-default=Default
+default=Padrão
; Browse
general=Geral
@@ -132,7 +132,7 @@ daily=Diariamente
weekly=Semanalmente
monthly=Mensalmente
-no_sprint=No Sprint
+no_sprint=Não Sprint
comment=Comentário
@@ -170,7 +170,7 @@ comments=Comentários
history=Hiistória
watchers=Observadores
child_tasks=Tarefas filho
-sibling_tasks=Sibling Tasks
+sibling_tasks=Irmão Tarefas
related_tasks=Tarefas relacionadas
notifications_sent=Notifications sent
@@ -189,10 +189,10 @@ task_dependency=Esta tarefa é uma dependência para:
add_dependent=Adicionar dependente
; Dependency Types (Finish-Start, Finish-Finish, Start-Start, Start-Finish)
-fs=FS
-ff=FF
-ss=SS
-sf=SF
+fs=TC
+ff=TT
+ss=CC
+sf=CT
write_a_comment=Escrever um comentário…
save_comment=Salvar comentário
@@ -205,7 +205,7 @@ new_task=Nova tarefa
under_n=Sob a {0}
no_related_issues=Não há problemas relacionados
-copy_issue=copiar a problema
+copy_issue=Cópia Problema
copy_issue_details=Copiar este problema vai duplicá-lo e todos os seus descendentes. Sem comentários, arquivos, história, ou observadores serão copiados.
deleted_success=Problema #{0} foi excluído com sucesso.
@@ -220,7 +220,7 @@ bulk_update=Atualizar estes problemas
project_overview=Visão geral do projeto
project_tree=Projeto árvore
n_complete={0} completa
-n_child_issues={0} questões de criança
+n_child_issues={0} problemas de criança
; Tags
issue_tags=Etiquetas
@@ -255,8 +255,8 @@ edit_user=Editar usuário
require_new_password=Exigem uma nova senha no próximo logon
role=Função
user=Usuário
-deactivate=Deactivate
-reactivate=Reactivate
+deactivate=Desativar
+reactivate=Reativar
administrator=Administrador
members=Membros
group_name=Nome do grupo
@@ -269,57 +269,59 @@ new_sprint=Novo sprint
edit_sprint=Editar sprint
start_date=Data de início
end_date=Data de término
-version=Version
+version=Versão
current_version=Versão atual
update_available=Atualização disponível
update_to_n=Actualização de {0}
backup_db=Você tem certeza?\nVocê deve fazer backup de seu banco de dados antes de continuar.
-show_deactivated_users=Show Deactivated Users
+show_deactivated_users=Mostrar Usuários Desativados
; User Ranks
rank=Classificação
-ranks.0=Guest
+ranks.0=Visitante
ranks.1=Cliente
ranks.2=Usuário
ranks.3=Manager
ranks.4=Admin
-ranks.5=Super Admin
-rank_permissions.0=Read-only
+ranks.5=Super Administrador
+rank_permissions.0=Somente leitura
rank_permissions.1=Pode postar comentários
-rank_permissions.2=Can create/edit issues
-rank_permissions.3=Can delete issues/comments
+rank_permissions.2=Pode criar/editar problemas
+rank_permissions.3=Pode apagar problemas/comentários
rank_permissions.4=Pode criar/editar/excluir usuários/grupos/sprints
rank_permissions.5=Pode editar a configuração
; Config
-site_basics=Site Basics
-text_parsing=Text Parsing
-email_smtp_imap=Email (SMTP/IMAP)
-advanced=Advanced
-site_name=Site Name
-site_description=Site Description
-timezone=Timezone
-default_theme=Default Theme
+site_basics=Fundamentos Do Site
+text_parsing=Análise de texto
+email_smtp_imap=E-mail (SMTP/IMAP)
+advanced=Avançado
+site_name=Nome Do Site
+site_description=Descrição Do Site
+timezone=Fuso horário
+default_theme=Tema Padrão
logo=Logo
-allow_public_registration=Allow public registration
-convert_ids=Convert IDs to Links
-convert_hashtags=Convert Hashtags to Links
-convert_urls=Convert URLs to links
-convert_emoticons=Convert emoticons to glyphs
-outgoing_mail=Outgoing Mail (SMTP)
+allow_public_registration=Permitir o registro público
+parser_syntax=Parser Syntax
+advanced_options=Opções avançadas (todos habilitado por padrão)
+convert_ids=Converter IDs para Links
+convert_hashtags=Converter Hashtags para Links
+convert_urls=Converter URLs para links
+convert_emoticons=Converter emoticons para glifos
+outgoing_mail=Email de saída (SMTP)
from_address=From Address
-incoming_mail=Incoming Mail (IMAP)
-hostname=Hostname
-debug_level=Debug Level (DEBUG)
-cache_mode=Cache Mode (CACHE)
-cookie_expiration=Cookie Expiration (JAR.expire)
-max_upload_size=Max Upload Size (files.maxsize)
-censor_credit_card_numbers=Censor Credit Card Numbers (security.block_ccs)
-demo_user=Demo User (site.demo)
-config_note=Note
-imap_truncate_lines=IMAP Message Truncate Lines (mail.truncate_lines)
-package_mail_config_note={0} uses your default PHP mail configuration for outgoing email.
+incoming_mail=Email de entrada (IMAP)
+hostname=Nome do host
+debug_level=Nível de depuração (DEBUG)
+cache_mode=Modo de cache (CACHE)
+cookie_expiration=Expiração do cookie (JAR.expire)
+max_upload_size=Tamanho máximo de upload (files.maxsize)
+censor_credit_card_numbers=Censor de números de cartão de crédito (security.block_ccs)
+demo_user=Usuário de demonstração (site.demo)
+config_note=Nota
+imap_truncate_lines=Linhas de truncar mensagem IMAP (mail.truncate_lines)
+package_mail_config_note={0} usa a configuração de correio padrão PHP para e-mail de saída.
imap_settings_note=IMAP settings here will have no effect unless the {0} cron is being run.
-email_leave_blank=Leave blank to disable outgoing email
-advanced_config_note==These values can be changed by editing the values in the {0} database table.
+email_leave_blank=Deixe em branco para desactivar o envio de e-mail
+advanced_config_note=Estes valores podem ser alteradas editando os valores na {0} tabela de banco de dados.
diff --git a/app/dict/ru.ini b/app/dict/ru.ini
index 55f7fcca..cb4b6cfb 100644
--- a/app/dict/ru.ini
+++ b/app/dict/ru.ini
@@ -299,9 +299,11 @@ advanced=Advanced
site_name=Site Name
site_description=Site Description
timezone=Timezone
-default_theme=Default Theme
+default_theme=Тема по умолчанию
logo=Logo
allow_public_registration=Allow public registration
+parser_syntax=Parser Syntax
+advanced_options=Advanced Options (all enabled by default)
convert_ids=Convert IDs to Links
convert_hashtags=Convert Hashtags to Links
convert_urls=Convert URLs to links
@@ -321,5 +323,5 @@ imap_truncate_lines=IMAP Message Truncate Lines (mail.truncate_lines)
package_mail_config_note={0} uses your default PHP mail configuration for outgoing email.
imap_settings_note=IMAP settings here will have no effect unless the {0} cron is being run.
email_leave_blank=Leave blank to disable outgoing email
-advanced_config_note==These values can be changed by editing the values in the {0} database table.
+advanced_config_note=These values can be changed by editing the values in the {0} database table.
diff --git a/app/dict/zh.ini b/app/dict/zh.ini
new file mode 100644
index 00000000..7810ac81
--- /dev/null
+++ b/app/dict/zh.ini
@@ -0,0 +1,327 @@
+; Index, login, password reset
+log_in=登录
+register=注册
+username=用户名
+password=密码
+email=邮箱
+email_address=邮箱地址
+
+reset_password=重置密码
+new_password=新密码
+confirm_password=确认密码
+
+cancel=取消
+
+logged_out=已退出
+session_ended_message=您的会话已结束,请重新登录。
+
+; Footer
+n_queries={0,number,integer} queries
+n_total_queries_n_cached=查询 {0,number,integer} 次,缓存 {1,number,integer} 次
+page_generated_in_n_seconds=页面生成耗时 {0,number} 秒
+real_usage_n_bytes=实际用量 {0,number,integer} 字节
+current_commit_n=当前提交: {0}
+
+; Installer
+install_phproject=安装 Phproject
+
+; Navbar, basic terminology
+new=新建
+sprint=冲刺
+sprints=冲刺
+browse=浏览
+open=开放
+closed=已关闭
+created_by_me=由我创建
+assigned_to_me=分配给我
+issue_search=快速查找问题
+administration=行政管理
+dashboard=信息中心
+issues=工单数
+my_issues=我的工单
+my_account=我的帐户
+configuration=配置
+plugins=插件
+users=用户
+groups=群组
+log_out=注销
+demo_notice=这个网站在演示模式下运行。所有内容是公开的并可能随时被重置。
+loading=加载中...
+close=关闭
+related=相关
+current_issue=当前工单
+toggle_navigation=切换导航
+
+; Errors
+error.loading_issue_history=加载工单历史记录时出错。
+error.loading_issue_watchers=加载工单观察员时出错。
+error.loading_related_issues=加载相关工单时出错。
+error.loading_dependencies=加载依赖项时出错。
+error.404_text=您请求的页面不可用。
+
+; Dashboard
+taskboard=任务板
+my_projects=我的项目
+my_subprojects=我的子项目
+my_tasks=我的任务
+my_bugs=我的 Bug
+repeat_work=重复工作
+my_watchlist=我的观察名单
+add_project=添加项目
+add_task=添加任务
+add_bug=添加 Bug
+
+; User pages
+created_issues=以创建工单
+assigned_issues=已分配工单
+overdue_issues=逾期工单
+issue_tree=工单树
+
+; Account
+name=名称
+theme=主题
+language=语言
+task_color=任务颜色
+avatar=头像
+edit_on_gravatar=在 Gravatar 上编辑
+save=保存
+current_password=当前密码
+profile=个人信息
+default=默认
+
+; Browse
+general=通用
+exact_match=精确匹配
+submit=提交
+export=导出
+go_previous=上一项
+go_next=下一个
+
+; Issue fields
+cols.id=ID
+cols.title=标题
+cols.description=描述
+cols.type=类型
+cols.priority=优先级
+cols.status=状态
+cols.author=作者
+cols.assignee=分配给
+cols.total_spent_hours=总花费工时
+cols.planned_hours=计划的工时
+cols.remaining_hours=剩余工时
+cols.start_date=开始日期
+cols.due_date=截止日期
+cols.repeat_cycle=重复周期
+cols.parent_id=上级 ID
+cols.parent=上级
+cols.sprint=冲刺
+cols.created=已创建
+cols.start=开始
+cols.due=截止
+cols.closed=关闭
+cols.hours_spent=已花费工时
+cols.depends_on=依赖于
+
+; Issue editing
+not_assigned=未分配
+choose_option=选择一个选项
+
+repeating=重复
+not_repeating=不重复
+daily=每日
+weekly=每周
+monthly=每月
+
+no_sprint=没有冲刺
+
+comment=注释
+
+send_notifications=发送通知
+reset=重置
+new_n=新建 {0}
+edit_n=编辑 {0}
+create_n=创建 {0}
+save_n=保存 {0}
+
+; Issue page
+mark_complete=标记为已完成
+complete=完成
+reopen=重新打开
+show_on_taskboard=在任务板上显示
+copy=复制
+watch=观察
+unwatch=取消观察
+edit=编辑
+delete=删除
+
+files=文件
+upload=上传
+upload_a_file=上传文件
+attached_file=附加文件
+deleted=已删除
+file_name=文件名
+uploaded_by=上传者
+upload_date=上传日期
+file_size=文件大小
+file_deleted=文件已删除。
+undo=撤消
+
+comments=评论
+history=历史记录
+watchers=观察员
+child_tasks=子任务
+sibling_tasks=同级任务
+related_tasks=关联任务
+
+notifications_sent=已发出的通知
+notifications_not_sent=未发送通知
+a_changed={0} 更改:
+a_changed_from_b_to_c={0} 从 {1} 改为 {2}
+a_set_to_b={0} 设置为 {1}
+a_removed={0} 删除
+
+dependencies=依赖项
+dependency=依赖项
+dependent=依赖
+task_depends=这项任务依赖于:
+add_dependency=添加依赖关系
+task_dependency=这项任务是其依赖项:
+add_dependent=添加依赖
+
+; Dependency Types (Finish-Start, Finish-Finish, Start-Start, Start-Finish)
+fs=FS
+ff=FF
+ss=SS
+sf=SF
+
+write_a_comment=写评论...
+save_comment=保存评论
+
+no_history_available=无历史记录
+add_watcher=添加观察员
+
+new_sub_project=新建子项目
+new_task=新建任务
+under_n=在 {0} 下
+no_related_issues=无关联工单
+
+copy_issue=复制工单
+copy_issue_details=复制此工单将复制所有其子项。但不会复制评论、文件、历史记录或观察员。
+
+deleted_success=工单 #{0} 已成功删除。
+deleted_notice=此工单已被删除。 对其编辑仍会发送通知,但除管理员以外的收件人将无法查看此工单。
+restore_issue=恢复工单
+
+comment_delete_confirm=您确定要删除该评论?
+
+bulk_actions=显示批量操作
+bulk_update=更新所有选定的任务
+
+project_overview=项目概述
+project_tree=项目树
+n_complete={0} 完成
+n_child_issues={0} 子工单
+
+; Tags
+issue_tags=工单标签
+no_tags_created=尚无工单标签被创建。
+tag_help_1=通过将 #标签 添加到工单描述中来创建标签。
+tag_help_2=#标签 可以包含字母、 数字和连字符,并且必须以字母开头。
+view_all_tags=查看所有标签
+
+; Taskboard/Backlog
+backlog=积压工单
+filter_tasks=筛选任务
+filter_projects=筛选项目
+all_projects=所有项目
+all_tasks=所有任务
+my_groups=我的群组
+burndown=燃尽
+hours_remaining=剩余工时
+ideal_hours_remaining=理想剩余工时
+daily_hours_remaining=每天剩余工时
+project=项目
+subproject=子项目
+track_time_spent=跟踪时间
+burn_hours=燃烧工时
+backlog_old_help_text=拖移项目至此以从冲刺中删除
+previous_sprints=显示以前的冲刺
+future_sprints=显示未来冲刺
+
+; Administration
+overview=概况
+new_user=新增用户
+edit_user=编辑用户
+require_new_password=下次登录时要求设置新密码
+role=角色
+user=用户
+deactivate=停用
+reactivate=重新激活
+administrator=管理员
+members=成员
+group_name=群组名称
+group_name_saved=群组名称已保存
+manager=经理
+set_as_manager=设为经理
+add_to_group=添加到组
+no_groups_exist=无群组存在。
+new_sprint=新建冲刺
+edit_sprint=编辑冲刺
+start_date=起始日期
+end_date=结束日期
+version=版本
+current_version=当前版本
+update_available=有可用更新
+update_to_n=更新到 {0}
+backup_db=您确定吗? \n在继续之前,建议先备份您的数据库。
+show_deactivated_users=显示停用用户。
+
+; User Ranks
+rank=等级
+ranks.0=访客
+ranks.1=客户
+ranks.2=用户
+ranks.3=经理
+ranks.4=管理员
+ranks.5=超级管理员
+rank_permissions.0=只读
+rank_permissions.1=可以发表评论
+rank_permissions.2=可以创建/编辑工单
+rank_permissions.3=可以删除工单/评论
+rank_permissions.4=可以创建、 编辑或删除用户/群组/冲刺
+rank_permissions.5=可以编辑配置
+
+; Config
+site_basics=基本设置
+text_parsing=文本解析
+email_smtp_imap=电子邮件 (SMTP/IMAP)
+advanced=高级选项
+site_name=站点名称
+site_description=站点描述
+timezone=时区
+default_theme=默认主题
+logo=标志
+allow_public_registration=允许公开注册
+parser_syntax=解析器语法
+advanced_options=高级选项 (默认全部启用)
+convert_ids=转换 ID 为链接
+convert_hashtags=转换#标签#为链接
+convert_urls=转换 URL 为链接
+convert_emoticons=转换表情符号为图片
+outgoing_mail=传出邮件 (SMTP)
+from_address=寄件地址
+incoming_mail=传入邮件 (IMAP)
+hostname=主机名
+debug_level=调试级别 (DEBUG)
+cache_mode=缓存模式 (CACHE)
+cookie_expiration=Cookie 有效期 (JAR.expire)
+max_upload_size=最大上传文件大小 (files.maxsize)
+censor_credit_card_numbers=审查信用卡号码(security.block_ccs)
+demo_user=演示用户 (site.demo)
+config_note=备注
+imap_truncate_lines=IMAP 邮件截断行 (mail.truncate_lines)
+package_mail_config_note={0} 使用默认 PHP 邮件配置发送电子邮件。
+imap_settings_note=这里的 IMAP 设置只有在计划任务 {0} 运行时才起作用。
+email_leave_blank=留空禁止外发邮件
+advanced_config_note=可以通过编辑 {0} 数据库表来更改这些值。
+
diff --git a/app/model/config.php b/app/model/config.php
index d2da6d5c..a36e3b0a 100644
--- a/app/model/config.php
+++ b/app/model/config.php
@@ -66,7 +66,7 @@ public static function setVal($key, $value) {
$f3->set($key, $value);
$item = new static();
$item->load(array('attribute = ?', $key));
- $item->attribute = $attribute;
+ $item->attribute = $key;
$item->value = $value;
$item->save();
return $item;
diff --git a/app/view/admin/config.html b/app/view/admin/config.html
index 29398f8b..eaf20216 100644
--- a/app/view/admin/config.html
+++ b/app/view/admin/config.html
@@ -7,12 +7,6 @@