Added locale selection to preferences

Mostly completed transition to full i18n
Incorporated german translations by Ulf Klose <ulf.klose@gmail.com>
This commit is contained in:
Marcus Ilgner 2011-01-16 18:14:07 +01:00
parent d57bd479f9
commit 338d4bb5a6
44 changed files with 1071 additions and 209 deletions

View file

@ -36,7 +36,7 @@ class ApplicationController < ActionController::Base
before_filter :set_locale
prepend_before_filter :login_required
prepend_before_filter :enable_mobile_content_negotiation
after_filter :set_locale
# after_filter :set_locale
after_filter :set_charset
include ActionView::Helpers::TextHelper
@ -50,9 +50,10 @@ class ApplicationController < ActionController::Base
end
def set_locale
locale = params[:locale]
locale = params[:locale] # specifying a locale in the request takes precedence
locale = locale || prefs.locale unless current_user.nil? # otherwise, the locale of the currently logged in user takes over
locale = locale || request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first if request.env['HTTP_ACCEPT_LANGUAGE']
I18n.locale = I18n::available_locales.include?(locale) ? locale : I18n.default_locale
I18n.locale = I18n::available_locales.include?(locale.to_sym) ? locale : I18n.default_locale
logger.debug("Selected '#{I18n.locale}' as locale")
end

View file

@ -1,12 +1,12 @@
class PreferencesController < ApplicationController
def index
@page_title = "TRACKS::Preferences"
@page_title = t('preferences.page_title')
@prefs = prefs
end
def edit
@page_title = "TRACKS::Edit Preferences"
@page_title = t('preferences.page_title_edit')
end
def update

View file

@ -43,7 +43,7 @@ class ProjectsController < ApplicationController
def show
@max_completed = current_user.prefs.show_number_completed
init_data_for_sidebar unless mobile?
@page_title = "TRACKS::Project: #{@project.name}"
@page_title = t('projects.page_title', :project => @project.name)
@not_done = @project.not_done_todos_including_hidden
@deferred = @project.deferred_todos
@ -204,7 +204,7 @@ class ProjectsController < ApplicationController
def render_projects_html
lambda do
@page_title = "TRACKS::List Projects"
@page_title = t('projects.list_projects')
@count = current_user.projects.size
@active_projects = current_user.projects.active
@hidden_projects = current_user.projects.hidden
@ -230,10 +230,9 @@ class ProjectsController < ApplicationController
def render_project_mobile
lambda do
if @project.default_context.nil?
@project_default_context = "This project does not have a default context"
@project_default_context = t('projects.no_default_context')
else
@project_default_context = "The default context for this project is "+
@project.default_context.name
@project_default_context = t('projects.default_context', :context => @project.default_context.name)
end
cookies[:mobile_url]= {:value => request.request_uri, :secure => SITE_CONFIG['secure_cookies']}
@mobile_from_project = @project.id
@ -293,7 +292,7 @@ class ProjectsController < ApplicationController
project_description = ''
project_description += sanitize(markdown( project.description )) unless project.description.blank?
project_description += "<p>#{count_undone_todos_phrase(p)}. "
project_description += "Project is #{project.state}."
project_description += t('projects.project_state', :state => project.state)
project_description += "</p>"
project_description
end

View file

@ -173,7 +173,7 @@ class TodosController < ApplicationController
if @todos.size > 0
@default_tags = @todos[0].project.default_tags unless @todos[0].project.nil?
else
@multiple_error = "You need to submit at least one next action"
@multiple_error = t('todos.next_action_needed')
@saved = false;
@default_tags = current_user.projects.find_by_name(@initial_project_name).default_tags unless @initial_project_name.blank?
end
@ -277,10 +277,10 @@ class TodosController < ApplicationController
format.html do
if @saved
# TODO: I think this will work, but can't figure out how to test it
notify :notice, "The action <strong>'#{@todo.description}'</strong> was marked as <strong>#{@todo.completed? ? 'complete' : 'incomplete' }</strong>"
notify(:notice, t("todos.action_marked_complete", :description => @todo.description, :completed => @todo.completed? ? 'complete' : 'incomplete'))
redirect_to :action => "index"
else
notify :notice, "The action <strong>'#{@todo.description}'</strong> was NOT marked as <strong>#{@todo.completed? ? 'complete' : 'incomplete' } due to an error on the server.</strong>", "index"
notify(:notice, t("todos.action_marked_complete_error", :description => @todo.description, :completed => @todo.completed? ? 'complete' : 'incomplete'), "index")
redirect_to :action => "index"
end
end
@ -304,7 +304,7 @@ class TodosController < ApplicationController
@saved = @todo.save
@context_changed = true
@message = "Context changed to #{@context.name}"
@message = t('todos.context_changed', :name => @context.name)
determine_remaining_in_context_count(@original_item_context_id)
respond_to do |format|
@ -476,14 +476,14 @@ class TodosController < ApplicationController
format.html do
if @saved
message = "Successfully deleted next action"
message = t('todos.action_deleted_success')
if activated_successor_count > 0
message += " activated #{pluralize(activated_successor_count, 'pending action')}"
end
notify :notice, message, 2.0
redirect_to :action => 'index'
else
notify :error, "Failed to delete the action", 2.0
notify :error, t('todos.action_deleted_error'), 2.0
redirect_to :action => 'index'
end
end
@ -507,7 +507,7 @@ class TodosController < ApplicationController
end
def completed
@page_title = "TRACKS::Completed tasks"
@page_title = t('todos.completed_tasks_title')
@done = current_user.completed_todos
@done_today = @done.completed_within Time.zone.now - 1.day
@done_this_week = @done.completed_within Time.zone.now - 1.week
@ -516,7 +516,7 @@ class TodosController < ApplicationController
end
def completed_archive
@page_title = "TRACKS::Archived completed tasks"
@page_title = t('todos.archived_tasks_title')
@done = current_user.completed_todos
@count = @done.size
@done_archive = @done.completed_more_than Time.zone.now - 28.days
@ -524,7 +524,7 @@ class TodosController < ApplicationController
def list_deferred
@source_view = 'deferred'
@page_title = "TRACKS::Tickler"
@page_title = t('todos.deferred_tasks_title')
@contexts_to_show = @contexts = current_user.contexts.find(:all)
@ -561,7 +561,7 @@ class TodosController < ApplicationController
def tag
@source_view = params['_source_view'] || 'tag'
@tag_name = params[:name]
@page_title = "TRACKS::Tagged with \'#{@tag_name}\'"
@page_title = t('todos.tagged_page_title', :tag_name => @tag_name)
# mobile tags are routed with :name ending on .m. So we need to chomp it
@tag_name = @tag_name.chomp('.m') if mobile?
@ -645,7 +645,7 @@ class TodosController < ApplicationController
def calendar
@source_view = params['_source_view'] || 'calendar'
@page_title = "TRACKS::Calendar"
@page_title = t('todos.calendar_page_title')
@projects = current_user.projects.find(:all)
@ -778,24 +778,24 @@ class TodosController < ApplicationController
condition_builder.add 'todos.state = ?', 'active'
end
@title = "Tracks - Next Actions"
@description = "Filter: "
@title = t('todos.next_actions_title')
@description = t('todos.next_actions_description')
if params.key?('due')
due_within = params['due'].to_i
due_within_when = Time.zone.now + due_within.days
condition_builder.add('todos.due <= ?', due_within_when)
due_within_date_s = due_within_when.strftime("%Y-%m-%d")
@title << " due today" if (due_within == 0)
@title << " due within a week" if (due_within == 6)
@description << " with a due date #{due_within_date_s} or earlier"
@title << t('todos.next_actions_title_additions.due_today') if (due_within == 0)
@title << t('todos.next_actions_title_additions.due_within_a_week') if (due_within == 6)
@description << t('todos.next_actions_description_additions.due_date', :due_date => due_within_date_s)
end
if params.key?('done')
done_in_last = params['done'].to_i
condition_builder.add('todos.completed_at >= ?', Time.zone.now - done_in_last.days)
@title << " actions completed"
@description << " in the last #{done_in_last.to_s} days"
@title << t('todos.next_actions_title_additions.completed')
@description << t('todos.next_actions_description_additions.completed', :count => done_in_last.to_s)
end
if params.key?('tag')
@ -813,16 +813,16 @@ class TodosController < ApplicationController
end
def with_parent_resource_scope(&block)
@feed_title = "Actions "
@feed_title = t('todos.feed_title')
if (params[:context_id])
@context = current_user.contexts.find_by_params(params)
@feed_title = @feed_title + "in context '#{@context.name}'"
@feed_title = @feed_title + t('todos.feed_title_in_context', :context => @context.name)
Todo.send :with_scope, :find => {:conditions => ['todos.context_id = ?', @context.id]} do
yield
end
elsif (params[:project_id])
@project = current_user.projects.find_by_params(params)
@feed_title = @feed_title + "in project '#{@project.name}'"
@feed_title = @feed_title + t('todos.feed_title_in_project', :project => @project.name)
@project_feed = true
Todo.send :with_scope, :find => {:conditions => ['todos.project_id = ?', @project.id]} do
yield
@ -839,9 +839,9 @@ class TodosController < ApplicationController
end
if TodosController.is_feed_request(request) && @description
if params.key?('limit')
@description << "Lists the last #{params['limit']} incomplete next actions"
@description << t('todos.list_incomplete_next_actions_with_limit', :count => params['limit'])
else
@description << "Lists incomplete next actions"
@description << t('todos.list_incomplete_next_actions')
end
end
else
@ -971,7 +971,7 @@ class TodosController < ApplicationController
def render_todos_html
lambda do
@page_title = "TRACKS::List tasks"
@page_title = t('todos.task_list_title')
# If you've set no_completed to zero, the completed items box isn't shown
# on the home page
@ -996,7 +996,7 @@ class TodosController < ApplicationController
def render_todos_mobile
lambda do
@page_title = "All actions"
@page_title = t('todos.mobile_todos_page_title')
@home = true
cookies[:mobile_url]= { :value => request.request_uri, :secure => SITE_CONFIG['secure_cookies']}
determine_down_count
@ -1026,15 +1026,15 @@ class TodosController < ApplicationController
def todo_feed_content
lambda do |i|
item_notes = sanitize(markdown( i.notes )) if i.notes?
due = "<div>Due: #{format_date(i.due)}</div>\n" if i.due?
done = "<div>Completed: #{format_date(i.completed_at)}</div>\n" if i.completed?
due = "<div>#{t('todos.feeds.due', :date => format_date(i.due))}</div>\n" if i.due?
done = "<div>#{t('todos.feeds.completed', :date => format_date(i.completed_at))}</div>\n" if i.completed?
context_link = "<a href=\"#{ context_url(i.context) }\">#{ i.context.name }</a>"
if i.project_id?
project_link = "<a href=\"#{ project_url(i.project) }\">#{ i.project.name }</a>"
else
project_link = "<em>none</em>"
project_link = "<em>#{t('common.none')}</em>"
end
"#{done||''}#{due||''}#{item_notes||''}\n<div>Project: #{project_link}</div>\n<div>Context: #{context_link}</div>"
"#{done||''}#{due||''}#{item_notes||''}\n<div>#{t('common.project')}: #{project_link}</div>\n<div>#{t('common.context')}: #{context_link}</div>"
end
end

View file

@ -35,15 +35,15 @@ class UsersController < ApplicationController
end
if User.no_users_yet?
@page_title = "TRACKS::Sign up as the admin user"
@heading = "Welcome to TRACKS. To get started, please create an admin account:"
@page_title = t('users.new_user_title')
@heading = t('users.first_user_heading')
@user = get_new_user
elsif (@user && @user.is_admin?) || SITE_CONFIG['open_signups']
@page_title = "TRACKS::Sign up a new user"
@heading = "Sign up a new user:"
@page_title = t('users.new_user_title')
@heading = t('users.new_user_heading')
@user = get_new_user
else # all other situations (i.e. a non-admin is logged in, or no one is logged in, but we have some users)
@page_title = "TRACKS::No signups"
@page_title = t('users.no_signups_title')
@admin_email = User.find_admin.preference.admin_email
render :action => "nosignup", :layout => "login"
return
@ -66,7 +66,7 @@ class UsersController < ApplicationController
respond_to do |format|
format.html do
unless User.no_users_yet? || (@user && @user.is_admin?) || SITE_CONFIG['open_signups']
@page_title = "No signups"
@page_title = t('users.no_signups_title')
@admin_email = User.find_admin.preference.admin_email
render :action => "nosignup", :layout => "login"
return
@ -98,10 +98,10 @@ class UsersController < ApplicationController
user.is_admin = true if first_user_signing_up
if user.save
@user = User.authenticate(user.login, params['user']['password'])
@user.create_preference
@user.create_preference({:locale => I18n.locale})
@user.save
session['user_id'] = @user.id if first_user_signing_up
notify :notice, "Signup successful for user #{@user.login}."
notify :notice, t('users.signup_successful', :username => @user.login)
redirect_back_or_home
end
return
@ -121,7 +121,7 @@ class UsersController < ApplicationController
end
user.password_confirmation = params[:request][:password]
if user.save
render :text => "User created.", :status => 200
render :text => t('users.user_created'), :status => 200
else
render_failure user.errors.to_xml
end
@ -139,9 +139,9 @@ class UsersController < ApplicationController
respond_to do |format|
format.html do
if @saved
notify :notice, "Successfully deleted user #{@deleted_user.login}", 2.0
notify :notice, t('users.successfully_deleted_user', :username => @deleted_user.login), 2.0
else
notify :error, "Failed to delete user #{@deleted_user.login}", 2.0
notify :error, t('users.failed_to_delete_user', :username => @deleted_user.login), 2.0
end
redirect_to users_url
end
@ -152,12 +152,12 @@ class UsersController < ApplicationController
def change_password
@page_title = "TRACKS::Change password"
@page_title = t('users.change_password_title')
end
def update_password
@user.change_password(params[:updateuser][:password], params[:updateuser][:password_confirmation])
notify :notice, "Password updated."
notify :notice, t('users.password_updated')
redirect_to preferences_path
rescue Exception => error
notify :error, error.message
@ -165,7 +165,7 @@ class UsersController < ApplicationController
end
def change_auth_type
@page_title = "TRACKS::Change authentication type"
@page_title = t('users.change_auth_type_title')
end
def update_auth_type
@ -177,10 +177,10 @@ class UsersController < ApplicationController
@user.auth_type = 'open_id'
@user.open_id_url = identity_url
if @user.save
notify :notice, "You have successfully verified #{identity_url} as your identity and set your authentication type to Open ID."
notify :notice, t('users.openid_url_verified', :url => identity_url)
else
debugger
notify :warning, "You have successfully verified #{identity_url} as your identity but there was a problem saving your authentication preferences."
notify :warning, t('users.openid_ok_pref_failed', :url => identity_url)
end
redirect_to preferences_path
else
@ -192,10 +192,10 @@ class UsersController < ApplicationController
end
@user.auth_type = params[:user][:auth_type]
if @user.save
notify :notice, "Authentication type updated."
notify :notice, t('users.auth_type_updated')
redirect_to preferences_path
else
notify :warning, "There was a problem updating your authentication type: #{ @user.errors.full_messages.join(', ')}"
notify :warning, t('users.auth_type_update_error', :error_messages => @user.errors.full_messages.join(', '))
redirect_to :action => 'change_auth_type'
end
end
@ -203,7 +203,7 @@ class UsersController < ApplicationController
def refresh_token
@user.generate_token
@user.save!
notify :notice, "New token successfully generated"
notify :notice, t('users.new_token_generated')
redirect_to preferences_path
end

View file

@ -3,6 +3,7 @@ require 'digest/sha1'
class User < ActiveRecord::Base
# Virtual attribute for the unencrypted password
attr_accessor :password
attr_protected :is_admin # don't allow mass-assignment for this
has_many :contexts,
:order => 'position ASC',
@ -11,11 +12,11 @@ class User < ActiveRecord::Base
find(params['id'] || params['context_id']) || nil
end
def update_positions(context_ids)
context_ids.each_with_index do |id, position|
context_ids.each_with_index {|id, position|
context = self.detect { |c| c.id == id.to_i }
raise I18n.t('models.user.error_context_not_associated', :context => id, :user => @user.id) if context.nil?
context.update_attribute(:position, position + 1)
end
}
end
end
has_many :projects,
@ -25,11 +26,11 @@ class User < ActiveRecord::Base
find(params['id'] || params['project_id'])
end
def update_positions(project_ids)
project_ids.each_with_index do |id, position|
project_ids.each_with_index {|id, position|
project = self.detect { |p| p.id == id.to_i }
raise I18n.t('models.user.error_project_not_associated', :project => id, :user => @user.id) if project.nil?
project.update_attribute(:position, position + 1)
end
}
end
def projects_in_state_by_position(state)
self.sort{ |a,b| a.position <=> b.position }.select{ |p| p.state == state }

View file

@ -6,7 +6,7 @@
<div id="<%= dom_id(context) %>" class="context sortable_row" style="display:'';">
<% unless suppress_drag_handle -%>
<div class="position">
<span class="handle">DRAG</span>
<span class="handle"><%= t('common.drag_handle') %></span>
</div>
<% end -%>
<div class="data">
@ -15,22 +15,22 @@
<div class="buttons">
<% if context.hide? %>
<span class="grey">HIDDEN</span>
<span class="grey"><%= t('states.hidden') %></span>
<% else %>
<span class="grey">VISIBLE</span>
<span class="grey"><%= t('states.visible') %></span>
<% end %>
<%= link_to_remote(
image_tag( "blank.png", :title => "Delete context", :class=>"delete_item"),
image_tag( "blank.png", :title => t('contexts.delete_context'), :class=>"delete_item"),
:url => {:controller => 'contexts', :action => 'destroy', :id => context.id},
:method => 'delete',
:with => "'_source_view=#{@source_view}'",
:before => "$('#{dom_id(context)}').block({message:null});",
:complete => "$('#{dom_id(context)}').unblock();",
:confirm => "Are you sure that you want to delete the context '#{context.name}'? Be aware that this will also delete all (repeating) actions in this context!",
:confirm => t('contexts.delete_context_confirmation', :name => context.name),
:html => { :id => dom_id(context, 'delete') }
) %>
<%= link_to_remote(
image_tag( "blank.png", :title => "Edit context", :class=>"edit_item"),
image_tag( "blank.png", :title => t('contexts.edit_context'), :class=>"edit_item"),
:url => {:controller => 'contexts', :action => 'edit', :id => context.id},
:method => 'get',
:with => "'_source_view=#{@source_view}'",

View file

@ -1,7 +1,7 @@
<div class="list-stategroup-contexts-container">
<h2><span id="<%= state %>-contexts-count" class="badge"><%= context_state_group.length %></span><%= state.titlecase %> <%= t('common.contexts') %></h2>
<h2><span id="<%= state %>-contexts-count" class="badge"><%= context_state_group.length %></span><%= t('states.'+ state +'_plural')%> <%= t('common.contexts') %></h2>
<div id="<%= state%>-contexts-empty-nd" style="<%= no_contexts ? 'display:block' : 'display:none'%>">
<div class="message"><p><%= t('contexts.no_contexts', :state => state) %></p></div>
<div class="message"><p><%= t('contexts.no_contexts_' + state) %></p></div>
</div>
<div id="list-contexts-<%= state %>">
<%= render :partial => 'context_listing', :collection => context_state_group %>

View file

@ -13,8 +13,8 @@
</head><body>
<% if !(@new_mobile || @edit_mobile)
if !@prefs.nil? -%>
<h1><span class="count"><%= @down_count %></span> <%=
current_user.time.strftime(@prefs.title_date_format) -%></h1>
<h1><span class="count"><%= @down_count %></span> <%=
l(Date.today, :format => @prefs.title_date_format) -%></h1>
<div class="nav">
<%= (link_to(t('layouts.mobile_navigation.new_action'), new_todo_path(new_todo_params))+" | ") unless @new_mobile -%>
<%= (link_to(t('layouts.mobile_navigation.home'), todos_path(:format => 'm'))+" | ") unless @home -%>

View file

@ -36,7 +36,7 @@
<% if @count -%>
<span id="badge_count" class="badge"><%= @count %></span>
<% end -%>
<%= current_user.time.strftime(@prefs.title_date_format) %>
<%= l(Date.today, :format => @prefs.title_date_format) %>
</h1>
</div>
<div id="minilinks">
@ -48,12 +48,12 @@
<ul class="sf-menu">
<li><%= navigation_link(t('layouts.navigation.home'), home_path, {:accesskey => "t", :title => t('layouts.navigation.home_title')} ) %></li>
<li><%= navigation_link(t('layouts.navigation.starred'), tag_path("starred"), :title => t('layouts.navigation.starred_title')) %></li>
<li><%= navigation_link(t('layouts.navigation.projects'), projects_path, {:accesskey=>"p", :title=>t('layouts.navigation.projects_title')} ) %></li>
<li><%= navigation_link(t('common.projects'), projects_path, {:accesskey=>"p", :title=>t('layouts.navigation.projects_title')} ) %></li>
<li><%= navigation_link(t('layouts.navigation.tickler'), tickler_path, {:accesskey =>"k", :title => t('layouts.navigation.tickler_title')} ) %></li>
<li><a href="#"><%= t('layouts.navigation.organize') %></a>
<ul>
<li><%= navigation_link( t('layouts.navigation.contexts'), contexts_path, {:accesskey=>"c", :title=>t('layouts.navigation.contexts_title')} ) %></li>
<li><%= navigation_link( t('layouts.navigation.notes'), notes_path, {:accesskey => "o", :title => t('layouts.navigation.notes_title')} ) %></li>
<li><%= navigation_link( t('common.contexts'), contexts_path, {:accesskey=>"c", :title=>t('layouts.navigation.contexts_title')} ) %></li>
<li><%= navigation_link( t('common.notes'), notes_path, {:accesskey => "o", :title => t('layouts.navigation.notes_title')} ) %></li>
<li><%= navigation_link( t('layouts.navigation.recurring_todos'), {:controller => "recurring_todos", :action => "index"}, :title => t('layouts.navigation.recurring_todos_title')) %></li>
</ul>
</li>

View file

@ -6,17 +6,17 @@
<% form_tag :action => 'update' do %>
<table>
<tr>
<td><label><%= Preference.human_attribute_name('first_name') %></label></td>
<td><label><%= User.human_attribute_name('first_name') %></label></td>
<td><%= text_field 'user', 'first_name' %></td>
</tr>
<tr>
<td><label><%= Preference.human_attribute_name('last_name') %></label></td>
<td><label><%= User.human_attribute_name('last_name') %></label></td>
<td><%= text_field 'user', 'last_name' %></td>
</tr>
<%
def table_row(pref_name, nowrap_label = false, &block)
nowrap_attribute = nowrap_label ? ' nowrap="nowrap"' : ''
s = %Q|<tr>\n<td#{nowrap_attribute}><label>#{pref_name.gsub(/_/,' ')}:</label></td>\n<td>\n|
s = %Q|<tr>\n<td#{nowrap_attribute}><label>#{Preference.human_attribute_name(pref_name)}:</label></td>\n<td>\n|
s << yield
s << "\n</td></tr>"
s
@ -30,6 +30,7 @@
table_row(pref_name, nowrap_label) { text_field('prefs', pref_name) }
end
%>
<%= row_with_select_field('locale', I18n.available_locales) %>
<%= row_with_text_field('date_format') %>
<%= row_with_text_field('title_date_format') %>
<%= table_row('time_zone', false) { time_zone_select('prefs','time_zone') } %>

View file

@ -6,6 +6,7 @@
<li><%= User.human_attribute_name('first_name') %>: <span class="highlight"><%= current_user.first_name %></span></li>
<li><%= User.human_attribute_name('last_name') %>: <span class="highlight"><%= current_user.last_name %></span></li>
<li><%= Preference.human_attribute_name('date_format') %>: <span class="highlight"><%= prefs.date_format %></span> Your current date: <%= format_date(current_user.time) %></li>
<li><%= Preference.human_attribute_name('locale') %>: <span class="highlight"><%= prefs.locale %></span></li>
<li><%= Preference.human_attribute_name('title_date_format') %>: <span class="highlight"><%= prefs.title_date_format %></span> Your current title date: <%= current_user.time.strftime(prefs.title_date_format) %></li>
<li><%= Preference.human_attribute_name('time_zone') %>: <span class="highlight"><%= prefs.time_zone %></span> Your current time: <%= current_user.time.strftime('%I:%M %p') %></li>
<li><%= Preference.human_attribute_name('week_starts') %>: <span class="highlight"><%= t('date.day_names')[prefs.week_starts] %></span></li>

View file

@ -6,23 +6,23 @@ suppress_edit_button ||= false
<div id="<%= dom_id(project) %>" class="project sortable_row" style="display:''">
<% unless suppress_drag_handle -%>
<div class="position">
<span class="handle">DRAG</span>
<span class="handle"><%= t('common.drag_handle') %></span>
</div>
<% end -%>
<div class="data">
<%= link_to_project( project ) %><%= " (" + count_undone_todos_and_notes_phrase(project,"actions") + ")" %>
</div>
<div class="buttons">
<span class="grey"><%= project.current_state.to_s.upcase %></span>
<span class="grey"><%= t('states.' + project.current_state.to_s).upcase %></span>
<a class="delete_project_button"
href="<%= project_path(project, :format => 'js') %>"
title="delete the project '<%= project.name %>'"><%= image_tag( "blank.png",
:title => "Delete project",
title="<%= t('projects.delete_project_title') %> '<%= project.name %>'"><%= image_tag( "blank.png",
:title => t('projects.delete_project'),
:class=>"delete_item") %></a>
<% unless suppress_edit_button -%>
<%= link_to_remote(
image_tag( "blank.png", :title => "Edit project", :class=>"edit_item"),
image_tag( "blank.png", :title => t('projects.edit_project_title'), :class=>"edit_item"),
:url => {:controller => 'projects', :action => 'edit', :id => project.id},
:method => 'get',
:with => "'_source_view=#{@source_view}'",

View file

@ -1,12 +1,12 @@
<div class="project-state-group" id="list-<%= state %>-projects-container" <%= " style=\"display:none\"" if project_state_group.empty? %>>
<h2><span id="<%= state %>-projects-count" class="badge"><%= project_state_group.length %></span><%= state.titlecase %> Projects</h2>
<div class="menu_sort"><span class="sort_separator">Sort&nbsp;</span>
<h2><span id="<%= state %>-projects-count" class="badge"><%= project_state_group.length %></span><%= t('states.'+state+'_plural' )%> <%= t('common.projects') %></h2>
<div class="menu_sort"><span class="sort_separator"><%= t('common.sort.sort') %>&nbsp;</span>
<div class="alpha_sort">
<%= link_to("Alphabetically", alphabetize_projects_path(:state => state),
:class => "alphabetize_link", :title => "Sort these projects alphabetically") %>
<%= link_to(t('common.sort.alphabetically'), alphabetize_projects_path(:state => state),
:class => "alphabetize_link", :title => t('common.sort.alphabetically_title')) %>
</div><span class="sort_separator">&nbsp;|&nbsp;</span><div class="tasks_sort">
<%= link_to("By number of tasks", actionize_projects_path(:state => state),
:class => "actionize_link", :title => "Sort these projects by number of tasks") %>
<%= link_to(t('common.sort.by_task_count'), actionize_projects_path(:state => state),
:class => "actionize_link", :title => t('common.sort.by_task_count_title')) %>
</div>
</div>

View file

@ -1,6 +1,6 @@
<div id="display_box">
<div id="projects-empty-nd" style="<%= @no_projects ? 'display:block' : 'display:none'%>">
<div class="message"><p>Currently there are no projects</p></div>
<div class="message"><p><%= t('projects.no_projects') %></p></div>
</div>
<%= render :partial => 'project_state_group', :object => @active_projects, :locals => { :state => 'active'} %>
<%= render :partial => 'project_state_group', :object => @hidden_projects, :locals => { :state => 'hidden'} %>
@ -13,7 +13,7 @@
<div id="project_new_project_container">
<div id="toggle_project_new" class="hide_form">
<a title="Hide new project form" accesskey="n">&laquo; Hide form</a>
<a title="<%= t('projects.hide_new_project_form') %>" accesskey="n">&laquo; <%= t('projects.hide_form') %></a>
</div>
<div id="project_new" class="project_new" style="display:block">
@ -24,19 +24,19 @@
<div id="status"><%= error_messages_for('project') %></div>
<label for="project_name">Name:</label><br />
<label for="project_name"><%= Project.human_attribute_name(:name) %>:</label><br />
<%= text_field 'project', 'name', "tabindex" => 1 %><br />
<label for="project_description">Description (optional):</label><br />
<label for="project_description"><%= Project.human_attribute_name(:description) %> (<%= t('common.optional') %>):</label><br />
<%= text_area 'project', 'description', "cols" => 30, "rows" => 4, "tabindex" => 2 %><br />
<% unless @contexts.empty? -%>
<label for="default_context_name">Default Context (optional):</label><br />
<label for="default_context_name"><%= Project.human_attribute_name(:default_context_name) %> (<%= t('common.optional') %>):</label><br />
<%= text_field_tag("project[default_context_name]", @project.default_context.name, :tabindex => 3) %>
<br />
<% end -%>
<label for="default_tags">Default Tags (optional):</label><br />
<label for="default_tags"><%= Project.human_attribute_name(:default_tags) %> (<%= t('common.optional') %>):</label><br />
<%= text_field_tag("project[default_tags]", @project.default_tags, :tabindex => 4) %>
<br />
@ -45,13 +45,13 @@
<div class="submit_box">
<div class="widgets">
<button type="submit" class="positive" id="project_new_project_submit">
<%= image_tag("accept.png", :alt => "") + 'Add Project' %>
<%= image_tag("accept.png", :alt => "") + t('projects.add_project') %>
</button>
</div>
</div>
<br/><br/>
<input id="go_to_project" type="checkbox" tabindex="5" name="go_to_project"/><label for="go_to_project"> Take me to the new project page</label><br />
<input id="go_to_project" type="checkbox" tabindex="5" name="go_to_project"/><label for="go_to_project"><%= t('projects.to_new_project_page') %></label><br />
<% end -%>
</div>

View file

@ -7,12 +7,12 @@
<% if collapsible %>
<a href="#" class="container_toggle" id="toggle_completed"><%= image_tag("collapse.png") %></a>
<% end %>
Completed actions <%= suffix %>
<%= t('todos.completed_actions') %> <%= suffix %>
</h2>
<div id="completed_containeritems" class="items toggle_target">
<div id="empty-d" style="display:<%= @done.empty? ? 'block' : 'none' %>">
<div class="message"><p>Currently there are no completed actions.</p></div>
<div class="message"><p><%= t('todos.no_completed_actions') %></p></div>
</div>
<%= render :partial => "todos/todo", :collection => done, :locals => { :parent_container_type => "completed", :suppress_context => suppress_context, :suppress_project => suppress_project } %>

View file

@ -3,12 +3,12 @@
<% if collapsible %>
<a href="#" class="container_toggle" id="toggle_deferred"><%= image_tag("collapse.png") %></a>
<% end %>
Deferred/pending actions <%= append_descriptor ? append_descriptor : '' %>
<%= t('todos.deferred_pending_actions') %> <%= append_descriptor ? append_descriptor : '' %>
</h2>
<div id="tickleritems" class="items toggle_target">
<div id="tickler-empty-nd" style="display:<%= deferred.empty? && pending.empty? ? 'block' : 'none'%>;">
<div class="message"><p>Currently there are no deferred or pending actions</p></div>
<div class="message"><p><%= t('todos.no_deferred_pending_actions') %></p></div>
</div>
<%= render :partial => "todos/todo", :collection => deferred, :locals => { :parent_container_type => parent_container_type } %>

View file

@ -11,7 +11,7 @@
<% end %>
<% if done.due %>
<%= " - was due on " + format_date( done.due ) %>
<%= " - " + t('todos.was_due_on_date', :date => format_date( done.due )) %>
<% end %>
<% if done.notes? -%>

View file

@ -4,42 +4,42 @@
<%= source_view_tag( @source_view ) -%>
<%= "<INPUT TYPE=\"hidden\" name=\"_tag_name\" value=\""+ @tag_name+"\">" unless @tag_name.nil? -%>
<label for="<%= dom_id(@todo, 'description') %>">Description</label>
<label for="<%= dom_id(@todo, 'description') %>"><%= t('common.description') %></label>
<%= text_field( "todo", "description", "size" => 30, "tabindex" => 8, "maxlength" => 100) %>
<label for="<%= dom_id(@todo, 'notes') %>">Notes</label>
<label for="<%= dom_id(@todo, 'notes') %>"><%= t('common.notes') %></label>
<%= text_area( "todo", "notes", "cols" => 29, "rows" => 4, "tabindex" => 9) %>
<div class="project_input">
<label for="<%= dom_id(@todo, 'project_name') %>">Project</label>
<label for="<%= dom_id(@todo, 'project_name') %>"><%= t('common.project') %></label>
<input id="<%= dom_id(@todo, 'project_name') %>" name="project_name" autocomplete="off" tabindex="10" size="30" type="text" value="<%= @todo.project.nil? ? 'None' : @todo.project.name.gsub(/"/,"&quot;") %>" />
</div>
<div class="context_input">
<label for="<%= dom_id(@todo, 'context_name') %>">Context</label>
<label for="<%= dom_id(@todo, 'context_name') %>"><%= t('common.context') %></label>
<input id="<%= dom_id(@todo, 'context_name') %>" name="context_name" autocomplete="off" tabindex="11" size="30" type="text" value="<%= @todo.context.name %>" />
</div>
<label class="tag_list_label" for="<%= dom_id(@todo, 'tag_list') %>">Tags (separate with commas)</label>
<label class="tag_list_label" for="<%= dom_id(@todo, 'tag_list') %>"><%= t('todos.tags') %></label>
<%= text_field_tag 'tag_list', tag_list_text, :id => dom_id(@todo, 'tag_list'), :size => 30, :tabindex => 12 %>
<div class="due_input">
<label for="<%= dom_id(@todo, 'due_label') %>">Due</label>
<%= date_field_tag("todo[due]", dom_id(@todo, 'due'), format_date(@todo.due), "tabindex" => 13) %>
<a href="#" id="<%= dom_id(@todo, 'due_x') %>" class="date_clear" title="Clear due date">
<%= image_tag("delete_off.png", :alt => "Clear due date") %>
<a href="#" id="<%= dom_id(@todo, 'due_x') %>" class="date_clear" title="<%= t('todos.clear_due_date') %>">
<%= image_tag("delete_off.png", :alt => "<%= t('todos.clear_due_date') %>") %>
</a>
</div>
<div class="show_from_input">
<label for="<%= dom_id(@todo, 'show_from') %>">Show from</label>
<label for="<%= dom_id(@todo, 'show_from') %>"><%= t('todos.show_from') %></label>
<%= date_field_tag("todo[show_from]", dom_id(@todo, 'show_from'), format_date(@todo.show_from), "tabindex" => 14) %>
<a href="#" id="<%= dom_id(@todo, 'show_from_x') %>" class="date_clear" title="Clear show from date">
<%= image_tag("delete_off.png", :alt => "Clear show from date") %>
<a href="#" id="<%= dom_id(@todo, 'show_from_x') %>" class="date_clear" title="<%= t('todos.clear_show_from_date') %>">
<%= image_tag("delete_off.png", :alt => "<%= t('todos.clear_show_from_date') %>") %>
</a>
</div>
<label class="predecessor_list_label" for="<%= dom_id(@todo, 'predecessor_list') %>">Depends on (separate with commas)</label>
<label class="predecessor_list_label" for="<%= dom_id(@todo, 'predecessor_list') %>"><%= t('todos.depends_on_separate_with_commas') %></label>
<%= text_field_tag 'predecessor_list', predecessor_list_text, :id => dom_id(@todo, 'predecessor_list'), :size => 30, :tabindex => 15 %>
<% if controller.controller_name == "project" || @todo.deferred? -%>
@ -49,12 +49,12 @@
<div class="submit_box">
<div class="widgets">
<button type="submit" class="positive" id="<%= dom_id(@todo, 'submit') %>" tabindex="16">
<%=image_tag("accept.png", :alt => "") %>
Update
<%= image_tag("accept.png", :alt => "") %>
<%= t('common.update') %>
</button>
<a href="#" class="negative">
<%=image_tag("cancel.png", :alt => "") %>
Cancel
<%= image_tag("cancel.png", :alt => "") %>
<%= t('common.cancel') %>
</a>
</div>
</div>

View file

@ -5,13 +5,13 @@
</span>
<% this_year = current_user.time.to_date.strftime("%Y").to_i
if parent_container_type == 'show_mobile' -%>
<p><label for="todo_done">Done?</label>&nbsp;<%= check_box_tag("done", 1, @todo && @todo.completed?, "tabindex" => 1) %></p>
<p><label for="todo_done"><%= t('todos.done') %></label>&nbsp;<%= check_box_tag("done", 1, @todo && @todo.completed?, "tabindex" => 1) %></p>
<% end -%>
<h2><label for="todo_description">Description</label></h2>
<h2><label for="todo_description"><%= t('common.description') %></label></h2>
<%= text_field( "todo", "description", "tabindex" => 2, "maxlength" => 100, "size" => 50) %>
<h2><label for="todo_notes">Notes</label></h2>
<h2><label for="todo_notes"><%= t('common.notes') %></label></h2>
<%= text_area( "todo", "notes", "cols" => 40, "rows" => 3, "tabindex" => 3) %>
<h2><label for="todo_context_id">Context</label></h2>
<h2><label for="todo_context_id"><%= t('common.context') %></label></h2>
<%= unless @mobile_from_context
collection_select( "todo", "context_id", @contexts, "id", "name", {}, {"tabindex" => 4} )
else
@ -19,10 +19,10 @@ else
@contexts, "id", "name", @mobile_from_context.id),
{"id" => :todo_context_id, :tabindex => 4} )
end %>
<h2><label for="todo_project_id">Project</label></h2>
<h2><label for="todo_project_id"><%= t('common.context') %></label></h2>
<%= unless @mobile_from_project
collection_select( "todo", "project_id", @projects, "id", "name",
{:include_blank => '--No project--'}, {"tabindex" => 5} )
{:include_blank => t('todos.no_project')}, {"tabindex" => 5} )
else
# manually add blank option since :include_blank does not work
# with options_from_collection_for_select
@ -30,11 +30,11 @@ else
@projects, "id", "name", @mobile_from_project.id),
{"id" => :todo_project_id, :tabindex => 5} )
end %>
<h2><label for="tag_list">Tags (separate with commas)</label></h2>
<h2><label for="tag_list"><%= t('todos.tags') %></label></h2>
<%= text_field_tag "tag_list", @tag_list_text, :size => 50, :tabindex => 6 %>
<h2><label for="todo_due">Due</label></h2>
<h2><label for="todo_due"><%= t('todos.due') %></label></h2>
<%= date_select("todo", "due", {:order => [:day, :month, :year],
:start_year => this_year, :include_blank => '--'}, :tabindex => 7) %>
<h2><label for="todo_show_from">Show from</label></h2>
<h2><label for="todo_show_from"><%= t('todos.show_from') %></label></h2>
<%= date_select("todo", "show_from", {:order => [:day, :month, :year],
:start_year => this_year, :include_blank => true}, :tabindex => 8) %>

View file

@ -3,12 +3,12 @@
<% if collapsible %>
<a href="#" class="container_toggle" id="toggle_deferred"><%= image_tag("collapse.png") %></a>
<% end %>
Hidden actions <%= append_descriptor ? append_descriptor : '' %>
<%= t('todos.hidden_actions') %> <%= append_descriptor ? append_descriptor : '' %>
</h2>
<div id="hiddenitems" class="items toggle_target">
<div id="hidden-empty-nd" style="display:<%= hidden.empty? ? 'block' : 'none'%>;">
<div class="message"><p>Currently there are no hidden actions found</p></div>
<div class="message"><p><%= t('todos.no_hidden_actions') %></p></div>
</div>
<%= render :partial => "todos/todo", :collection => hidden, :locals => { :parent_container_type => 'tag' } %>

View file

@ -1,5 +1,5 @@
<% if @not_done_todos.empty? -%>
<p>There are no incomplete actions</p>
<p><%= t('todos.no_incomplete_actions') %></p>
<% else -%>
<%= render :partial => "contexts/mobile_context", :collection => @contexts_to_show -%>
<% end -%>

View file

@ -12,7 +12,7 @@ parameters += "&_tag_name=#{@tag_name}" if @source_view == 'tag'
<span class="todo.descr"><%= h sanitize(successor.description) %></span>
<%= link_to_remote(
image_tag("blank.png", :title => "Remove dependency (does not delete the action)", :align => "absmiddle", :class => "delete_item"),
image_tag("blank.png", :title => t('todos.remove_dependency'), :align => "absmiddle", :class => "delete_item"),
{:url => {:controller => 'todos', :action => 'remove_predecessor', :id => successor.id},
:method => 'delete',
:with => "'#{parameters}&predecessor=#{predecessor.id}'",

View file

@ -8,11 +8,11 @@ else
end
if (todo.completed?) && todo.completed_at
result_string << "[Completed: " + format_date(todo.completed_at) + "] "
result_string << "["+ t('todos.completed') +": " + format_date(todo.completed_at) + "] "
end
if todo.due
result_string << "[Due: " + format_date(todo.due) + "] "
result_string << "[" + t('todos.due') + ": " + format_date(todo.due) + "] "
result_string << todo.description + " "
else
result_string << todo.description + " "

View file

@ -1,8 +1,8 @@
if @saved
# show update message
status_message = "Added #{@predecessor.description} as dependency."
status_message = t('todos.added_dependency', :dependency => @predecessor.description)
unless @original_state == 'pending'
status_message += " #{@todo.description} set to pending"
status_message += t('todos.set_to_pending', :task => @todo.description)
end
# remove successor from page
page[@todo].remove
@ -22,7 +22,7 @@ if @saved
page['tickler-empty-nd'].hide
page.replace "tickler", :partial => 'todos/deferred', :locals => { :deferred => @todo.project.deferred_todos,
:collapsible => false,
:append_descriptor => "in this project",
:append_descriptor => t('todos.append_in_this_project'),
:parent_container_type => 'project',
:pending => @todo.project.pending_todos }
end
@ -30,6 +30,6 @@ if @saved
page << 'enable_rich_interaction();'
page.notify :notice, status_message, 5.0
else
page.replace_html "status", content_tag("div", content_tag("h2", "Unable to add dependency"), "id" => "errorExplanation", "class" => "errorExplanation")
page.replace_html "status", content_tag("div", content_tag("h2", t('todos.unable_to_add_dependency')), "id" => "errorExplanation", "class" => "errorExplanation")
end

View file

@ -1,9 +1,9 @@
<div id="display_box">
<div class="container">
<h2>Due today</h2>
<h2><%= t('todos.calendar.due_today') %></h2>
<div id="empty_due_today" <%= "style=\"display:none\"" unless @due_today.empty? %>>
No actions due today
<%= t('todos.calendar.no_actions_due_today') %>
</div>
<div id="due_today">
<%= render :partial => "todos/todo", :collection => @due_today %>
@ -11,9 +11,9 @@
</div>
<div class="container">
<h2>Due in rest of this week</h2>
<h2><%= t('todos.calendar.due_this_week') %></h2>
<div id="empty_due_this_week" <%= "style=\"display:none\"" unless @due_this_week.empty? %>>
No actions due in rest of this week
<%= t('todos.no_actions_due_this_week') %>
</div>
<div id="due_this_week">
<%= render :partial => "todos/todo", :collection => @due_this_week %>
@ -21,9 +21,9 @@
</div>
<div class="container">
<h2>Due next week</h2>
<h2><%= t('todos.calendar.due_next_week') %></h2>
<div id="empty_due_next_week" <%= "style=\"display:none\"" unless @due_next_week.empty? %>>
No actions due in next week
<%= t('todos.calendar.no_actions_due_next_week') %>
</div>
<div id="due_next_week">
<%= render :partial => "todos/todo", :collection => @due_next_week %>
@ -31,9 +31,9 @@
</div>
<div class="container">
<h2>Due in rest of <%= Time.zone.now.strftime("%B") %> </h2>
<h2><%= t('todos.calendar.due_this_month', :month => Time.zone.now.strftime("%B")) %></h2>
<div id="empty_due_this_month" <%= "style=\"display:none\"" unless @due_this_month.empty? %>>
No actions due in rest of this month
<%= t('todos.calendar.no_actions_due_this_month') %>
</div>
<div id="due_this_month">
<%= render :partial => "todos/todo", :collection => @due_this_month %>
@ -41,9 +41,9 @@
</div>
<div class="container">
<h2>Due in <%= (Time.zone.now+1.month).strftime("%B") %> and later</h2>
<h2><%= t('todos.calendar.due_next_month_and_later', :month => (Time.zone.now+1.month).strftime("%B")) %></h2>
<div id="empty_due_after_this_month" <%= "style=\"display:none\"" unless @due_after_this_month.empty? %>>
No actions due after this month
<%= t('todos.calendar.no_actions_due_after_this_month') %>
</div>
<div id="due_after_this_month">
<%= render :partial => "todos/todo", :collection => @due_after_this_month %>
@ -53,5 +53,5 @@
</div><!-- End of display_box -->
<div class="input_box" id="input_box">
<p><%= link_to('<span class="feed">iCal</span>', {:format => 'ics', :token => current_user.token}, :title => "iCal feed" ) %>
- Get this calendar in iCal format</p>
- <%= t('todos.calendar.get_in_ical_format') %></p>
</div>

View file

@ -9,7 +9,7 @@ X-WR-CALNAME:Tracks
overdue_text = ""
if due_date.at_midnight < Time.zone.now.at_midnight
due_date = Time.zone.now
overdue_text = "Overdue: "
overdue_text = t('todos.overdue') +": "
end
modified = todo.updated_at || todo.created_at
%>BEGIN:VEVENT

View file

@ -1,4 +1,4 @@
unless @due_tickles.empty?
#TODO: why not just add the new items here in addition to notifying?
page.notify :notice, "#{@due_tickles.length} tickler items are now due - refresh the page to see them.", 5.0
page.notify :notice, t('todos.tickler_items_due', :count => @due_tickles.length), 5.0
end

View file

@ -1,25 +1,25 @@
<div id="display_box_projects">
<p>You have completed <%= pluralize @done_today.length, 'action' %> so far today.</p>
<p><%= t('todos.completed_today', :count => @due_tickles.nil? ? 0 : @due_tickles.length) %></p>
<div class="container">
<h2>Completed in the last 24 hours</h2>
<h2><%= t('todos.completed_last_day') %></h2>
<table class="next_actions" border="0">
<%= render :partial => "done", :collection => @done_today %>
</table>
</div>
<div class="container">
<h2>Completed in last 7 days</h2>
<h2><%= t('todos.completed_last_x_days', :count => 7) %></h2>
<table class="next_actions" border="0">
<%= render :partial => "done", :collection => @done_this_week %>
</table>
</div>
<div class="container">
<h2>Completed in the last 28 days</h2>
<h2><%= t('todos.completed_last_x_days', :count => 28) %></h2>
<table class="next_actions" border="0">
<%= render :partial => "done", :collection => @done_this_month %>
</table>
</div>
<p>Older completed items: <%= link_to( "Older than 31 days", done_archive_path ) %></p>
<p><%= t('todos.older_completed_items') %>: <%= link_to( t('todos.older_than_days', :count => 31), done_archive_path ) %></p>
</div><!-- End of display_box -->

View file

@ -1,8 +1,8 @@
<div id="display_box_projects">
<p>There <%= @done_archive.length == 1 ? 'is' : 'are' %> <%= pluralize @done_archive.length, 'completed action' %> in the archive.</p>
<p><%= t('todos.completed_in_archive', :count => @done_archive.length) %></p>
<div class="container">
<h2>Completed more than 31 days ago</h2>
<h2><%= t('todos.completed_more_than_x_days_ago', :count => 31) %></h2>
<table class="next_actions" cellspacing="5" cellpadding="0" border="0">
<%= render :partial => "done", :collection => @done_archive %>
</table>

View file

@ -1,10 +1,10 @@
if @saved
page.hide 'status'
status_message = 'Added new next action'
status_message += ' to tickler' if @todo.deferred?
status_message += ' in pending state' if @todo.pending?
status_message = 'Added new project / ' + status_message if @new_project_created
status_message = 'Added new context / ' + status_message if @new_context_created
status_message = t('todos.added_new_next_action')
status_message += t('todos.to_tickler') if @todo.deferred?
status_message += t('todos.in_pending_state') if @todo.pending?
status_message = t('todos.added_new_project') + ' / ' + status_message if @new_project_created
status_message = t('todos.added_new_context') + ' / ' + status_message if @new_context_created
page.notify :notice, status_message, 5.0
page['badge_count'].replace_html @down_count
page.send :record, "$('#todo-form-new-action').clearForm();$('#todo-form-new-action input:text:first').focus();"

View file

@ -1,10 +1,10 @@
if @saved
page.hide 'multiple_status'
status_message = 'Added new next action'
status_message = t('todos.added_new_next_action')
status_message += 's' if @todos.size > 1
status_message = 'Added new project / ' + status_message if @new_project_created
status_message = 'Added new context / ' + status_message if @new_context_created
status_message = t('todos.added_new_project') + ' / ' + status_message if @new_project_created
status_message = t('todos.added_new_context') + ' / ' + status_message if @new_context_created
page.notify :notice, status_message, 5.0
page['badge_count'].replace_html @down_count

View file

@ -16,10 +16,10 @@ if @saved
page.call "todoItems.ensureVisibleWithEffectAppear", item_container_id(@new_recurring_todo)
page.insert_html :bottom, item_container_id(@new_recurring_todo), :partial => 'todos/todo', :locals => { :todo => @new_recurring_todo, :parent_container_type => parent_container_type }
page.visual_effect :highlight, dom_id(@new_recurring_todo, 'line'), {'startcolor' => "'#99ff99'"}
page.notify :notice, "Action was deleted. Because this action is recurring, a new action was added", 6.0
page.notify :notice, t('todos.recurring_action_deleted'), 6.0
else
if @todo.recurring_todo.todos.active.count == 0
page.notify :notice, "There is no next action after the recurring action you just deleted. The recurrence is completed", 6.0 if @new_recurring_todo.nil?
page.notify :notice, t('todos.completed_recurrence_completed'), 6.0 if @new_recurring_todo.nil?
end
end
end
@ -32,5 +32,5 @@ if @saved
page.visual_effect :highlight, dom_id(t, 'line'), {'startcolor' => "'#99ff99'", :duration => 2}
end
else
page.notify :error, "There was an error deleting the item #{@todo.description}", 8.0
page.notify :error, t('todos.error_deleting_item', :description => @todo.description), 8.0
end

View file

@ -1 +1 @@
page.notify :error, @error_message || "An error occurred on the server.", 8.0
page.notify :error, @error_message || t('common.server_error'), 8.0

View file

@ -1,7 +1,7 @@
<div id="display_box">
<div id="tickler-empty-nd" style="display:<%= (@count == 0) ? 'block' : 'none'%>;">
<div class="message"><p>Currently there are no deferred actions.</p></div>
<div class="message"><p><%= t('todos.no_deferred_actions') %></p></div>
</div>
<%= render :partial => "contexts/context", :collection => @contexts,

View file

@ -1,5 +1,5 @@
<% if @count == 0 -%>
<div class="message"><p>Currently there are no deferred actions.</p></div>
<div class="message"><p><%= t('todos.no_deferred_actions') %></p></div>
<% end -%>
<%= render :partial => "contexts/mobile_context", :collection => @contexts,
:locals => { :collapsible => true } -%>

View file

@ -14,6 +14,8 @@ class Rails::Configuration
attr_accessor :action_web_service
end
Encoding.default_external = Encoding::UTF_8 if RUBY_VERSION > "1.9"
Rails::Initializer.run do |config|
# Skip frameworks you're not going to use
# config.frameworks -= [ :action_web_service, :action_mailer ]

716
config/locales/de.yml Normal file
View file

@ -0,0 +1,716 @@
de:
date:
formats:
default: "%d.%m.%Y"
short: "%e. %b"
long: "%e. %B %Y"
only_day: "%e"
day_names: [Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag]
abbr_day_names: [So, Mo, Di, Mi, Do, Fr, Sa]
month_names: [~, Januar, Februar, März, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember]
abbr_month_names: [~, Jan, Feb, Mär, Apr, Mai, Jun, Jul, Aug, Sep, Okt, Nov, Dez]
order: [ :day, :month, :year ]
time:
formats:
default: "%A, %d. %B %Y, %H:%M Uhr"
short: "%d. %B, %H:%M Uhr"
long: "%A, %d. %B %Y, %H:%M Uhr"
time: "%H:%M"
am: "vormittags"
pm: "nachmittags"
datetime:
distance_in_words:
half_a_minute: 'eine halbe Minute'
less_than_x_seconds:
zero: 'weniger als 1 Sekunde'
one: 'weniger als 1 Sekunde'
other: 'weniger als {{count}} Sekunden'
x_seconds:
one: '1 Sekunde'
other: '{{count}} Sekunden'
less_than_x_minutes:
zero: 'weniger als 1 Minute'
one: 'weniger als eine Minute'
other: 'weniger als {{count}} Minuten'
x_minutes:
one: '1 Minute'
other: '{{count}} Minuten'
about_x_hours:
one: 'etwa 1 Stunde'
other: 'etwa {{count}} Stunden'
x_days:
one: '1 Tag'
other: '{{count}} Tage'
about_x_months:
one: 'etwa 1 Monat'
other: 'etwa {{count}} Monate'
x_months:
one: '1 Monat'
other: '{{count}} Monate'
about_x_years:
one: 'etwa 1 Jahr'
other: 'etwa {{count}} Jahre'
over_x_years:
one: 'mehr als 1 Jahr'
other: 'mehr als {{count}} Jahre'
prompts:
second: "Sekunden"
minute: "Minuten"
hour: "Stunden"
day: "Tag"
month: "Monat"
year: "Jahr"
number:
format:
precision: 2
separator: ','
delimiter: '.'
currency:
format:
unit: '€'
format: '%n%u'
separator:
delimiter:
precision:
percentage:
format:
delimiter: ""
precision:
format:
delimiter: ""
human:
format:
delimiter: ""
precision: 1
storage_units:
# Storage units output formatting.
# %u is the storage unit, %n is the number (default: 2 MB)
format: "%n %u"
units:
byte:
one: "Byte"
other: "Bytes"
kb: "KB"
mb: "MB"
gb: "GB"
tb: "TB"
support:
array:
words_connector: ", "
two_words_connector: " und "
last_word_connector: " und "
activerecord:
errors:
template:
header:
one: "Konnte dieses {{model}} Objekt nicht speichern: 1 Fehler."
other: "Konnte dieses {{model}} Objekt nicht speichern: {{count}} Fehler."
body: "Bitte überprüfen Sie die folgenden Felder:"
models:
project:
attributes:
name:
blank: "Projekt muss einen Namen haben"
too_long: "Projektname muss weniger als 256 Zeichen haben"
taken: "existiert bereits"
messages:
inclusion: "ist kein gültiger Wert"
exclusion: "ist nicht verfügbar"
invalid: "ist nicht gültig"
confirmation: "stimmt nicht mit der Bestätigung überein"
accepted: "muss akzeptiert werden"
empty: "muss ausgefüllt werden"
blank: "muss ausgefüllt werden"
too_long: "ist zu lang (nicht mehr als {{count}} Zeichen)"
too_short: "ist zu kurz (nicht weniger als {{count}} Zeichen)"
wrong_length: "hat die falsche Länge (muss genau {{count}} Zeichen haben)"
taken: "ist bereits vergeben"
not_a_number: "ist keine Zahl"
greater_than: "muss größer als {{count}} sein"
greater_than_or_equal_to: "muss größer oder gleich {{count}} sein"
equal_to: "muss genau {{count}} sein"
less_than: "muss kleiner als {{count}} sein"
less_than_or_equal_to: "muss kleiner oder gleich {{count}} sein"
odd: "muss ungerade sein"
even: "muss gerade sein"
attributes:
user:
first_name: "Vorname"
last_name: "Nachname"
todo:
predecessors: "Hängt ab von"
due: "F&auml;llig"
show_from: "Zeigen ab dem"
project: "Projekt"
description: "Beschreibung"
notes: "Notizen"
context: "Kontext"
preference:
week_starts: "Woche startet am"
show_project_on_todo_done: "Zur Projektseite wechseln, wenn To-Do abgeschlossen"
refresh: "Aktualisierungsintverall (in Minuten)"
mobile_todos_per_page: "Aufgaben pro Seite (Mobile Version)"
sms_email: "Per E-Mail"
sms_context: "Standard-E-Mail-Kontext"
project:
description: "Beschreibung"
default_context_name: "Standard Kontext"
default_tags: "Standard Tags"
models:
project:
feed_title: "Tracks-Projekte"
feed_description: "Listet alle Projekte für {{username}} auf"
preference:
due_styles: ['Fällig in ___ Tagen', 'Fällig am _______']
user:
error_context_not_associated: "Kontext-ID {{context}} nicht mit Benutzer-ID {{user}} verknüpft."
error_project_not_associated: "Projekt-ID {{project}} nicht mit User-ID {{user}} verknüpft."
todo:
error_date_must_be_future: "muss ein Datum in der Zukunft sein"
common:
update: "Aktualisieren"
logout: "Abmelden"
cancel: "Abbrechen"
project: "Projekt"
projects: "Projekte"
context: "Kontext"
action: "Aktion"
actions: "Aktionen"
server_error: "Auf dem Server ist ein Fehler aufgetreten."
contexts: "Kontexte"
numbered_step: "Schritt {{number}}"
errors_with_fields: "Mit folgenden Feldern sind Probleme aufgetreten:"
back: "Zurück"
create: "Erstellen"
go_back: "Zurück"
search: "Suchen"
none: "Keine"
description: "Beschreibung"
notes: "Notizen"
sort:
sort: "Sortieren"
alphabetically: "Alphabetisch"
alphabetically_title: "Projekte alphabetisch sortieren"
by_task_count: "Nach Anzahl der Aufgaben"
by_task_count_title: "Nach Anzahl der Aufgaben sortieren"
drag_handle: "Verschieben"
optional: "optional"
contexts:
status_hidden: "Kontext ist versteckt"
status_active: "Kontext ist aktiv"
no_actions: "Momentan gibt es keine unvollständigen Aufgaben in diesem Kontext"
context_name: "Kontextname"
update_status_message: "Kontextname wurde geändert"
save_status_message: "Kontext gespeichert"
last_completed_in_context: "in diesem Kontext (letzte {{number}})"
add_context: "Kontext hinzufügen"
context_hide: "Auf Startseite ausblenden?"
hide_form: "Formular verstecken"
visible_contexts: "Sichtbare Kontexte"
hidden_contexts: "Versteckte Kontexte"
context_deleted: "Gelöschter Kontext '{{name}}'"
no_contexts_active: "Derzeit gibt es keine aktiven Kontexte"
no_contexts_hidden: "Derzeit gibt es keine versteckten Kontexte"
hide_form_link_title: "Verstecktes, neues Kontextformular"
data:
import_errors: "Beim Import sind Fehler aufgetreten."
import_successful: "Import war erfolgreich."
feedlist:
legend: "Legende:"
rss_feed: "RSS-Feed"
plain_text_feed: "Plain-Text-Feed"
ical_feed: "iCal-Feed"
notice_incomplete_only: "Hinweis: Alle Feeds zeigen nur Aufgaben, die noch nicht als erledigt markiert wurden."
last_fixed_number: "Die letzten {{number}} Aufgaben"
all_actions: "Alle Aufgaben"
actions_due_today: "Heute oder früher fällig"
actions_due_next_week: "In den nächsten 7 Tagen oder früher fällige Aufgaben"
actions_completed_last_week: "In den letzten 7 Tagen abgeschlossene Aufgaben"
all_contexts: "Alle Kontexte"
all_projects: "Alle Projekte"
active_projects_wo_next: "Aktive Projekte ohne ausstehende Aufgaben"
active_starred_actions: "Alle markierten, aktiven Aufgaben"
projects_and_actions: "Aktive Projekte und deren Aufgaben"
context_centric_actions: "Feeds für unvollständige Aufgaben in einem bestimmten Kontext"
context_needed: "Es muss mindestens ein Kontext existieren, bevor ein Feed abonniert werden kann."
choose_context: "Kontext für den Feed wählen"
select_feed_for_context: "Feed für diesen Kontext auswählen"
project_centric: "Feeds für unvollständige Aufgaben in einem bestimmten Kontext"
project_needed: "Es muss mindestens ein Projekt existieren, bevor ein Feed abonniert werden kann."
choose_project: "Projekt für den Feed wählen"
select_feed_for_project: "Feed für dieses Projekt auswählen"
integrations:
opensearch_description: "In Tracks suchen"
applescript_next_action_prompt: "Beschreibung der nächsten Aufgabe:"
applescript_success_before_id: "Nächste neue Aufgabe mit ID"
applescript_success_after_id: "erstellt"
gmail_description: "Gadget, um Tracks als Gadget zu Googlemail hinzuzufügen"
layouts:
toggle_notes: "Notizen umschalten"
toggle_notes_title: "Alle Notizen umschalten"
navigation:
home: "Start"
home_title: "Start"
starred: "Markiert"
starred_title: "Markierte Aufgaben betrachten"
projects_title: "Projekte"
tickler: "Notizbuch"
tickler_title: "Notizbuch"
organize: "Organisieren"
contexts_title: "Kontexte"
notes_title: "Alle Notizen anzeigen"
recurring_todos: "Sich wiederholende To-Dos"
recurring_todos_title: "Sich wiederholende To-Dos verwalten"
calendar: "Kalender"
completed_tasks: "Erledigt"
completed_tasks_title: "Vollständig"
feeds: "Feeds"
feeds_title: "Liste der verfügbaren Feeds anzeigen"
stats: "Statistiken"
stats_title: "Statistiken anzeigen"
view: "Betrachten"
calendar_title: "Kalender mit überfälligen Aufgaben"
preferences: "Einstellungen"
preferences_title: "Meine Einstellungen"
export_title: "Daten importieren und exportieren"
export: "Export"
manage_users: "Benutzer verwalten"
manage_users_title: "Benutzer hinzufügen oder entfernen"
integrations_: "Tracks integrieren"
api_docs: "REST API Docs"
search: "Alle Einträge durchsuchen"
next_actions_rss_feed: "RSS-Feed kommende Aufgaben"
mobile_navigation:
new_action: "0-Neue Aufgabe"
home: "1-Home"
contexts: "2-Kontexte"
projects: "3-Projekte"
starred: "4-Markiert"
logout: "Abmelden"
tickler: "Notizbuch"
feeds: "Feeds"
login:
successful: "Anmeldung erfolgreich. Willkommen zurück!"
unsuccessful: "Anmeldung war nicht erfolgreich."
log_in_again: "Erneut anmelden."
session_time_out: "Sitzung abgelaufen. Bitte {{link}}"
logged_out: "Sie wurden von Tracks abgemeldet."
session_will_expire: "Sitzung wird nach {{hours}} Stunde(n) der Inaktivität ablaufen."
session_will_not_expire: "Sitzung wird nicht ablaufen."
successful_with_session_info: "Anmeldung erfolgreich:"
cas_username_not_found: "Sorry, aber es existiert kein Benutzer mit dem CAS-Benutzernamen ({{username}})"
openid_identity_url_not_found: "Sorry, aber es existiert kein Benutzer mit der Identitäts-URL ({{identity_url}})"
account_login: "Account-Anmeldung"
please_login: "Bitte melde dich an, um Tracks zu nutzen"
user_no_expiry: "Angemeldet bleiben"
sign_in: "Anmeldung"
cas_logged_in_greeting: "Hallo, {{username}}! Du bist authentifiziert."
cas_no_user_found: "Hallo, {{username}}! Du hast leider keinen Tracks-Account."
cas_create_account: "Wenn du die Anfrage fortsetzen möchtest, klicke bitte hier: {{signup_link}}"
cas_signup_link: "Account beantragen"
cas_login: "CAS-Anmeldung"
login_with_openid: "Mit einer OpenID anmelden"
login_standard: "zurück zum Standard-Login"
login_cas: "zum CAS gehen"
option_separator: "oder,"
mobile_use_openid: "…oder mit einer OpenID anmelden"
notes:
note_location_link: "In:"
note_header: "Notiz {{id}}"
note_link_title: "Notiz {{id}} anzeigen"
delete_note_title: "Diese Notiz löschen"
delete_confirmation: "Bist du sicher, dass du die Notiz '{{id}}' löschen möchtest?"
edit_item_title: "Eintrag bearbeiten"
show_note_title: "Notiz anzeigen"
deleted_note: "Notiz '{{id}}' löschen"
no_notes_available: "Derzeit gibt es keine Notizen: füge Notizen von der jeweiligen Projektseite hinzu."
preferences:
title: "Deine Einstellungen"
show_number_completed: "Zeige {{number}} erledigte Einträge"
staleness_starts_after: "Staleness starts after {{days}} days"
sms_context_none: "Keine"
edit_preferences: "Einstellungen bearbeiten"
token_header: "Dein Token"
token_description: "Token (für die Verwendung in Feeds und der API)"
generate_new_token: "Neues Token generieren"
generate_new_token_confirm: "Bist du sicher? Wenn du ein neues Token generierst, wird dies das alte Token ersetzen und jegliche externe Nutzung stören, die das alte Token verwendet."
authentication_header: "Deine Authentifizierung"
current_authentication_type: "Dein Authentifizierungsart ist {{auth_type}}"
change_authentication_type: "Authentifzierungsart ändern"
change_password: "Passwort ändern"
open_id_url: "Deine OpenID-URL lautet:"
change_identity_url: "Ändere deine Identitäts-URL"
page_title: "TRACKS::Einstellungen"
page_title_edit: "TRACKS::Einstellungen ändern"
projects:
status_project_name_changed: "Projektname geändert"
default_tags_removed_notice: "Standard-Tags entfernt"
set_default_tags_notice: "Standard-Tags des Projekts auf {{default_tags}} setzen"
default_context_removed: "Standard-Kontext entfernt"
default_context_set: "Standard-Kontext des Projekts auf {{default_context}} gesetzt"
project_saved_status: "Projekt gespeichert"
no_notes_attached: "Im Augenblick sind keine Notizen mit diesem Projekt verknüpft."
add_note: "Notiz hinzufügen"
todos_append: "an dieses Projekt"
add_note_submit: "Notiz hinzufügen"
deferred_actions: "Aufgeschobene Aufgaben für dieses Projekt"
deferred_actions_empty: "Es gibt keine aufgeschobenen Aufgaben für dieses Projekt"
completed_actions: "Erledigte Aufgaben für dieses Projekt"
completed_actions_empty: "Es gibt keine erledigten Aufgaben für dieses Projekt"
notes: "Notizen"
notes_empty: "Es gibt keine Notizen für dieses Projekt"
settings: "Einstellungen"
state: "Dieses Projekt ist {{state}}"
active_projects: "Aktive Projekte"
hidden_projects: "Versteckte Projekte"
completed_projects: "Abgeschlossene Projekte"
page_title: "TRACKS::Projekt: {{project}}"
list_projects: "TRACKS::Projektliste"
no_default_context: "Dieses Projekt hat keinen Standard-Kontext"
default_context: "Der Standard-Kontext dieses Projektes ist {{context}}"
project_state: "Projekt ist {{state}}"
hide_new_project_form: "Formular verstecken"
hide_form: "Fomular verstecken"
add_project: "Projekt hinzuf&uuml;gen"
to_new_project_page: "Zu neuem Projekt weiterleiten"
delete_project_title: "Projekt l&ouml;schen"
delete_project: "Projekt l&ouml;schen"
edit_project_title: "Projekt bearbeiten"
states:
active: "Aktiv"
active_plural: "Aktive"
completed: "Erledigt"
completed_plural: "Erledigte"
hidden: "Versteckt"
hidden_plural: "Versteckte"
visible: "Sichtbar"
visible_plural: "Sichtbare"
search:
no_results: "Die Suche ergab kein Ergebnis."
todos_matching_query: "Todos entsprechen der Suche"
projects_matching_query: "Projekte entsprechen der Suche"
notes_matching_query: "Notizen entsprechen der Suche"
contexts_matching_query: "Kontexte entsprechen der Suche"
tags_matching_query: "Tags entsprechen der Suche"
shared:
hide_action_form_title: "Formular für neue Aufgaben verstecken"
hide_form: "Formular verstecken"
toggle_multi_title: "Zwischen Einzel- und Mehrfachformular für neue Aufgaben umschalten"
toggle_multi: "Mehrere neue Aufgabeneinträge hinzufügen"
separate_tags_with_commas: "mit Kommas trennen"
add_action: "Aufgabe hinzufügen"
multiple_next_actions: "Mehrere neue Aufgaben (eine pro Zeile)"
project_for_all_actions: "Projekt für alle Aufgaben"
context_for_all_actions: "Kontext für alle Aufgaben"
tags_for_all_actions: "Tags für alle Aufgaben (mit Kommas trennen)"
add_actions: "Aufgaben hinzufügen"
sidebar:
list_empty: "Keine"
list_name_active_projects: "Aktive Projekte"
list_name_active_contexts: "Aktive Kontexte"
list_name_hidden_projects: "Versteckte Projekte"
list_name_completed_projects: "Abgeschlossene Projekte"
list_name_hidden_contexts: "Versteckte Kontexte"
stats:
tod30_legend:
time_of_day: "Tageszeit"
number_of_actions: "Anzahl Aufgaben"
tod30: "Tageszeit (letzte 30 Tage)"
no_actions_selected: "Es sind keine Aufgaben ausgewählt."
totals: "Ingesamt"
tags: "Tags"
more_stats_will_appear: "Weitere Statistiken werden verfügbar, wenn einige Aufgaben hinzugefügt wurden."
spread_of_actions_for_all_context: "Aufgabenverteilung aller Kontexte"
spread_of_running_actions_for_visible_contexts: "Verteilung der laufenden Aufgaben aller sichtbaren Kontexte"
current_running_time_of_incomplete_visible_actions: "Aktuelle Laufzeit unvollständiger sichtbarer Aufgaben"
running_time_legend:
actions: "Aufgaben"
percentage: "Prozentsatz"
weeks: "Vergangene Zeit einer Aktion (Wochen). Klick auf eine Leiste für mehr Informationen."
time_of_day: "Tageszeit (alle Aktionen)"
time_of_day_legend:
number_of_actions: "Anzahl Aufgaben"
time_of_day: "Tageszeit"
labels:
created: "Erstellt"
completed: "Erledigt"
avg_created: "Durchschnittlich erstellt"
avg_completed: "Durchschnittlich fertiggestellt"
month_avg_created: "{{months}} Monat durchschnittlich erstellt"
month_avg_completed: "{{months}} Monat durchschnittlich fertig gestellt"
click_to_update_actions: "Klicke auf eine Leiste in der Grafik um die Aktionen unten zu aktualisieren."
click_to_return: "Klick auf {{link}} um zur Statistikseite zurückzukehren."
click_to_return_link: "hier"
click_to_show_actions_from_week: "Klick auf {{link}} um die Aktionen von Woche {{week}} und danach anzuzeigen."
running_time_all: "Aktuelle Laufzeit aller unvollständigen Aktionen."
running_time_all_legend:
actions: "Aktionen"
percentage: "Prozentsatz"
running_time: "Laufzeit einer Aktion (Wochen). Klick auf eine Leiste für mehr Informationen."
actions_last_year: "Aktionen im letzten Jahr"
actions_last_year_legend:
number_of_actions: "Anzahl Aktionen"
months_ago: "Monate zuvor"
other_actions_label: "(andere)"
action_selection_title: "TRACKS::Aktionsauswahl"
actions_selected_from_week: "Aktionen ausgewählt ab Woche"
actions_further: "und danach"
totals_project_count: "Du hast {{count}} Projekte."
totals_active_project_count: "Von diesen sind {{count}} aktive Projekte"
totals_hidden_project_count: "{{count}} sind versteckt"
totals_completed_project_count: "und {{count}} sind abgeschlossene Projekte."
totals_context_count: "Du hast {{count}} Kontexte."
totals_visible_context_count: "Von diesen sind {{count}} sichtbare Kontexte"
totals_hidden_context_count: "und {{count}} sind versteckte Kontexte."
totals_first_action: "Seit deiner ersten Aktion am {{date}}"
totals_action_count: "hattest du insgesamt {{count}} Aktionen"
totals_actions_completed: "{{count}} davon sind abgeschlossen."
totals_incomplete_actions: "Du hast {{count}} unvollständige Aktionen"
totals_deferred_actions: "von denen {{count}} im Notizbuch zurückgestellt sind"
totals_blocked_actions: "{{count}} hängen vom Abschluss anderer Aktionen ab."
totals_tag_count: "Du hast {{count}} Tags in Aktionen."
totals_unique_tags: "Von diesen Tags sind {{count}} einmalig.."
actions_avg_completion_time: "Durchschnittlich hast du {{count}} Tage gebraucht, um eine Aktion abzuschliessen."
actions_min_max_completion_days: "Das Minimum/Maximum an Tagen einer Vervollständigung ist {{min}}/{{max}}."
actions_min_completion_time: "Die minimale Zeit beträgt {{time}}."
actions_actions_avg_created_30days: "In den letzten 30 Tagen hast du im Durchschnitt {{count}} Aktionen erstellt"
actions_avg_completed_30days: "und {{count}} durchschnittlich davon erledigt."
actions_avg_created: "In den letzten 12 Monaten hast du im Durchschnitt {{count}} Aktionen erstellt"
actions_avg_completed: "und {{count}} durchschnittlich davon monatlich erledigt"
tag_cloud_title: "Tag-Cloud aller Aktionen"
tag_cloud_description: "Diese Tag-Cloud beinhaltet Tags aller Aktionen (abgeschlossen, nicht abgeschlossen, sichtbar und/oder unsichtbar)"
no_tags_available: "keine Tags verfügbar"
tag_cloud_90days_title: "Tag-Cloud-Aktionen in den letzten 90 Tagen"
tag_cloud_90days_description: "Diese Tag-Cloud beinhaltet Tags der Aktionen, die in den letzten 90 Tagen erstellt oder abgeschlossen wurden."
top10_projects: "Top 10 aller Projekte"
top10_projects_30days: "Top-10-Projekt der letzten 30 Tage"
top10_longrunning: "Top 10 der am längsten laufenden Projekte"
top5_contexts: "Top 5 aller Kontexte"
top5_visible_contexts_with_incomplete_actions: "Top 5 der sichtbaren Kontexte mit unvollständigen Aktionen"
actions_30days_title: "_Aktionen der letzten 30 Tage"
actions_lastyear_title: "Aktionen der letzten 12 Monate"
legend:
number_of_actions: "Anzahl Aktionen"
months_ago: "Monate zuvor"
number_of_days: "Anzahl vergangene Tage"
day_of_week: "Wochentag"
actions: "Aktionen"
percentage: "Prozentsatz"
running_time: "Laufzeit einer Aktion (Wochen)"
actions_day_of_week_title: "Wochentag (alle Aktionen)"
actions_dow_30days_title: "Wochentag (letzte 30 Tage)"
action_completion_time_title: "Fertigstellungszeit (alle abgeschlossenen Aktionen)"
todos:
action_saved: "Aktion gespeichert"
recurring_action_saved: "Wiederkehrende Aktion gespeichert"
action_saved_to_tickler: "Aktion im Notizbuch gespeichert"
added_new_project: "Neues Projekt hinzugefügt"
added_new_context: "Neuer Kontext hinzugefügt"
recurrence_completed: "Nach dieser wiederkehrenden Aktion, die du gerade abgeschlossen hast, folgt keine mehr. Die Wiederholung endet hiermit"
tagged_with: "getagged mit &lsquo;{{tag_name}}&rsquo;"
no_actions_found: "Keine Aktionen gefunden"
no_actions_with: "Im Augenblick gibt es keine unvollständigen Aktionen mit dem Tag '{{tag_name}}'"
removed_predecessor: "{{successor}} entfernt als Abhängigkeit von {{predecessor}}."
error_removing_dependency: "Beim Entfernen der Abhängigkeit ist ein Fehler aufgetreten"
deferred_actions_with: "Zurückgestellte Aktionen mit dem Tag '{{tag_name}}'"
no_deferred_actions_with: "Keine zurückgestellten Aktionen mit dem Tag '{{tag_name}}'"
completed_actions_with: "Abgeschlossene Aktionen mit dem Tag {{tag_name}}"
no_completed_actions_with: "Keine abgeschlossenen Aktionen mit dem Tag '{{tag_name}}'"
next_action_description: "Beschreibung der nächsten Aktion"
notes: "Notizen"
new_related_todo_created: "Eine neue To-Do wurde hinzugefügt, die zu dieser wiederkehrenden To-Do gehört"
error_completing_todo: "Beim Abschliessen/Aktivieren der wiederkehrenden To-Do {{description}} ist ein Fehler aufgetreten"
recurring_todos: "Wiederkehrende To-Dos"
no_recurring_todos: "Im Augenblick gibt es keine wiederkehrenden To-Dos"
completed_recurring: "Abgeschlossene wiederkehrende To-Dos"
no_completed_recurring: "Im Augenblick gibt es keine abgeschlossenen wiederkehrenden To-Dos"
add_new_recurring: "Füge eine neue wiederkehrende Aktion hinzu"
recurring_deleted_success: "Die wiederkehrende Aktion wurde erfolgreich gelöscht."
error_deleting_recurring: "Beim Löschen der wiederkehrenden To-Do {{description}} ist ein Fehler aufgetreten"
recurrence_period: "Wiederholungszeitraum"
action_marked_complete: "Die Aktion <strong>'{{description}}'</strong> wurde als <strong>{{completed}}</strong> markiert."
action_marked_complete_error: "Die Aktion <strong>'{{description}}'</strong> wurde aufgrund eines Fehlers NICHT als <strong>{{completed}}</strong> markiert."
recurrence:
daily: "Täglich"
weekly: "Wöchentlich"
monthly: "Monatlich"
yearly: "Jährlich"
starts_on: "Beginnt am"
ends_on: "Endet am"
no_end_date: "Kein Enddatum"
ends_on_number_times: "Endet nach {{number}} Mal"
ends_on_date: "Endet am {{date}}"
daily_options: "Einstellungen für sich täglich wiederholenden Aktionen"
daily_every_number_day: "Alle {{number}} Tage"
every_work_day: "Jeden Arbeitstag"
weekly_options: "Einstellungen für sich wöchentlich wiederholende Aktionen"
weekly_every_number_week: "Kehrt jede {{number}}. Woche wieder am"
monthly_options: "Einstellungen für sich monatlich wiederholende Aktionen"
day_x_on_every_x_month: "Tag {{day}} in jedem {{month}}. Monat"
monthly_every_xth_day: "Der {{day}} {{day_of_week}} eines jeden {{month}}. Monats"
yearly_options: "Einstellungen für sich jährlich wiederholende Aktionen"
yearly_every_x_day: "Jeden {{day}}. {{month}} "
yearly_every_xth_day: "Den {{day}} {{day_of_week}} des {{month}}"
recurrence_on_options: "Setze Wiederholung auf"
recurrence_on_due_date: "Das Datum der To-Do ist verstrichen."
show_options: "To-Do anzeigen"
show_option_always: "immer"
show_days_before: "{{days}} Tage bevor die To-Do fällig ist"
from_tickler: "the date todo comes from tickler (no due date set)"
delete_recurring_action: "wiederkehrende Aktion '{{description}}' löschen"
star_action_with_description: "Aktion '{{description}}' markieren"
star_action: "Aktion markieren"
delete_action: "Aktion löschen"
edit_action: "Aktion bearbeiten"
edit_action_with_description: "Aktion '{{description}}' bearbeiten"
confirm_delete: "Bist du sicher, dass du die Aktion '{{description}}' löschen möchtest?"
delete: "Löschen"
edit: "Bearbeiten"
defer_date_after_due_date: "Zurückstellungsdatum nach Ablaufdatum. Bitte passe das Ablaufdatum an, dass es vor dem Zurückstellungsdatum liegt."
convert_to_project: "In Projekt umwandeln"
blocked_by: "Blockiert durch {{predecessors}"
depends_on: "Hängt ab von"
pending: "Ausstehend"
drag_action_title: "Auf andere Aktion ziehen, um sie als Abhängigkeit zu definieren"
action_due_on: "(Aktion fällig am {{date}})"
scheduled_overdue: "Planmäßig angezeigt vor {{days}} Tagen"
show_today: "Heute anzeigen"
show_tomorrow: "Morgen anzeigen"
show_on_date: "Anzeigen am {{date}}"
show_in_days: "Anzeigen in {{days}} Tagen"
defer_x_days:
one: "Einen Tag zurückstellen"
other: "{{count}} Tage zurückstellen"
has_x_pending:
one: "Hat eine ausstehende Aktion"
other: "Hat {{count}} ausstehende Aktionen"
recurring_actions_title: "TRACKS::Wiederkehrende Aktionen"
next_action_needed: "Es muss mindestens eine folgende Aktion angelegt werden"
context_changed: "Kontext zu {{name}} gewechselt"
action_deleted_success: "Die n&auml;chste Aktion erfolgreich gel&ouml;scht"
action_deleted_error: "Fehler beim L&ouml;schen der Aufgabe"
completed_tasks_title: "TRACKS::Erledigte Aufgaben"
archived_tasks_title: "TRACKS::Archivierte erledigte Aufgaben"
deferred_tasks_title: "TRACKS::Notizbuch"
tagged_page_title: "TRACKS::Als '{{tag_name}}' markiert"
calendar_page_title: "TRACKS::Kalender"
next_actions_title: "TRACKS::Weitere Aufgaben"
next_actions_description: "Filter:"
next_actions_title_additions:
due_today: "heute f&auml;llig"
due_within_a_week: "diese Woche f&auml;llig"
completed: "Aufgaben erledigt"
next_actions_description_additions:
due_date: "mit einem Datum {{due_date}} oder fr&uuml;her"
completed: "In den letzten {{count}} Tagen"
feed_title_in_context: "im Kontext '{{context}}'"
feed_title: "Aufgaben"
feed_title_in_project: "im Projekt '{{project}}'"
list_incomplete_next_actions_with_limit: "Zeige die letzten {{count}} unerledigten Folge-Aufgaben"
list_incomplete_next_actions: "Unerledigte Folge-Aufgaben anzeigen"
task_list_title: "TRACKS::Aufgaben anzeigen"
mobile_todos_page_title: "Alle Aufgaben"
feeds:
due: "F&auuml;llig: {{date}}"
completed: "Erledigt: {{date}}"
deferred_pending_actions: "Aufgeschobene/ausstehende Aufgaben"
no_deferred_pending_actions: "Momentan sind keine aufgeschobenen oder ausstehenden Aufgaben vorhanden."
completed_actions: "Erledigte Aufgaben"
no_completed_actions: "Momentan sind keine erledigten Aufgaben vorhanden."
was_due_on_date: "war am {{date}} f&auml;llig"
tags: "Tags (Komma-separiert)"
clear_due_date: "F&auml;lligkeitsdatum leeren"
show_from: "Anzeigen ab dem"
clear_show_from_date: "Datum leeren"
depends_on_separate_with_commas: "H&auml;ngt ab von (Komma-separiert)"
done: "Erledigt?"
no_project: "--Kein Projekt--"
due: "F&auml;llig"
hidden_actions: "Verstecke Aufgaben"
no_hidden_actions: "Momentan sind keine versteckten Aufgaben vorhanden"
no_incomplete_actions: "Es gibt keine unerledigten Aufgaben"
remove_dependency: "Abh&auml;ngigkeit l&ouml;schen (l&ouml;scht nicht die Aufgabe)"
completed: "Erledigt"
added_dependency: "{{dependency}} als Abh&auml;ngigkeit hinzugef&uuml;gt."
set_to_pending: "{{task}} als ausstehend markiert"
append_in_this_project: "in diesem Projekt"
unable_to_add_dependency: "Abh&auml;ngigkeit nicht hinzuf&uuml;gbar"
calendar:
due_today: "Heute zu erledigen"
no_actions_due_today: "Heute sind keine Aufgaben f&auml;llig"
due_this_week: "Die restliche Woche zu erledigen"
due_next_week: "N&auml;chste Woche f&auml;llig"
no_actions_due_next_week: "Keine Aufgaben f&uuml;r die kommende Woche"
due_this_month: "Im {{month}} f&auml;llig"
no_actions_due_this_month: "Keine Aktionen f&uuml;r den Rest des Monats"
due_next_month_and_later: "Im {{month}} und sp&auml;ter f&auml;llig"
no_actions_due_after_this_month: "Nach diesem Monat sind keine Aufgaben f&auml;llig"
get_in_ical_format: "Diesen Kalender im iCal Format herunterladen"
no_actions_due_this_week: "Keine zu erledigenden Aufgaben f&uuml;r den Rest der Woche"
overdue: "&Uuml;berf&auml;llig"
tickler_items_due:
one: "Ein Notizbuch-Eintrag ist nun f&auml;llig - lade die Seite neu, um sie zu sehen."
other: "{{count}} Notizbuch-Eintr&auml;ge sind nun f&auml;llig - lade die Seite neu, um sie zu sehen."
completed_today:
one: "Du hast heute bereits eine Aufgabe erledigt."
other: "Du hast heute bereits {{count}} Aufgaben erledigt."
completed_last_day: "In den letzten 24 Stunden erledigt"
completed_last_x_days: "In den letzten {{count}} Tagen erledigt"
older_completed_items: "&Auml;ltere erledigte Aufgaben"
older_than_days: "&Auml;lter als {{count}} Tage"
completed_in_archive:
one: "Es befindet sich eine erledigte Aufgabe im Archiv."
other: "Es befinden sich {{count}} erledigte Aufgaben im Archiv."
completed_more_than_x_days_ago: "Vor mehr als {{count}} Tagen erledigt"
added_new_next_action: "Neue Aktion angelegt"
to_tickler: ", im Notizbuch hinterlegt"
in_pending_state: "und als ausstehend markiert"
recurring_action_deleted: "Die Aktion wurde gel&ouml;scht. Da dies eine wiederkehrende Aktion ist, wurde eine neue erstellt."
completed_recurrence_completed: "Es gibt keine weitere Aktion nach der soeben gel&ouml;schten. Die Wiederholung ist abgeschlossen."
error_deleting_item: "Beim L&ouml;schen von {{description}} trat ein Fehler auf"
no_deferred_actions: "Zur Zeit sind keine zur&uuml;ckgestellten Aktionen vorhanden."
users:
change_authentication_type: "Authentifizierungsart ändern"
select_authentication_type: "Wähle deine neue Authentifizierungsart und klicke 'Authentifizierungsart ändern' an, um deine aktuellen Einstellungen zu überschreiben."
label_auth_type: "Authentifizierungsart"
identity_url: "Identity-URL"
auth_change_submit: "Authentifizierungsart ändern"
change_password_prompt: "Gib dein neues Passwort in die unten stehenden Felder ein und klicke auf 'Passwort ändern' um dein altes Passwort durch das neue zu ersetzen."
new_password_label: "Neues Passwort"
password_confirmation_label: "Passwort bestätigen"
change_password_submit: "Passwort ändern"
destroy_successful: "Benutzer {{login}} wurde erfolgreich gelöscht"
destroy_error: "Beim Löschen des Benutzers {{login}} ist ein Fehler aufgetreten."
total_actions: "Alle Aufgaben"
total_contexts: "Alle Kontexte"
total_projects: "Alle Projekte"
total_notes: "Alle Notizen"
destroy_user: "Benutzer löschen"
destroy_confirmation: "Achtung: der Benutzer '{{login}}' wird mit all seinen Aufgaben, Kontexten, Projekten und Notizen gelöscht. Bist du sicher, dass du fortfahren möchtest?"
signup_new_user: "Neuen Benutzer anlegen"
manage_users: "Benutzer verwalten"
total_users_count: "Derzeit existieren {{count}} Benutzer"
account_signup: "Accounteinrichtung"
register_with_cas: "Mit deinem CAS-Benutzernamen"
desired_login: "Gewünschter Benutzername"
choose_password: "Passwort wählen"
confirm_password: "Passwort bestätigen"
signup: "Registrieren"
new_user_title: "TRACKS::Als Administrator anmelden"
first_user_heading: "Willkommen bei TRACKS. Als erstes legen Sie bitte einen Administrator-Zugang an:"
new_user_heading: "Einen neuen Benutzer anlegen:"
no_signups_title: "TRACKS::Anmeldung nicht erlaubt"
signup_successful: "Benutzer {{username}} erfolgreich angelegt."
user_created: "Benutzer angelegt."
successfully_deleted_user: "Benutzer {{username}} erfolgreich gel&ouml;scht."
failed_to_delete_user: "L&ouml;schen des Benutzers {{username}} fehlgeschlagen"
change_password_title: "TRACKS::Passwort &auml;ndern"
password_updated: "Passwort aktualisiert."
change_auth_type_title: "TRACKS::Authentifizierungstyp &auml;ndern"
openid_url_verified: "Die URL {{url}} wurde erfolgreich als Identit&auml;t verifiziert und Deine Authentifizierung auf OpenID umgestellt."
openid_ok_pref_failed: "Die URL {{url}} wurde erfolgreich als Identit&auml;t verifiziert, beim Speichern der Einstellungen trat jedoch ein Fehler auf."
auth_type_updated: "Authentifizierungs-Art erfolgreich ge&auml;ndert."
auth_type_update_error: "Beim &Auml;ndern der Authentifizierung trat ein Fehler auf: {{error_messages}}"
new_token_generated: "Neuer Token erfolgreich generiert"
errors:
user_unauthorized: "401 Unauthorized: Nur administrative Benutzer dürfen auf diese Funktion zugreifen."

View file

@ -1,4 +1,3 @@
en:
activerecord:
errors:
models:
@ -38,6 +37,11 @@ en:
update: "Update"
logout: "Logout"
cancel: "Cancel"
project: "Project"
projects: "Projects"
context: "Context"
action: "Action"
actions: "Actions"
server_error: "An error occurred on the server."
contexts: "Contexts"
numbered_step: "Step {{number}}"
@ -46,6 +50,17 @@ en:
create: "Create"
go_back: "Go back"
search: "Search"
none: "None"
description: "Description"
notes: "Notes"
optional: "optional"
sort:
sort: "Sort"
alphabetically: "Alphabetically"
alphabetically_title: "Sort projects alphabetically"
by_task_count: "By number of tasks"
by_task_count_title: "Sort by number of tasks"
drag_handle: "DRAG"
contexts:
status_hidden: "Context is hidden"
status_active: "Context is active"
@ -57,11 +72,15 @@ en:
add_context: "Add Context"
context_hide: "Hide from front page?"
hide_form: "Hide form"
visible_contexts: "Visible Contexts"
hidden_contexts: "Hidden Contexts"
visible_contexts: "Visible contexts"
hidden_contexts: "Hidden contexts"
context_deleted: "Deleted context '{{name}}'"
no_contexts: "Currently there are no {{state}} contexts"
no_contexts_hidden: "Currently there are no hidden contexts"
no_contexts_active: "Currently there are no active contexts"
hide_form_link_title: "Hide new context form"
delete_context: "Delete context"
delete_context_confirmation: "Are you sure that you want to delete the context '{{name}}'? Be aware that this will also delete all (repeating) actions in this context!"
edit_context: "Edit context"
data:
import_errors: "Some errors occurred during import"
import_successful: "Import was successful."
@ -82,17 +101,17 @@ en:
active_starred_actions: "All starred, active actions"
projects_and_actions: "Active projects with their actions"
context_centric_actions: "Feeds for incomplete actions in a specific context"
context_needed: "There need to be at least one context before you can request a feed"
context_needed: "There needs to be at least one context before you can request a feed"
choose_context: "Choose the context you want a feed of"
select_feed_for_context: "Select the feed for this context"
project_centric: "Feeds for incomplete actions in a specific project"
project_needed: "There need to be at least one project before you can request a feed"
project_needed: "There needs to be at least one project before you can request a feed"
choose_project: "Choose the project you want a feed of"
select_feed_for_project: "Select the feed for this project"
integrations:
opensearch_description: "Search in Tracks"
applescript_next_action_prompt: "Description of next action:"
applescript_success_before_id: "New next action with id"
applescript_success_before_id: "New next action with ID"
applescript_success_after_id: "created"
gmail_description: "Gadget to add Tracks to Gmail as a gadget"
layouts:
@ -103,14 +122,11 @@ en:
home_title: "Home"
starred: "Starred"
starred_title: "See your starred actions"
projects: "Projects"
projects_title: "Projects"
tickler: "Tickler"
tickler_title: "Tickler"
organize: "Organize"
contexts: "Contexts"
contexts_title: "Contexts"
notes: "Notes"
notes_title: "Show all notes"
recurring_todos: "Repeating todos"
recurring_todos_title: "Manage recurring actions"
@ -160,13 +176,13 @@ en:
cas_logged_in_greeting: "Hello, {{username}}! You are authenticated."
cas_no_user_found: "Hello, {{username}}! You do not have an account on Tracks."
cas_create_account: "If you like to request on please go here to {{signup_link}}"
cas_signup_link: "Request Account"
cas_signup_link: "Request account"
cas_login: "CAS Login"
login_with_openid: "login with an OpenId"
login_with_openid: "login with an OpenID"
login_standard: "go back to the standard login"
login_cas: "go to the CAS"
option_separator: "or,"
mobile_use_openid: "...or login with an Open ID"
mobile_use_openid: "…or login with an OpenID"
notes:
note_location_link: "In:"
note_header: "Note {{id}}"
@ -191,8 +207,10 @@ en:
current_authentication_type: "Your authentication type is {{auth_type}}"
change_authentication_type: "Change your authentication type"
change_password: "Change your password"
open_id_url: "Your Open ID URL is"
open_id_url: "Your OpenID URL is"
change_identity_url: "Change Your Identity URL"
page_title: "TRACKS::Preferences"
page_title_edit: "TRACKS::Edit Preferences"
projects:
status_project_name_changed: "Name of project was changed"
default_tags_removed_notice: "Removed the default tags"
@ -215,6 +233,28 @@ en:
active_projects: "Active projects"
hidden_projects: "Hidden projects"
completed_projects: "Completed projects"
page_title: "TRACKS::Project: {{project}}"
list_projects: "TRACKS::List Projects"
no_default_context: "This project does not have a default context"
default_context: "The default context for this project is {{context}}"
project_state: "Project is {{state}}."
no_projects: "Currently there are no projects"
hide_new_project_form: "Hide new project form"
hide_form: "Hide form"
add_project: "Add Project"
to_new_project_page: "Take me to the new project page"
delete_project_title: "delete the project"
delete_project: "Delete project"
edit_project_title: "Edit project"
states:
active: "Active"
active_plural: "Active"
completed: "Completed"
completed_plural: "Completed"
hidden: "Hidden"
hidden_plural: "Hidden"
visible: "Visible"
visible_plural: "Visible"
search:
no_results: "Your search yielded no results."
todos_matching_query: "Todos matching query"
@ -236,21 +276,18 @@ en:
add_actions: "Add actions"
sidebar:
list_empty: "None"
list_name_active_projects: "Active Projects"
list_name_active_contexts: "Active Contexts"
list_name_hidden_projects: "Hidden Projects"
list_name_completed_projects: "Completed Projects"
list_name_hidden_contexts: "Hidden Contexts"
list_name_active_projects: "Active projects"
list_name_active_contexts: "Active contexts"
list_name_hidden_projects: "Hidden projects"
list_name_completed_projects: "Completed projects"
list_name_hidden_contexts: "Hidden contexts"
stats:
tod30_legend:
time_of_day: "Time of Day"
time_of_day: "Time of day"
number_of_actions: "Number of actions"
tod30: "Time of day (last 30 days)"
no_actions_selected: "There are no actions selected."
totals: "Totals"
actions: "Actions"
contexts: "Contexts"
projects: "Projects"
tags: "Tags"
more_stats_will_appear: "More statistics will appear here once you have added some actions."
spread_of_actions_for_all_context: "Spread of actions for all context"
@ -263,14 +300,14 @@ en:
time_of_day: "Time of day (all actions)"
time_of_day_legend:
number_of_actions: "Number of actions"
time_of_day: "Time of Day"
time_of_day: "Time of day"
labels:
created: "Created"
completed: "Completed"
avg_created: "Avg Created"
avg_completed: "Avg Completed"
month_avg_created: "{{months}} Month Avg Created"
month_avg_completed: "{{months}} Month Avg Completed"
avg_created: "Avg created"
avg_completed: "Avg completed"
month_avg_created: "{{months}} Month avg created"
month_avg_completed: "{{months}} Month avg completed"
click_to_update_actions: "Click on a bar in the chart to update the actions below."
click_to_return: "Click {{link}} to return to the statistics page."
click_to_return_link: "here"
@ -310,16 +347,16 @@ en:
actions_avg_completed_30days: "and completed an average of {{count}} actions per day."
actions_avg_created: "In the last 12 months you created on average {{count}} actions"
actions_avg_completed: "and completed an average of {{count}} actions per month."
tag_cloud_title: "Tag Cloud for all actions"
tag_cloud_title: "Tag cloud for all actions"
tag_cloud_description: "This tag cloud includes tags of all actions (completed, not completed, visible and/or hidden)"
no_tags_available: "no tags available"
tag_cloud_90days_title: "Tag Cloud actions in past 90 days"
tag_cloud_90days_title: "Tag cloud actions in past 90 days"
tag_cloud_90days_description: "This tag cloud includes tags of actions that were created or completed in the past 90 days."
top10_projects: "Top 10 projects"
top10_projects_30days: "Top 10 project in past 30 days"
top10_longrunning: "Top 10 longest running projects"
top5_contexts: "Top 5 Contexts"
top5_visible_contexts_with_incomplete_actions: "Top 5 Visible Contexts with incomplete actions"
top5_contexts: "Top 5 contexts"
top5_visible_contexts_with_incomplete_actions: "Top 5 visible contexts with incomplete actions"
actions_30days_title: "Actions in the last 30 days"
actions_lastyear_title: "Actions in the last 12 months"
legend:
@ -350,7 +387,6 @@ en:
completed_actions_with: "Completed actions with the tag {{tag_name}}"
no_completed_actions_with: "No completed actions with the tag '{{tag_name}}'"
next_action_description: "Next action description"
notes: "Notes"
new_related_todo_created: "A new todo was added which belongs to this recurring todo"
error_completing_todo: "There was an error completing / activating the recurring todo {{description}}"
recurring_todos: "Recurring todos"
@ -361,6 +397,8 @@ en:
recurring_deleted_success: "The recurring action was deleted succesfully."
error_deleting_recurring: "There was an error deleting the recurring todo {{description}}"
recurrence_period: "Recurrence period"
action_marked_complete: "The action <strong>'{{description}}'</strong> was marked as <strong>{{completed}}</strong>"
action_marked_complete_error: "The action <strong>'{{description}}'</strong> was NOT marked as <strong>{{completed}} due to an error on the server.</strong>"
recurrence:
daily: "Daily"
weekly: "Weekly"
@ -416,13 +454,91 @@ en:
one: "Has one pending action"
other: "Has {{count}} pending actions"
recurring_actions_title: "TRACKS::Recurring Actions"
next_action_needed: "You need to submit at least one next action"
context_changed: "Context changed to {{name}}"
action_deleted_success: "Successfully deleted next action"
action_deleted_error: "Failed to delete the action"
completed_tasks_title: "TRACKS::Completed tasks"
archived_tasks_title: "TRACKS::Archived completed tasks"
deferred_tasks_title: "TRACKS::Tickler"
tagged_page_title: "TRACKS::Tagged with '{{tag_name}}'"
calendar_page_title: "TRACKS::Calendar"
next_actions_title: "Tracks - Next Actions"
next_actions_description: "Filter:"
next_actions_title_additions:
due_today: "due today"
due_within_a_week: "due within a week"
completed: "actions completed"
next_actions_description_additions:
due_date: "with a due date {{due_date}} or earlier"
completed: "in the last {{count}} days"
feed_title_in_context: "in context '{{context}}'"
feed_title: "Actions"
feed_title_in_project: "in project '{{project}}'"
list_incomplete_next_actions_with_limit: "Lists the last {{count}} incomplete next actions"
list_incomplete_next_actions: "Lists incomplete next actions"
task_list_title: "TRACKS::List tasks"
mobile_todos_page_title: "All actions"
feeds:
due: "Due: {{date}}"
completed: "Completed: {{date}}"
deferred_pending_actions: "Deferred/pending actions"
no_deferred_pending_actions: "Currently there are no deferred or pending actions"
completed_actions: "Completed actions"
no_completed_actions: "Currently there are no completed actions."
was_due_on_date: "was due on {{date}}"
tags: "Tags (separate with commas)"
clear_due_date: "Clear due date"
show_from: "Show from"
clear_show_from_date: "Clear show from date"
depends_on_separate_with_commas: "Depends on (separate with commas)"
done: "Done?"
no_project: "--No project--"
due: "Due"
hidden_actions: "Hidden actions"
no_hidden_actions: "Currently there are no hidden actions found"
no_incomplete_actions: "There are no incomplete actions"
remove_dependency: "Remove dependency (does not delete the action)"
completed: "Completed"
added_dependency: "Added {{dependency}} as dependency."
set_to_pending: "{{task}} set to pending"
append_in_this_project: "in this project"
unable_to_add_dependency: "Unable to add dependency"
calendar:
due_today: "Due today"
no_actions_due_today: "No actions due today"
due_this_week: "Due in rest of this week"
due_next_week: "Due next week"
no_actions_due_next_week: "No actions due in next week"
due_this_month: "Due in rest of {{month}}"
no_actions_due_this_month: "No actions due in rest of this month"
due_next_month_and_later: "Due in {{month}} and later"
no_actions_due_after_this_month: "No actions due after this month"
get_in_ical_format: "Get this calendar in iCal format"
no_actions_due_this_week: "No actions due in rest of this week"
overdue: "Overdue"
tickler_items_due: "{{count}} tickler items are now due - refresh the page to see them."
completed_today: "You have completed {{count}} actions so far today."
completed_last_day: "Completed in the last 24 hours"
completed_last_x_days: "Completed in last {{count}} days"
older_completed_items: "Older completed items"
older_than_days: "Older than {{count}} days"
completed_in_archive: "There are {{count}} completed actions in the archive."
completed_more_than_x_days_ago: "Completed more than {{count}} days ago"
added_new_next_action: "Added new next action"
to_tickler: "to tickler"
in_pending_state: "in pending state"
recurring_action_deleted: "Action was deleted. Because this action is recurring, a new action was added"
completed_recurrence_completed: "There is no next action after the recurring action you just deleted. The recurrence is completed"
error_deleting_item: "There was an error deleting the item {{description}}"
no_deferred_actions: "Currently there are no deferred actions."
users:
change_authentication_type: "Change authentication type"
select_authentication_type: "Select your new authentication type and click 'Change Authentication Type' to replace your current settings."
select_authentication_type: "Select your new authentication type and click 'Change authentication type' to replace your current settings."
label_auth_type: "Authentication type"
identity_url: "Identity URL"
auth_change_submit: "Change Authentication Type"
change_password_prompt: "Enter your new password in the fields below and click 'Change Password' to replace your current password with your new one."
auth_change_submit: "Change authentication type"
change_password_prompt: "Enter your new password in the fields below and click 'Change password' to replace your current password with your new one."
new_password_label: "New password"
password_confirmation_label: "Confirm password"
change_password_submit: "Change password"
@ -434,7 +550,7 @@ en:
total_notes: "Total notes"
destroy_user: "Destroy user"
destroy_confirmation: "Warning: this will delete user '{{login}}', all their actions, contexts, project and notes. Are you sure that you want to continue?"
signup_new_user: "Signup new user"
signup_new_user: "Sign up new user"
manage_users: "Manage users"
total_users_count: "You have a total of {{count}} users"
account_signup: "Account signup"
@ -443,5 +559,21 @@ en:
choose_password: "Choose password"
confirm_password: "Confirm password"
signup: "Signup"
new_user_title: "TRACKS::Sign up as the admin user"
first_user_heading: "Welcome to TRACKS. To get started, please create an admin account:"
new_user_heading: "Sign up a new user:"
no_signups_title: "TRACKS::No signups"
signup_successful: "Signup successful for user {{username}}."
user_created: "User created."
successfully_deleted_user: "Successfully deleted user {{username}}"
failed_to_delete_user: "Failed to delete user {{username}}"
change_password_title: "TRACKS::Change password"
password_updated: "Password updated."
change_auth_type_title: "TRACKS::Change authentication type"
openid_url_verified: "You have successfully verified {{url}} as your identity and set your authentication type to OpenID."
openid_ok_pref_failed: "You have successfully verified {{url}} as your identity but there was a problem saving your authentication preferences."
auth_type_updated: "Authentication type updated."
auth_type_update_error: "There was a problem updating your authentication type: {{error_messages}}"
new_token_generated: "New token successfully generated"
errors:
user_unauthorized: "401 Unauthorized: Only administrative users are allowed access to this function."

View file

@ -0,0 +1,9 @@
class AddLocaleToPreference < ActiveRecord::Migration
def self.up
add_column :preferences, :locale, :string
end
def self.down
remove_column :preferences, :locale
end
end