From 1d9a11f8ea3800c0d2023b22a5ebe05d3ca59814 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Thu, 1 Dec 2011 00:46:54 -0500 Subject: [PATCH] I18N - Localization of CmdEdit.cpp, which means L10N is complete. --- src/commands/CmdEdit.cpp | 126 ++++++++++++++++++++------------------- src/en-US.h | 68 +++++++++++++++++++++ 2 files changed, 132 insertions(+), 62 deletions(-) diff --git a/src/commands/CmdEdit.cpp b/src/commands/CmdEdit.cpp index 2d85f5812..597e494c9 100644 --- a/src/commands/CmdEdit.cpp +++ b/src/commands/CmdEdit.cpp @@ -25,6 +25,7 @@ // //////////////////////////////////////////////////////////////////////////////// +#define L10N // Localization complete. #include #include @@ -34,6 +35,7 @@ #include #include #include +#include #include #include @@ -143,24 +145,24 @@ std::string CmdEdit::formatTask (Task task) context.config.getBoolean ("edit.verbose"); // Deprecated 2.0 if (verbose) - before << "# The 'task edit ' command allows you to modify all aspects of a task\n" - << "# using a text editor. Below is a representation of all the task details.\n" - << "# Modify what you wish, and when you save and quit your editor,\n" - << "# taskwarrior will read this file, determine what changed, and apply\n" - << "# those changes. If you exit your editor without saving or making\n" - << "# modifications, taskwarrior will do nothing.\n" + before << "# " << STRING_EDIT_HEADER_1 << "\n" + << "# " << STRING_EDIT_HEADER_2 << "\n" + << "# " << STRING_EDIT_HEADER_3 << "\n" + << "# " << STRING_EDIT_HEADER_4 << "\n" + << "# " << STRING_EDIT_HEADER_5 << "\n" + << "# " << STRING_EDIT_HEADER_6 << "\n" << "#\n" - << "# Lines that begin with # represent data you cannot change, like ID.\n" - << "# If you get too creative with your editing, taskwarrior will send you\n" - << "# back to the editor to try again.\n" + << "# " << STRING_EDIT_HEADER_7 << "\n" + << "# " << STRING_EDIT_HEADER_8 << "\n" + << "# " << STRING_EDIT_HEADER_9 << "\n" << "#\n" - << "# Should you find yourself in an endless loop, re-editing the same file,\n" - << "# just quit the editor without making any changes. Taskwarrior will \n" - << "# notice this and stop the editing.\n" + << "# " << STRING_EDIT_HEADER_10 << "\n" + << "# " << STRING_EDIT_HEADER_11 << "\n" + << "# " << STRING_EDIT_HEADER_12 << "\n" << "#\n"; - before << "# Name Editable details\n" - << "# ----------------- ----------------------------------------------------\n" + before << "# " << STRING_EDIT_TABLE_HEADER_1 << "\n" + << "# " << STRING_EDIT_TABLE_HEADER_2 << "\n" << "# ID: " << task.id << "\n" << "# UUID: " << task.get ("uuid") << "\n" << "# Status: " << ucFirst (Task::statusToText (task.getStatus ())) << "\n" @@ -175,7 +177,7 @@ std::string CmdEdit::formatTask (Task task) join (allTags, " ", tags); if (verbose) - before << "# Separate the tags with spaces, like this: tag1 tag2\n"; + before << "# " << STRING_EDIT_TAG_SEP << "\n"; before << " Tags: " << allTags << "\n" << " Description: " << task.get ("description") << "\n" @@ -191,9 +193,9 @@ std::string CmdEdit::formatTask (Task task) << " Background color: " << task.get ("bg") << "\n"; if (verbose) - before << "# Annotations look like this: -- and there can be any number of them.\n" - << "# The ' -- ' separator between the date and text field should not be removed.\n" - << "# A \"blank slot\" for adding an annotation follows for your convenience.\n"; + before << "# " << STRING_EDIT_HEADER_13 << "\n" + << "# " << STRING_EDIT_HEADER_14 << "\n" + << "# " << STRING_EDIT_HEADER_15 << "\n"; std::map annotations; task.getAnnotations (annotations); @@ -215,11 +217,11 @@ std::string CmdEdit::formatTask (Task task) join (allDeps, ",", dependencies); if (verbose) - before << "# Dependencies should be a comma-separated list of task IDs, with no spaces.\n"; + before << "# " << STRING_EDIT_DEP_SEP << "\n"; before << " Dependencies: " << allDeps << "\n"; - before << "# End\n"; + before << "# " << STRING_EDIT_END << "\n"; return before.str (); } @@ -232,12 +234,12 @@ void CmdEdit::parseTask (Task& task, const std::string& after) { if (value != "") { - context.footnote ("Project modified."); + context.footnote (STRING_EDIT_PROJECT_MOD); task.set ("project", value); } else { - context.footnote ("Project deleted."); + context.footnote (STRING_EDIT_PROJECT_DEL); task.remove ("project"); } } @@ -250,13 +252,13 @@ void CmdEdit::parseTask (Task& task, const std::string& after) { if (context.columns["priority"]->validate (value)) { - context.footnote ("Priority modified."); + context.footnote (STRING_EDIT_PRIORITY_MOD); task.set ("priority", value); } } else { - context.footnote ("Priority deleted."); + context.footnote (STRING_EDIT_PRIORITY_DEL); task.remove ("priority"); } } @@ -274,11 +276,11 @@ void CmdEdit::parseTask (Task& task, const std::string& after) { if (value != "") { - context.footnote ("Description modified."); + context.footnote (STRING_EDIT_DESC_MOD); task.set ("description", value); } else - throw std::string ("Cannot remove description."); + throw std::string (STRING_EDIT_DESC_REMOVE_ERR); } // entry @@ -290,12 +292,12 @@ void CmdEdit::parseTask (Task& task, const std::string& after) Date original (task.get_date ("entry")); if (!original.sameDay (edited)) { - context.footnote ("Creation date modified."); + context.footnote (STRING_EDIT_ENTRY_MOD); task.set ("entry", value); } } else - throw std::string ("Cannot remove creation date."); + throw std::string (STRING_EDIT_ENTRY_REMOVE_ERR); // start value = findDate (after, "\n Started:"); @@ -308,13 +310,13 @@ void CmdEdit::parseTask (Task& task, const std::string& after) Date original (task.get_date ("start")); if (!original.sameDay (edited)) { - context.footnote ("Start date modified."); + context.footnote (STRING_EDIT_START_MOD); task.set ("start", value); } } else { - context.footnote ("Start date modified."); + context.footnote (STRING_EDIT_START_MOD); task.set ("start", value); } } @@ -322,7 +324,7 @@ void CmdEdit::parseTask (Task& task, const std::string& after) { if (task.get ("start") != "") { - context.footnote ("Start date removed."); + context.footnote (STRING_EDIT_START_DEL); task.remove ("start"); } } @@ -338,18 +340,18 @@ void CmdEdit::parseTask (Task& task, const std::string& after) Date original (task.get_date ("end")); if (!original.sameDay (edited)) { - context.footnote ("Done date modified."); + context.footnote (STRING_EDIT_END_MOD); task.set ("end", value); } } else if (task.getStatus () != Task::deleted) - throw std::string ("Cannot set a done date on a pending task."); + throw std::string (STRING_EDIT_END_SET_ERR); } else { if (task.get ("end") != "") { - context.footnote ("Done date removed."); + context.footnote (STRING_EDIT_END_DEL); task.setStatus (Task::pending); task.remove ("end"); } @@ -366,13 +368,13 @@ void CmdEdit::parseTask (Task& task, const std::string& after) Date original (task.get_date ("due")); if (!original.sameDay (edited)) { - context.footnote ("Due date modified."); + context.footnote (STRING_EDIT_DUE_MOD); task.set ("due", value); } } else { - context.footnote ("Due date modified."); + context.footnote (STRING_EDIT_DUE_MOD); task.set ("due", value); } } @@ -383,11 +385,11 @@ void CmdEdit::parseTask (Task& task, const std::string& after) if (task.getStatus () == Task::recurring || task.get ("parent") != "") { - context.footnote ("Cannot remove a due date from a recurring task."); + context.footnote (STRING_EDIT_DUE_DEL_ERR); } else { - context.footnote ("Due date removed."); + context.footnote (STRING_EDIT_DUE_DEL); task.remove ("due"); } } @@ -404,13 +406,13 @@ void CmdEdit::parseTask (Task& task, const std::string& after) Date original (task.get_date ("until")); if (!original.sameDay (edited)) { - context.footnote ("Until date modified."); + context.footnote (STRING_EDIT_UNTIL_MOD); task.set ("until", value); } } else { - context.footnote ("Until date modified."); + context.footnote (STRING_EDIT_UNTIL_MOD); task.set ("until", value); } } @@ -418,7 +420,7 @@ void CmdEdit::parseTask (Task& task, const std::string& after) { if (task.get ("until") != "") { - context.footnote ("Until date removed."); + context.footnote (STRING_EDIT_UNTIL_DEL); task.remove ("until"); } } @@ -432,21 +434,21 @@ void CmdEdit::parseTask (Task& task, const std::string& after) Duration d; if (d.valid (value)) { - context.footnote ("Recurrence modified."); + context.footnote (STRING_EDIT_RECUR_MOD); if (task.get ("due") != "") { task.set ("recur", value); task.setStatus (Task::recurring); } else - throw std::string ("A recurring task must have a due date."); + throw std::string (STRING_EDIT_RECUR_DUE_ERR); } else - throw std::string ("Not a valid recurrence duration."); + throw std::string (STRING_EDIT_RECUR_ERR); } else { - context.footnote ("Recurrence removed."); + context.footnote (STRING_EDIT_RECUR_DEL); task.setStatus (Task::pending); task.remove ("recur"); task.remove ("until"); @@ -466,14 +468,14 @@ void CmdEdit::parseTask (Task& task, const std::string& after) Date original (task.get_date ("wait")); if (!original.sameDay (edited)) { - context.footnote ("Wait date modified."); + context.footnote (STRING_EDIT_WAIT_MOD); task.set ("wait", value); task.setStatus (Task::waiting); } } else { - context.footnote ("Wait date modified."); + context.footnote (STRING_EDIT_WAIT_MOD); task.set ("wait", value); task.setStatus (Task::waiting); } @@ -482,7 +484,7 @@ void CmdEdit::parseTask (Task& task, const std::string& after) { if (task.get ("wait") != "") { - context.footnote ("Wait date removed."); + context.footnote (STRING_EDIT_WAIT_DEL); task.remove ("wait"); task.setStatus (Task::pending); } @@ -494,12 +496,12 @@ void CmdEdit::parseTask (Task& task, const std::string& after) { if (value != "") { - context.footnote ("Parent UUID modified."); + context.footnote (STRING_EDIT_PARENT_MOD); task.set ("parent", value); } else { - context.footnote ("Parent UUID removed."); + context.footnote (STRING_EDIT_PARENT_DEL); task.remove ("parent"); } } @@ -510,12 +512,12 @@ void CmdEdit::parseTask (Task& task, const std::string& after) { if (value != "") { - context.footnote ("Foreground color modified."); + context.footnote (STRING_EDIT_FG_MOD); task.set ("fg", value); } else { - context.footnote ("Foreground color removed."); + context.footnote (STRING_EDIT_FG_DEL); task.remove ("fg"); } } @@ -526,12 +528,12 @@ void CmdEdit::parseTask (Task& task, const std::string& after) { if (value != "") { - context.footnote ("Background color modified."); + context.footnote (STRING_EDIT_BG_MOD); task.set ("bg", value); } else { - context.footnote ("Background color removed."); + context.footnote (STRING_EDIT_BG_DEL); task.remove ("bg"); } } @@ -591,7 +593,7 @@ bool CmdEdit::editFile (Task& task) // Check for file permissions. Directory location (context.config.get ("data.location")); if (! location.writable ()) - throw std::string ("Your data.location directory is not writable."); + throw std::string (STRING_EDIT_UNWRITABLE); // Create a temp file name in data.location. std::stringstream file; @@ -620,11 +622,11 @@ ARE_THESE_REALLY_HARMFUL: bool changes = false; // No changes made. // Launch the editor. - std::cout << "Launching '" << editor << "' now...\n"; + std::cout << format (STRING_EDIT_LAUNCHING, editor) << "\n"; if (-1 == system (editor.c_str ())) - std::cout << "No editing performed.\n"; + std::cout << STRING_EDIT_NO_EDITS << "\n"; else - std::cout << "Editing complete.\n"; + std::cout << STRING_EDIT_COMPLETE << "\n"; // Slurp file. std::string after; @@ -634,7 +636,7 @@ ARE_THESE_REALLY_HARMFUL: // if changes were made. if (before != after) { - std::cout << "Edits were detected.\n"; + std::cout << STRING_EDIT_CHANGES << "\n"; std::string problem = ""; bool oops = false; @@ -651,13 +653,13 @@ ARE_THESE_REALLY_HARMFUL: if (oops) { - std::cout << "Error: " << problem << "\n"; + std::cout << STRING_ERROR_PREFIX << problem << "\n"; // Preserve the edits. before = after; File::write (file.str (), before); - if (confirm ("Taskwarrior couldn't handle your edits. Would you like to try again?")) + if (confirm (STRING_EDIT_UNPARSEABLE)) goto ARE_THESE_REALLY_HARMFUL; } else @@ -665,7 +667,7 @@ ARE_THESE_REALLY_HARMFUL: } else { - std::cout << "No edits were detected.\n"; + std::cout << STRING_EDIT_NO_CHANGES << "\n"; changes = false; } diff --git a/src/en-US.h b/src/en-US.h index 0cb9c6afb..da011ed73 100644 --- a/src/en-US.h +++ b/src/en-US.h @@ -582,8 +582,76 @@ #define STRING_E9_INSUFFICIENT_OP "There are not enough operands for the '{1}' operator." #define STRING_E9_MORE_OP "Found extra operands." +// edit +#define STRING_EDIT_NO_CHANGES "No edits were detected." +#define STRING_EDIT_NO_EDITS "No editing performed." +#define STRING_EDIT_COMPLETE "Editing complete." +#define STRING_EDIT_LAUNCHING "Launching '{1}' now..." +#define STRING_EDIT_CHANGES "Edits were detected." +#define STRING_EDIT_UNPARSEABLE "Taskwarrior couldn't handle your edits. Would you like to try again?" +#define STRING_EDIT_UNWRITABLE "Your data.location directory is not writable." +#define STRING_EDIT_TAG_SEP "Separate the tags with spaces, like this: tag1 tag2" +#define STRING_EDIT_DEP_SEP "Dependencies should be a comma-separated list of task IDs, with no spaces." +#define STRING_EDIT_END "End" + +#define STRING_EDIT_PROJECT_MOD "Project modified." +#define STRING_EDIT_PROJECT_DEL "Project deleted." +#define STRING_EDIT_PRIORITY_MOD "Priority modified." +#define STRING_EDIT_PRIORITY_DEL "Priority deleted." +#define STRING_EDIT_DESC_MOD "Description modified." +#define STRING_EDIT_DESC_REMOVE_ERR "Cannot remove description." +#define STRING_EDIT_ENTRY_REMOVE_ERR "Cannot remove creation date." +#define STRING_EDIT_ENTRY_MOD "Creation date modified." +#define STRING_EDIT_START_MOD "Start date modified." +#define STRING_EDIT_START_DEL "Start date removed." +#define STRING_EDIT_END_MOD "End date modified." +#define STRING_EDIT_END_DEL "End date removed." +#define STRING_EDIT_END_SET_ERR "Cannot set a done date on a pending task." +#define STRING_EDIT_DUE_MOD "Due date modified." +#define STRING_EDIT_DUE_DEL "Due date removed." +#define STRING_EDIT_DUE_DEL_ERR "Cannot remove a due date from a recurring task." +#define STRING_EDIT_UNTIL_MOD "Until date modified." +#define STRING_EDIT_UNTIL_DEL "Until date removed." +#define STRING_EDIT_RECUR_MOD "Recurrence modified." +#define STRING_EDIT_RECUR_DEL "Recurrence removed." +#define STRING_EDIT_RECUR_DUE_ERR "A recurring task must have a due date." +#define STRING_EDIT_RECUR_ERR "Not a valid recurrence duration." +#define STRING_EDIT_WAIT_MOD "Wait date modified." +#define STRING_EDIT_WAIT_DEL "Wait date removed." +#define STRING_EDIT_PARENT_MOD "Parent UUID modified." +#define STRING_EDIT_PARENT_DEL "Parent UUID removed." +#define STRING_EDIT_FG_MOD "Foreground color modified." +#define STRING_EDIT_FG_DEL "Foreground color removed." +#define STRING_EDIT_BG_MOD "Background color modified." +#define STRING_EDIT_BG_DEL "Background color removed." + +// These four blocks can be replaced, but the number of lines must not change. +#define STRING_EDIT_HEADER_1 "The 'task edit ' command allows you to modify all aspects of a task" +#define STRING_EDIT_HEADER_2 "using a text editor. Below is a representation of all the task details." +#define STRING_EDIT_HEADER_3 "Modify what you wish, and when you save and quit your editor," +#define STRING_EDIT_HEADER_4 "taskwarrior will read this file, determine what changed, and apply" +#define STRING_EDIT_HEADER_5 "those changes. If you exit your editor without saving or making" +#define STRING_EDIT_HEADER_6 "modifications, taskwarrior will do nothing." + +#define STRING_EDIT_HEADER_7 "Lines that begin with # represent data you cannot change, like ID." +#define STRING_EDIT_HEADER_8 "If you get too creative with your editing, taskwarrior will send you" +#define STRING_EDIT_HEADER_9 "back to the editor to try again." + +#define STRING_EDIT_HEADER_10 "Should you find yourself in an endless loop, re-editing the same file," +#define STRING_EDIT_HEADER_11 "just quit the editor without making any changes. Taskwarrior will" +#define STRING_EDIT_HEADER_12 "notice this and stop the editing." + +#define STRING_EDIT_HEADER_13 "Annotations look like this: -- and there can be any number of them." +#define STRING_EDIT_HEADER_14 "The ' -- ' separator between the date and text field should not be removed." +#define STRING_EDIT_HEADER_15 "A \"blank slot\" for adding an annotation follows for your convenience." + +// Maintain the same spacing. +#define STRING_EDIT_TABLE_HEADER_1 "Name Editable details" +#define STRING_EDIT_TABLE_HEADER_2 "----------------- ----------------------------------------------------" + // Errors // TODO Move each of these to appropriate section. +#define STRING_ERROR_PREFIX "Error: " #define STRING_UNKNOWN_ERROR "Unknown error." #define STRING_NO_HOME "Could not read home directory from the passwd file." #define STRING_TRIVIAL_INPUT "You must specify a command or a task to modify."