- Localized more commands.
This commit is contained in:
Paul Beckingham
2011-06-25 13:14:47 -04:00
parent 6d4bf3dc75
commit 20bb5bf648
7 changed files with 156 additions and 76 deletions

View File

@@ -25,6 +25,8 @@
// //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#define L10N // Localization complete.
#include <sstream> #include <sstream>
#include <stdlib.h> #include <stdlib.h>
#include <Context.h> #include <Context.h>
@@ -33,6 +35,7 @@
#include <ViewText.h> #include <ViewText.h>
#include <main.h> #include <main.h>
#include <text.h> #include <text.h>
#include <i18n.h>
#include <CmdInfo.h> #include <CmdInfo.h>
extern Context context; extern Context context;
@@ -41,7 +44,7 @@ CmdInfo::CmdInfo ()
{ {
_keyword = "information"; _keyword = "information";
_usage = "task information <filter>"; _usage = "task information <filter>";
_description = "Shows all data and metadata for specified tasks."; _description = STRING_CMD_INFO_USAGE;
_read_only = true; _read_only = true;
_displays_id = true; _displays_id = true;
} }
@@ -79,8 +82,8 @@ int CmdInfo::execute (std::string& output)
{ {
ViewText view; ViewText view;
view.width (context.getWidth ()); view.width (context.getWidth ());
view.add (Column::factory ("string", "Name")); view.add (Column::factory ("string", STRING_COLUMN_LABEL_NAME));
view.add (Column::factory ("string", "Value")); view.add (Column::factory ("string", STRING_COLUMN_LABEL_VALUE));
// If an alternating row color is specified, notify the table. // If an alternating row color is specified, notify the table.
if (context.color ()) if (context.color ())
@@ -94,7 +97,7 @@ int CmdInfo::execute (std::string& output)
// id // id
int row = view.addRow (); int row = view.addRow ();
view.set (row, 0, "ID"); view.set (row, 0, STRING_COLUMN_LABEL_ID);
view.set (row, 1, format (task->id)); view.set (row, 1, format (task->id));
std::string status = ucFirst (Task::statusToText (task->getStatus ())); std::string status = ucFirst (Task::statusToText (task->getStatus ()));
@@ -104,19 +107,19 @@ int CmdInfo::execute (std::string& output)
autoColorize (*task, c); autoColorize (*task, c);
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Description"); view.set (row, 0, STRING_COLUMN_LABEL_DESC);
view.set (row, 1, getFullDescription (*task, "info"), c); view.set (row, 1, getFullDescription (*task, "info"), c);
// status // status
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Status"); view.set (row, 0, STRING_COLUMN_LABEL_STATUS);
view.set (row, 1, status); view.set (row, 1, status);
// project // project
if (task->has ("project")) if (task->has ("project"))
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Project"); view.set (row, 0, STRING_COLUMN_LABEL_PROJECT);
view.set (row, 1, task->get ("project")); view.set (row, 1, task->get ("project"));
} }
@@ -124,7 +127,7 @@ int CmdInfo::execute (std::string& output)
if (task->has ("priority")) if (task->has ("priority"))
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Priority"); view.set (row, 0, STRING_COLUMN_LABEL_PRIORITY);
view.set (row, 1, task->get ("priority")); view.set (row, 1, task->get ("priority"));
} }
@@ -140,7 +143,7 @@ int CmdInfo::execute (std::string& output)
message << it->id << " " << it->get ("description") << "\n"; message << it->id << " " << it->get ("description") << "\n";
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "This task blocked by"); view.set (row, 0, STRING_CMD_INFO_BLOCKED);
view.set (row, 1, message.str ()); view.set (row, 1, message.str ());
} }
} }
@@ -157,7 +160,7 @@ int CmdInfo::execute (std::string& output)
message << it->id << " " << it->get ("description") << "\n"; message << it->id << " " << it->get ("description") << "\n";
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "This task is blocking"); view.set (row, 0, STRING_CMD_INFO_BLOCKING);
view.set (row, 1, message.str ()); view.set (row, 1, message.str ());
} }
} }
@@ -166,7 +169,7 @@ int CmdInfo::execute (std::string& output)
if (task->has ("recur")) if (task->has ("recur"))
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Recurrence"); view.set (row, 0, STRING_COLUMN_LABEL_RECUR_L);
view.set (row, 1, task->get ("recur")); view.set (row, 1, task->get ("recur"));
} }
@@ -174,7 +177,7 @@ int CmdInfo::execute (std::string& output)
if (task->has ("until")) if (task->has ("until"))
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Recur until"); view.set (row, 0, STRING_CMD_INFO_RECUR_UNTIL);
Date dt (strtol (task->get ("until").c_str (), NULL, 10)); Date dt (strtol (task->get ("until").c_str (), NULL, 10));
std::string format = context.config.get ("reportdateformat"); std::string format = context.config.get ("reportdateformat");
@@ -189,7 +192,7 @@ int CmdInfo::execute (std::string& output)
if (task->getStatus () == Task::recurring) if (task->getStatus () == Task::recurring)
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Mask"); view.set (row, 0, STRING_COLUMN_LABEL_MASK);
view.set (row, 1, task->get ("mask")); view.set (row, 1, task->get ("mask"));
} }
@@ -197,12 +200,12 @@ int CmdInfo::execute (std::string& output)
{ {
// parent // parent
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Parent task"); view.set (row, 0, STRING_COLUMN_LABEL_PARENT);
view.set (row, 1, task->get ("parent")); view.set (row, 1, task->get ("parent"));
// imask // imask
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Mask Index"); view.set (row, 0, STRING_COLUMN_LABEL_MASK_IDX);
view.set (row, 1, task->get ("imask")); view.set (row, 1, task->get ("imask"));
} }
@@ -210,7 +213,7 @@ int CmdInfo::execute (std::string& output)
if (task->has ("due")) if (task->has ("due"))
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Due"); view.set (row, 0, STRING_COLUMN_LABEL_DUE);
std::string format = context.config.get ("reportdateformat"); std::string format = context.config.get ("reportdateformat");
if (format == "") if (format == "")
@@ -223,7 +226,7 @@ int CmdInfo::execute (std::string& output)
if (task->has ("wait")) if (task->has ("wait"))
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Waiting until"); view.set (row, 0, STRING_COLUMN_LABEL_WAITING);
Date dt (strtol (task->get ("wait").c_str (), NULL, 10)); Date dt (strtol (task->get ("wait").c_str (), NULL, 10));
view.set (row, 1, dt.toString (context.config.get ("dateformat"))); view.set (row, 1, dt.toString (context.config.get ("dateformat")));
} }
@@ -232,7 +235,7 @@ int CmdInfo::execute (std::string& output)
if (task->has ("start")) if (task->has ("start"))
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Start"); view.set (row, 0, STRING_COLUMN_LABEL_START);
Date dt (strtol (task->get ("start").c_str (), NULL, 10)); Date dt (strtol (task->get ("start").c_str (), NULL, 10));
view.set (row, 1, dt.toString (context.config.get ("dateformat"))); view.set (row, 1, dt.toString (context.config.get ("dateformat")));
} }
@@ -241,7 +244,7 @@ int CmdInfo::execute (std::string& output)
if (task->has ("end")) if (task->has ("end"))
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "End"); view.set (row, 0, STRING_COLUMN_LABEL_END);
Date dt (strtol (task->get ("end").c_str (), NULL, 10)); Date dt (strtol (task->get ("end").c_str (), NULL, 10));
view.set (row, 1, dt.toString (context.config.get ("dateformat"))); view.set (row, 1, dt.toString (context.config.get ("dateformat")));
} }
@@ -255,19 +258,19 @@ int CmdInfo::execute (std::string& output)
join (allTags, " ", tags); join (allTags, " ", tags);
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Tags"); view.set (row, 0, STRING_COLUMN_LABEL_TAGS);
view.set (row, 1, allTags); view.set (row, 1, allTags);
} }
// uuid // uuid
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "UUID"); view.set (row, 0, STRING_COLUMN_LABEL_UUID);
std::string uuid = task->get ("uuid"); std::string uuid = task->get ("uuid");
view.set (row, 1, uuid); view.set (row, 1, uuid);
// entry // entry
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Entered"); view.set (row, 0, STRING_COLUMN_LABEL_ENTERED);
Date dt (strtol (task->get ("entry").c_str (), NULL, 10)); Date dt (strtol (task->get ("entry").c_str (), NULL, 10));
std::string entry = dt.toString (context.config.get ("dateformat")); std::string entry = dt.toString (context.config.get ("dateformat"));
@@ -281,27 +284,27 @@ int CmdInfo::execute (std::string& output)
view.set (row, 1, entry + " (" + age + ")"); view.set (row, 1, entry + " (" + age + ")");
// fg // fg TODO deprecated
std::string color = task->get ("fg"); std::string color = task->get ("fg");
if (color != "") if (color != "")
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Foreground color"); view.set (row, 0, STRING_COLUMN_LABEL_FG);
view.set (row, 1, color); view.set (row, 1, color);
} }
// bg // bg TODO deprecated
color = task->get ("bg"); color = task->get ("bg");
if (color != "") if (color != "")
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Background color"); view.set (row, 0, STRING_COLUMN_LABEL_BG);
view.set (row, 1, color); view.set (row, 1, color);
} }
// Task::urgency // Task::urgency
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Urgency"); view.set (row, 0, STRING_COLUMN_LABEL_URGENCY);
view.set (row, 1, trimLeft (format (task->urgency (), 4, 4))); view.set (row, 1, trimLeft (format (task->urgency (), 4, 4)));
// Create a second table, containing undo log change details. // Create a second table, containing undo log change details.
@@ -316,8 +319,8 @@ int CmdInfo::execute (std::string& output)
} }
journal.width (context.getWidth ()); journal.width (context.getWidth ());
journal.add (Column::factory ("string", "Date")); journal.add (Column::factory ("string", STRING_COLUMN_LABEL_DATE));
journal.add (Column::factory ("string", "Modification")); journal.add (Column::factory ("string", STRING_CMD_INFO_MODIFICATION));
if (context.config.getBoolean ("journal.info") && if (context.config.getBoolean ("journal.info") &&
undo.size () > 3) undo.size () > 3)
@@ -376,7 +379,7 @@ int CmdInfo::execute (std::string& output)
if (total_time > 0) if (total_time > 0)
{ {
row = journal.addRow (); row = journal.addRow ();
journal.set (row, 0, "Total active time"); journal.set (row, 0, STRING_CMD_INFO_TOTAL_ACTIVE);
journal.set (row, 1, Duration (total_time).format (), journal.set (row, 1, Duration (total_time).format (),
(context.color () ? Color ("bold") : Color ())); (context.color () ? Color ("bold") : Color ()));
} }
@@ -393,7 +396,7 @@ int CmdInfo::execute (std::string& output)
if (! filtered.size ()) if (! filtered.size ())
{ {
out << "No matches.\n"; out << STRING_FEEDBACK_NO_MATCH << "\n";
rc = 1; rc = 1;
} }

View File

@@ -25,8 +25,11 @@
// //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#define L10N // Localization complete.
#include <Context.h> #include <Context.h>
#include <main.h> #include <main.h>
#include <i18n.h>
#include <CmdQuery.h> #include <CmdQuery.h>
extern Context context; extern Context context;
@@ -36,7 +39,7 @@ CmdQuery::CmdQuery ()
{ {
_keyword = "_query"; _keyword = "_query";
_usage = "task _query [<filter>]"; _usage = "task _query [<filter>]";
_description = "Executes external commands and scripts"; _description = STRING_CMD_QUERY_USAGE;
_read_only = true; _read_only = true;
_displays_id = true; _displays_id = true;
} }
@@ -60,7 +63,7 @@ int CmdQuery::execute (std::string& output)
if (filtered.size () == 0) if (filtered.size () == 0)
{ {
context.footnote ("No matches."); context.footnote (STRING_FEEDBACK_NO_MATCH);
return 1; return 1;
} }

View File

@@ -25,11 +25,14 @@
// //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#define L10N // Localization complete.
#include <sstream> #include <sstream>
#include <algorithm> #include <algorithm>
#include <Context.h> #include <Context.h>
#include <ViewText.h> #include <ViewText.h>
#include <text.h> #include <text.h>
#include <i18n.h>
#include <CmdReports.h> #include <CmdReports.h>
extern Context context; extern Context context;
@@ -39,7 +42,7 @@ CmdReports::CmdReports ()
{ {
_keyword = "reports"; _keyword = "reports";
_usage = "task reports"; _usage = "task reports";
_description = "Lists all supported reports."; _description = STRING_CMD_REPORTS_USAGE;
_read_only = true; _read_only = true;
_displays_id = false; _displays_id = false;
} }
@@ -84,8 +87,8 @@ int CmdReports::execute (std::string& output)
std::stringstream out; std::stringstream out;
ViewText view; ViewText view;
view.width (context.getWidth ()); view.width (context.getWidth ());
view.add (Column::factory ("string", "Report")); view.add (Column::factory ("string", STRING_CMD_REPORTS_REPORT));
view.add (Column::factory ("string", "Description")); view.add (Column::factory ("string", STRING_CMD_REPORTS_DESC));
// If an alternating row color is specified, notify the table. // If an alternating row color is specified, notify the table.
if (context.color ()) if (context.color ())
@@ -106,8 +109,7 @@ int CmdReports::execute (std::string& output)
out << optionalBlankLine () out << optionalBlankLine ()
<< view.render () << view.render ()
<< optionalBlankLine () << optionalBlankLine ()
<< reports.size () << format (STRING_CMD_REPORTS_SUMMARY, reports.size ())
<< " reports"
<< "\n"; << "\n";
output = out.str (); output = out.str ();

View File

@@ -25,6 +25,8 @@
// //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#define L10N // Localization complete.
#include <sstream> #include <sstream>
#include <iomanip> #include <iomanip>
#include <stdlib.h> #include <stdlib.h>
@@ -34,6 +36,7 @@
#include <main.h> #include <main.h>
#include <text.h> #include <text.h>
#include <util.h> #include <util.h>
#include <i18n.h>
#include <CmdStatistics.h> #include <CmdStatistics.h>
extern Context context; extern Context context;
@@ -43,7 +46,7 @@ CmdStatistics::CmdStatistics ()
{ {
_keyword = "stats"; _keyword = "stats";
_usage = "task stats [<filter>]"; _usage = "task stats [<filter>]";
_description = "Shows task database statistics."; _description = STRING_CMD_STATS_USAGE;
_read_only = true; _read_only = true;
_displays_id = false; _displays_id = false;
} }
@@ -54,6 +57,8 @@ int CmdStatistics::execute (std::string& output)
int rc = 0; int rc = 0;
std::stringstream out; std::stringstream out;
std::string dateformat = context.config.get ("dateformat");
// Go get the file sizes. // Go get the file sizes.
size_t dataSize = 0; size_t dataSize = 0;
@@ -149,57 +154,57 @@ int CmdStatistics::execute (std::string& output)
ViewText view; ViewText view;
view.width (context.getWidth ()); view.width (context.getWidth ());
view.intraPadding (2); view.intraPadding (2);
view.add (Column::factory ("string", "Category")); view.add (Column::factory ("string", STRING_CMD_STATS_CATEGORY));
view.add (Column::factory ("string", "Data")); view.add (Column::factory ("string", STRING_CMD_STATS_DATA));
int row = view.addRow (); int row = view.addRow ();
view.set (row, 0, "Pending"); view.set (row, 0, STRING_COLUMN_LABEL_STAT_PE);
view.set (row, 1, pendingT); view.set (row, 1, pendingT);
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Waiting"); view.set (row, 0, STRING_COLUMN_LABEL_STAT_WA);
view.set (row, 1, waitingT); view.set (row, 1, waitingT);
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Recurring"); view.set (row, 0, STRING_COLUMN_LABEL_STAT_RE);
view.set (row, 1, recurringT); view.set (row, 1, recurringT);
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Completed"); view.set (row, 0, STRING_COLUMN_LABEL_STAT_CO);
view.set (row, 1, completedT); view.set (row, 1, completedT);
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Deleted"); view.set (row, 0, STRING_COLUMN_LABEL_STAT_DE);
view.set (row, 1, deletedT); view.set (row, 1, deletedT);
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Total"); view.set (row, 0, STRING_CMD_STATS_TOTAL);
view.set (row, 1, totalT); view.set (row, 1, totalT);
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Annotations"); view.set (row, 0, STRING_CMD_STATS_ANNOTATIONS);
view.set (row, 1, annotationsT); view.set (row, 1, annotationsT);
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Unique tags"); view.set (row, 0, STRING_CMD_STATS_UNIQUE_TAGS);
view.set (row, 1, (int)allTags.size ()); view.set (row, 1, (int)allTags.size ());
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Projects"); view.set (row, 0, STRING_CMD_STATS_PROJECTS);
view.set (row, 1, (int)allProjects.size ()); view.set (row, 1, (int)allProjects.size ());
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Data size"); view.set (row, 0, STRING_CMD_STATS_DATA_SIZE);
view.set (row, 1, formatBytes (dataSize)); view.set (row, 1, formatBytes (dataSize));
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Undo transactions"); view.set (row, 0, STRING_CMD_STATS_UNDO_TXNS);
view.set (row, 1, undoCount); view.set (row, 1, undoCount);
if (totalT) if (totalT)
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Tasks tagged"); view.set (row, 0, STRING_CMD_STATS_TAGGED);
std::stringstream value; std::stringstream value;
value << std::setprecision (3) << (100.0 * taggedT / totalT) << "%"; value << std::setprecision (3) << (100.0 * taggedT / totalT) << "%";
@@ -210,54 +215,52 @@ int CmdStatistics::execute (std::string& output)
{ {
Date e (earliest); Date e (earliest);
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Oldest task"); view.set (row, 0, STRING_CMD_STATS_OLDEST);
view.set (row, 1, e.toString (context.config.get ("dateformat"))); view.set (row, 1, e.toString (dateformat));
Date l (latest); Date l (latest);
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Newest task"); view.set (row, 0, STRING_CMD_STATS_NEWEST);
view.set (row, 1, l.toString (context.config.get ("dateformat"))); view.set (row, 1, l.toString (dateformat));
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Task used for"); view.set (row, 0, STRING_CMD_STATS_USED_FOR);
view.set (row, 1, Duration (latest - earliest).format ()); view.set (row, 1, Duration (latest - earliest).format ());
} }
if (totalT) if (totalT)
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Task added every"); view.set (row, 0, STRING_CMD_STATS_ADD_EVERY);
view.set (row, 1, Duration (((latest - earliest) / totalT)).format ()); view.set (row, 1, Duration (((latest - earliest) / totalT)).format ());
} }
if (completedT) if (completedT)
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Task completed every"); view.set (row, 0, STRING_CMD_STATS_COMP_EVERY);
view.set (row, 1, Duration ((latest - earliest) / completedT).format ()); view.set (row, 1, Duration ((latest - earliest) / completedT).format ());
} }
if (deletedT) if (deletedT)
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Task deleted every"); view.set (row, 0, STRING_CMD_STATS_DEL_EVERY);
view.set (row, 1, Duration ((latest - earliest) / deletedT).format ()); view.set (row, 1, Duration ((latest - earliest) / deletedT).format ());
} }
if (pendingT || completedT) if (pendingT || completedT)
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Average time pending"); view.set (row, 0, STRING_CMD_STATS_AVG_PEND);
view.set (row, 1, Duration ((int) ((daysPending / (pendingT + completedT)) * 86400)).format ()); view.set (row, 1, Duration ((int) ((daysPending / (pendingT + completedT)) * 86400)).format ());
} }
if (totalT) if (totalT)
{ {
row = view.addRow (); row = view.addRow ();
view.set (row, 0, "Average desc length"); view.set (row, 0, STRING_CMD_STATS_DESC_LEN);
std::stringstream value; view.set (row, 1, format (STRING_CMD_STATS_CHARS, (int) (descLength / totalT)));
value << (int) (descLength / totalT) << " characters";
view.set (row, 1, value.str ());
} }
// If an alternating row color is specified, notify the table. // If an alternating row color is specified, notify the table.

View File

@@ -25,6 +25,8 @@
// //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#define L10N // Localization complete.
#include <sstream> #include <sstream>
#include <vector> #include <vector>
#include <stdlib.h> #include <stdlib.h>
@@ -32,6 +34,7 @@
#include <ViewText.h> #include <ViewText.h>
#include <CmdTags.h> #include <CmdTags.h>
#include <text.h> #include <text.h>
#include <i18n.h>
extern Context context; extern Context context;
@@ -40,7 +43,7 @@ CmdTags::CmdTags ()
{ {
_keyword = "tags"; _keyword = "tags";
_usage = "task tags"; _usage = "task tags";
_description = "Shows a list of all tags used."; _description = STRING_CMD_TAGS_USAGE;
_read_only = true; _read_only = true;
_displays_id = false; _displays_id = false;
} }
@@ -88,8 +91,8 @@ int CmdTags::execute (std::string& output)
// Render a list of tags names from the map. // Render a list of tags names from the map.
ViewText view; ViewText view;
view.width (context.getWidth ()); view.width (context.getWidth ());
view.add (Column::factory ("string", "Tag")); view.add (Column::factory ("string", STRING_COLUMN_LABEL_TAG));
view.add (Column::factory ("string.right", "Count")); view.add (Column::factory ("string.right", STRING_COLUMN_LABEL_COUNT));
Color bold ("bold"); Color bold ("bold");
bool special = false; bool special = false;
@@ -109,14 +112,23 @@ int CmdTags::execute (std::string& output)
out << optionalBlankLine () out << optionalBlankLine ()
<< view.render () << view.render ()
<< optionalBlankLine () << optionalBlankLine ();
<< unique.size ()
<< (unique.size () == 1 ? " tag" : " tags") if (unique.size () == 1)
<< " (" << quantity << (quantity == 1 ? " task" : " tasks") << ")\n"; out << STRING_CMD_TAGS_SINGLE;
else
out << format (STRING_CMD_TAGS_PLURAL, unique.size ());
if (quantity == 1)
out << " " << STRING_FEEDBACK_TASKS_SINGLE;
else
out << " " << format (STRING_FEEDBACK_TASKS_PLURAL, quantity);
out << "\n";
} }
else else
{ {
out << "No tags.\n"; out << STRING_CMD_TAGS_NO_TAGS << "\n";
rc = 1; rc = 1;
} }
@@ -129,7 +141,7 @@ CmdCompletionTags::CmdCompletionTags ()
{ {
_keyword = "_tags"; _keyword = "_tags";
_usage = "task _tags"; _usage = "task _tags";
_description = "Shows only a list of all tags used, for autocompletion purposes."; _description = STRING_CMD_COMTAGS_USAGE;
_read_only = true; _read_only = true;
_displays_id = false; _displays_id = false;
} }

View File

@@ -25,7 +25,10 @@
// //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#define L10N // Localization complete.
#include <Context.h> #include <Context.h>
#include <i18n.h>
#include <CmdUndo.h> #include <CmdUndo.h>
extern Context context; extern Context context;
@@ -35,7 +38,7 @@ CmdUndo::CmdUndo ()
{ {
_keyword = "undo"; _keyword = "undo";
_usage = "task undo"; _usage = "task undo";
_description = "Reverts the most recent change to a task."; _description = STRING_CMD_UNDO_USAGE;
_read_only = false; _read_only = false;
_displays_id = false; _displays_id = false;
} }

View File

@@ -112,6 +112,8 @@
#define STRING_COLUMN_LABEL_DEP_S "Dep" #define STRING_COLUMN_LABEL_DEP_S "Dep"
#define STRING_COLUMN_LABEL_DESC "Description" #define STRING_COLUMN_LABEL_DESC "Description"
#define STRING_COLUMN_LABEL_DUE "Due" #define STRING_COLUMN_LABEL_DUE "Due"
#define STRING_COLUMN_LABEL_END "End"
#define STRING_COLUMN_LABEL_ENTERED "Entered"
#define STRING_COLUMN_LABEL_COUNT "Count" #define STRING_COLUMN_LABEL_COUNT "Count"
#define STRING_COLUMN_LABEL_COMPLETE "Completed" #define STRING_COLUMN_LABEL_COMPLETE "Completed"
#define STRING_COLUMN_LABEL_ADDED "Added" #define STRING_COLUMN_LABEL_ADDED "Added"
@@ -122,7 +124,10 @@
#define STRING_COLUMN_LABEL_PROJECT "Project" #define STRING_COLUMN_LABEL_PROJECT "Project"
#define STRING_COLUMN_LABEL_UNTIL "Until" #define STRING_COLUMN_LABEL_UNTIL "Until"
#define STRING_COLUMN_LABEL_WAIT "Wait" #define STRING_COLUMN_LABEL_WAIT "Wait"
#define STRING_COLUMN_LABEL_WAITING "Waiting until"
#define STRING_COLUMN_LABEL_RECUR "Recur" #define STRING_COLUMN_LABEL_RECUR "Recur"
#define STRING_COLUMN_LABEL_RECUR_L "Recurrence"
#define STRING_COLUMN_LABEL_START "Start"
#define STRING_COLUMN_LABEL_STARTED "Started" #define STRING_COLUMN_LABEL_STARTED "Started"
#define STRING_COLUMN_LABEL_ACTIVE "A" #define STRING_COLUMN_LABEL_ACTIVE "A"
#define STRING_COLUMN_LABEL_STATUS "Status" #define STRING_COLUMN_LABEL_STATUS "Status"
@@ -141,6 +146,14 @@
#define STRING_COLUMN_LABEL_TAG "Tag" #define STRING_COLUMN_LABEL_TAG "Tag"
#define STRING_COLUMN_LABEL_UUID "UUID" #define STRING_COLUMN_LABEL_UUID "UUID"
#define STRING_COLUMN_LABEL_URGENCY "Urgency" #define STRING_COLUMN_LABEL_URGENCY "Urgency"
#define STRING_COLUMN_LABEL_NAME "Name"
#define STRING_COLUMN_LABEL_VALUE "Value"
#define STRING_COLUMN_LABEL_MASK "Mask"
#define STRING_COLUMN_LABEL_MASK_IDX "Mask Index"
#define STRING_COLUMN_LABEL_PARENT "Parent task"
#define STRING_COLUMN_LABEL_FG "Foreground color"
#define STRING_COLUMN_LABEL_BG "Background color"
#define STRING_COLUMN_LABEL_DATE "Date"
// commands/Cmd* // commands/Cmd*
#define STRING_CMD_CONFLICT "Custom report '{1}' conflicts with built-in task command." #define STRING_CMD_CONFLICT "Custom report '{1}' conflicts with built-in task command."
@@ -165,6 +178,42 @@
#define STRING_CMD_IDS_USAGE_RANGE "Shows only the IDs of matching tasks, in the form of a range." #define STRING_CMD_IDS_USAGE_RANGE "Shows only the IDs of matching tasks, in the form of a range."
#define STRING_CMD_IDS_USAGE_LIST "Shows only the IDs of matching tasks, in the form of a list." #define STRING_CMD_IDS_USAGE_LIST "Shows only the IDs of matching tasks, in the form of a list."
#define STRING_CMD_IDS_USAGE_ZSH "Shows the IDs and descriptions of matching tasks." #define STRING_CMD_IDS_USAGE_ZSH "Shows the IDs and descriptions of matching tasks."
#define STRING_CMD_QUERY_USAGE "Executes external commands and scripts"
#define STRING_CMD_INFO_USAGE "Shows all data and metadata for specified tasks."
#define STRING_CMD_INFO_BLOCKED "This task blocked by"
#define STRING_CMD_INFO_BLOCKING "This task is blocking"
#define STRING_CMD_INFO_RECUR_UNTIL "Recur until"
#define STRING_CMD_INFO_MODIFICATION "Modification"
#define STRING_CMD_INFO_TOTAL_ACTIVE "Total active time"
#define STRING_CMD_UNDO_USAGE "Reverts the most recent change to a task."
#define STRING_CMD_STATS_USAGE "Shows task database statistics."
#define STRING_CMD_STATS_CATEGORY "Category"
#define STRING_CMD_STATS_DATA "Data"
#define STRING_CMD_STATS_TOTAL "Total"
#define STRING_CMD_STATS_ANNOTATIONS "Annotations"
#define STRING_CMD_STATS_UNIQUE_TAGS "Unique tags"
#define STRING_CMD_STATS_PROJECTS "Projects"
#define STRING_CMD_STATS_DATA_SIZE "Data size"
#define STRING_CMD_STATS_UNDO_TXNS "Undo transactions"
#define STRING_CMD_STATS_TAGGED "Tasks tagged"
#define STRING_CMD_STATS_OLDEST "Oldest task"
#define STRING_CMD_STATS_NEWEST "Newest task"
#define STRING_CMD_STATS_USED_FOR "Task used for"
#define STRING_CMD_STATS_ADD_EVERY "Task added every"
#define STRING_CMD_STATS_COMP_EVERY "Task completed every"
#define STRING_CMD_STATS_DEL_EVERY "Task deleted every"
#define STRING_CMD_STATS_AVG_PEND "Average time pending"
#define STRING_CMD_STATS_DESC_LEN "Average desc length"
#define STRING_CMD_STATS_CHARS "{1} characters"
#define STRING_CMD_REPORTS_USAGE "Lists all supported reports."
#define STRING_CMD_REPORTS_REPORT "Report"
#define STRING_CMD_REPORTS_DESC "Description"
#define STRING_CMD_REPORTS_SUMMARY "{1} reports"
#define STRING_CMD_TAGS_USAGE "Shows a list of all tags used."
#define STRING_CMD_COMTAGS_USAGE "Shows only a list of all tags used, for autocompletion purposes."
#define STRING_CMD_TAGS_SINGLE "1 tag"
#define STRING_CMD_TAGS_PLURAL "{1} tags"
#define STRING_CMD_TAGS_NO_TAGS "No tags."
// Config // Config
#define STRING_CONFIG_OVERNEST "Configuration file nested to more than 10 levels deep - this has to be a mistake." #define STRING_CONFIG_OVERNEST "Configuration file nested to more than 10 levels deep - this has to be a mistake."
@@ -186,6 +235,11 @@
#define STRING_TRIVIAL_INPUT "You must specify a command, or a task ID to modify." #define STRING_TRIVIAL_INPUT "You must specify a command, or a task ID to modify."
#define STRING_ASSUME_INFO "No command - assuming 'info'" #define STRING_ASSUME_INFO "No command - assuming 'info'"
// Feedback
#define STRING_FEEDBACK_NO_MATCH "No matches."
#define STRING_FEEDBACK_TASKS_SINGLE "(1 task)"
#define STRING_FEEDBACK_TASKS_PLURAL "({1} tasks)"
// File // File
#define STRING_FILE_PERMS "Task does not have the correct permissions for '{1}'." #define STRING_FILE_PERMS "Task does not have the correct permissions for '{1}'."