From 02a650b3951308b642d673306c5c776eaf34f21b Mon Sep 17 00:00:00 2001 From: mtsio Date: Sun, 12 Apr 2015 21:18:16 +0300 Subject: [PATCH 1/2] internationalization of error messages --- build/shared/lib/languages/PDE.properties | 21 +++++ .../java/pdex/ErrorMessageSimplifier.java | 92 +++++++++++++------ 2 files changed, 83 insertions(+), 30 deletions(-) diff --git a/build/shared/lib/languages/PDE.properties b/build/shared/lib/languages/PDE.properties index 0de359546..122046717 100644 --- a/build/shared/lib/languages/PDE.properties +++ b/build/shared/lib/languages/PDE.properties @@ -314,6 +314,27 @@ editor.status.printing.error = Error while printing. editor.status.printing.canceled = Printing canceled. editor.status.copy_as_html = Code formatted as HTML has been copied to the clipboard. +# Errors +editor.status.error_on = Error on +editor.status.missing.semi_colon = Missing a semi-colon +editor.status.missing.open_sq_bracket = Missing opening square bracket +editor.status.missing.closing_sq_bracket = Missing closing square bracket +editor.status.missing.open_paren = Missing opening parentheses +editor.status.missing.closing_paren = Missing closing parentheses +editor.status.missing.open_curly_bracket = Missing opening curly bracket +editor.status.missing.closing_curly_bracket = Missing closing curly bracket +editor.status.missing.add = Consider adding a +editor.status.reserved_words = "color" and "int" are reserved words & can't be used as variable names +# methoddef, varname, classname, namefield, typeA, typeB will be replaced with the correct value during runtime (don't translate) +editor.status.undefined_method = The method methoddef doesn't exist +editor.status.empty_param = The method methoddef doesn't expect any parameters +editor.status.wrong_param = The method methoddef expects parameters like this: +editor.status.undef_global_var = The global variable varname doesn't exist +editor.status.undef_class = The class classname doesn't exist +editor.status.undef_var = The variable varname doesn't exist +editor.status.undef_name = The name namefield can't be recognized +editor.status.type_mismatch = Type mismatch, typeA doesn't match with typeB + # Footer buttons editor.footer.errors = Errors editor.footer.errors.problem = Problem diff --git a/java/src/processing/mode/java/pdex/ErrorMessageSimplifier.java b/java/src/processing/mode/java/pdex/ErrorMessageSimplifier.java index e770e2c07..cd0db4a59 100644 --- a/java/src/processing/mode/java/pdex/ErrorMessageSimplifier.java +++ b/java/src/processing/mode/java/pdex/ErrorMessageSimplifier.java @@ -29,6 +29,7 @@ import org.eclipse.jdt.core.compiler.IProblem; import org.eclipse.jdt.internal.compiler.problem.DefaultProblem; import processing.app.Base; +import processing.app.Language; public class ErrorMessageSimplifier { /** @@ -99,12 +100,14 @@ public class ErrorMessageSimplifier { switch (iprob.getID()) { case IProblem.ParsingError: if (args.length > 0) { - result = "Error on \"" + args[0] + "\""; + result = Language.text("editor.status.error_on") + " \"" + args[0] + + "\""; } break; case IProblem.ParsingErrorDeleteToken: if (args.length > 0) { - result = "Error on \"" + args[0] + "\""; + result = Language.text("editor.status.error_on") + " \"" + args[0] + + "\""; } break; case IProblem.ParsingErrorInsertToComplete: @@ -114,13 +117,14 @@ public class ErrorMessageSimplifier { } else { if(args[0].equals("AssignmentOperator Expression")){ - result = "Consider adding a \"=\""; + result = Language.text("editor.status.missing.add") + " \"=\""; } else if (args[0].equalsIgnoreCase(") Statement")){ result = getErrorMessageForBracket(args[0].charAt(0)); } else { - result = "Error on \"" + args[0] + "\""; + result = Language.text("editor.status.error_on") + " \"" + args[0] + + "\""; } } } @@ -129,14 +133,16 @@ public class ErrorMessageSimplifier { if (args.length > 0) { if (args[1].equals("VariableDeclaratorId")) { if(args[0].equals("int")) { - result = "\"color\" and \"int\" are reserved words & can't be used as variable names"; + result = Language.text ("editor.status.reserved_words"); } else { - result = "Error on \"" + args[0] + "\""; + result = Language.text("editor.status.error_on") + " \"" + + args[0] + "\""; } } else { - result = "Error on \"" + args[0] + "\""; + result = Language.text("editor.status.error_on") + " \"" + args[0] + + "\""; } } break; @@ -147,18 +153,23 @@ public class ErrorMessageSimplifier { } else { if(args[1].equalsIgnoreCase("Statement")){ // See #3104 - result = "Error on \"" + args[0] + "\""; + result = Language.text("editor.status.error_on") + " \"" + + args[0] + "\""; } else { - result = "Error on \"" + args[0] + "\"Consider adding a \"" + args[1] + "\""; + result = Language.text("editor.status.error_on") + " \"" + + args[0] + Language.text("editor.status.missing.add") + args[1] + + "\""; } } } break; case IProblem.UndefinedMethod: if (args.length > 2) { - result = "The method \"" + args[args.length - 2] + "(" - + getSimpleName(args[args.length - 1]) + ")\" doesn't exist"; + result = Language.text("editor.status.undefined_method"); + String methodDef = "\"" + args[args.length - 2] + "(" + + getSimpleName (args[args.length - 1]) + ")\""; + result = result.replace("methoddef", methodDef); } break; case IProblem.ParameterMismatch: @@ -166,39 +177,55 @@ public class ErrorMessageSimplifier { // 2nd arg is method name, 3rd arg is correct param list if (args[2].trim().length() == 0) { // the case where no params are needed. - result = "The method \"" + args[1] - + "\" doesn't expect any parameters"; + result = Language.text("editor.status.empty_param"); + String methodDef = "\"" + args[1] + "()\""; + result = result.replace("methoddef", methodDef); } else { - result = "The method \"" + args[1] - + "\" expects parameters like this: " + args[1] + "(" - + getSimpleName(args[2]) + ")"; + result = Language.text("editor.status.wrong_param"); + + String method = "\"" + args[1] + "\""; + String methodDef = " \"" + args[1] + "(" + getSimpleName(args[2]) + + ")\""; + result = result.replace("method", method); + result += methodDef; } } break; case IProblem.UndefinedField: if (args.length > 0) { - result = "The global variable \"" + args[0] + "\" doesn't exist"; + result = Language.text("editor.status.undef_global_var"); + String variableName = "\"" + args[0] + "\""; + result = result.replace("varname", variableName); } break; case IProblem.UndefinedType: if (args.length > 0) { - result = "The class \"" + args[0] + "\" doesn't exist"; + String className = "\"" + args[0] + "\""; + result = Language.text("editor.status.undef_class"); + result = result.replace("classname", className); } break; case IProblem.UnresolvedVariable: if (args.length > 0) { - result = "The variable \"" + args[0] + "\" doesn't exist"; + String variableName = "\"" + args[0] + "\""; + result = Language.text("editor.status.undef_var"); + result = result.replace("varname", variableName); } break; case IProblem.UndefinedName: if (args.length > 0) { - result = "The name \"" + args[0] + "\" can't be recognized"; + String name = "\"" + args[0] + "\""; + result = Language.text("editor.status.undef_name"); + result = result.replace("namefield", name); } break; case IProblem.TypeMismatch: if (args.length > 1) { - result = "Type mismatch, \"" + getSimpleName(args[0]) - + "\" doesn't match with \"" + getSimpleName(args[1]) + "\""; + String typeA = "\"" + args[0] + "\""; + String typeB = "\"" + args[1] + "\""; + result = Language.text("editor.status.type_mismatch"); + result = result.replace("typeA", typeA); + result = result.replace("typeB", typeB); } break; } @@ -241,28 +268,33 @@ public class ErrorMessageSimplifier { String result = null; switch (c) { case ';': - result = "Missing a semi-colon \";\""; + result = Language.text("editor.status.missing.semi_colon") + " \";\""; break; case '[': - result = "Missing opening square bracket \"[\""; + result = Language.text("editor.status.missing.open_sq_bracket") + + " \"[\""; break; case ']': - result = "Missing closing square bracket \"]\""; + result = Language.text("editor.status.missing.closing_sq_bracket") + + " \"]\""; break; case '(': - result = "Missing opening parentheses \"(\""; + result = Language.text("editor.status.missing.open_paren") + " \"(\""; break; case ')': - result = "Missing closing parentheses \")\""; + result = Language.text("editor.status.missing.close_paren") + " \")\""; break; case '{': - result = "Missing opening curly bracket \"{\""; + result = Language.text("editor.status.missing.open_curly_bracket") + + " \"{\""; break; case '}': - result = "Missing closing curly bracket \"}\""; + result = Language.text("editor.status.missing.closing_curly_bracket") + + " \"}\""; break; default: - result = "Consider adding a \"" + c + "\""; + result = Language.text("editor.status.missing.default") + " \"" + c + + "\""; } return result; From c4f30e2728cd6735769a1366c697098a0bdab23a Mon Sep 17 00:00:00 2001 From: mtsio Date: Sun, 12 Apr 2015 21:20:40 +0300 Subject: [PATCH 2/2] added missing translations and editor error messages --- build/shared/lib/languages/PDE_el.properties | 88 ++++++++++++++++++-- 1 file changed, 80 insertions(+), 8 deletions(-) diff --git a/build/shared/lib/languages/PDE_el.properties b/build/shared/lib/languages/PDE_el.properties index 3f1916196..1dc25891b 100644 --- a/build/shared/lib/languages/PDE_el.properties +++ b/build/shared/lib/languages/PDE_el.properties @@ -289,10 +289,19 @@ editor.header.next_tab = Επόμενη Καρτέλα editor.header.delete.warning.title = Ναι, όχι. editor.header.delete.warning.text = Δεν μπορείτε να διαγράψετε την τελευταία ανοιχτή Καρτέλα του τελευταίου ανοιχτού Σχεδίου. -editor.status.autoformat.no_changes = Δεν χρειάζονται αλλαγές από την Αυτόματη μορφοποίηση. -editor.status.autoformat.finished = Ολοκληρώθηκε η Αυτόματη μορφοποίηση. -editor.status.find_reference.select_word_first = Επιλέξτε πρώτα μια λέξη προς αναζήτηση στην Processing Reference. -editor.status.find_reference.not_available = Δεν υπάρχει καταχώρηση για το "%s" στην Processing Reference. +# Tabs +editor.tab.new = Νέο Όνομα +editor.tab.new.description = Όνομα για το νέο αρχείο +editor.tab.rename = Νέο Όνομα +editor.tab.rename.description = Νέο όνομα για το αρχείο + +# Sketch +editor.sketch.rename.description = Νέο όνομα για το Σχέδιο + +editor.status.autoformat.no_changes = Δεν χρειάζονται αλλαγές από την Αυτόματη Μορφοποίηση. +editor.status.autoformat.finished = Ολοκληρώθηκε η Αυτόματη Μορφοποίηση. +editor.status.find_reference.select_word_first = Επιλέξτε πρώτα μια λέξη προς αναζήτηση στην Αναφορά. +editor.status.find_reference.not_available = Δεν υπάρχει καταχώρηση για το "%s" στην Αναφορά. editor.status.drag_and_drop.files_added.0 = Δεν προστέθηκαν αρχεία στο Σχέδιο. editor.status.drag_and_drop.files_added.1 = Ένα αρχείο προστέθηκε στο Σχέδιο. editor.status.drag_and_drop.files_added.n = %d αρχεία προστέθηκαν στο Σχέδιο. @@ -303,12 +312,61 @@ editor.status.printing = Εκτύπωση... editor.status.printing.done = Ολοκλήρωση εκτύπωσης. editor.status.printing.error = Σφάλμα κατά την εκτύπωση. editor.status.printing.canceled = Ακύρωση εκτύπωσης. -editor.status.copy_as_html = Ο κώδικας μορφοποιημένος ως HTML έχει αντιγραφεί στο πρόχειρο +editor.status.copy_as_html = Ο κώδικας μορφοποιημένος ως HTML έχει αντιγραφεί στο πρόχειρο. + +# Errors +editor.status.error_on = Σφάλμα στο +editor.status.missing.semi_colon = Λείπει το ερωτηματικό +editor.status.missing.open_sq_bracket = Λείπει η αριστερή αγκύλη +editor.status.missing.closing_sq_bracket = Λείπει η δεξιά αγκύλη +editor.status.missing.open_paren = Λείπει η αριστερή παρένθεση +editor.status.missing.closing_paren = Λείπει η δεξιά παρένθεση +editor.status.missing.open_curly_bracket = Λείπει το αριστερό άγκιστρο +editor.status.missing.closing_curly_bracket = Λείπει το δεξιό άγκιστρο +editor.status.missing.default = Δοκίμασε να προσθέσεις ένα +editor.status.reserved_words = Τα "color" και "int" είναι δεσμευμένες λέξεις & δεν μπορούν να χρησιμοποιηθούν ως ονόματα μεταβλητών +editor.status.reserved_words = Τα "color" και "int" δεν είναι έγκυρα ονόματα μεταβλητών, είναι δεσμευμένες λέξεις +# Τα #methoddef, varname, classname, varname, namefield, typeA, typeB θα αντικατασταθούν με τις κατάλληλες τιμές (δε χρειάζονται μετάφραση) +editor.status.undefined_method = Η μέθοδος methoddef δεν υπάρχει +editor.status.wrong_param = Οι παράμετροι της μεθόδου method πρέπει να είναι κάπως έτσι: +editor.status.empty_param = Η μέθοδος methoddef δεν παίρνει παραμέτρους +editor.status.undef_global_var = Η καθολική μεταβλητή varname δεν υπάρχει +editor.status.undef_class = Η κλάση classname δεν υπάρχει +editor.status.undef_var = Η μεταβλητή varname δεν υπάρχει +editor.status.undef_name = Το όνομα namefield δεν μπορεί να αναγνωριστεί +editor.status.type_mismatch = Δεν υπάρχει αντιστοιχία τύπων, ο typeA δεν συνδυάζεται με τον typeB + +# Footer buttons +editor.footer.errors = Σφάλματα +editor.footer.errors.problem = Πρόβλημα +editor.footer.errors.tab = Καρτέλα +editor.footer.errors.line = Γραμμή +editor.footer.console = Κονσόλα + +# New handler +new.messages.is_read_only = Το Σχέδιο είναι Μόνο για Ανάγνωση +new.messages.is_read_only.description = Μερικά αρχεία είναι σημειωμένα \"Μόνο για Ανάγνωση\", οπότε θα χρειαστεί να ξανα-αποθηκεύσεις το Σχέδιο σε διαφορετική θέση,\nκαι να προσπαθήσεις ξανά. + +# Rename handler +rename.messages.is_untitled = Το Σχέδιο Δεν έχει Τίτλο +rename.messages.is_untitled.description = Τι θα έλεγες να αποθηκεύσεις το Σχέδιο\nπριν προσπαθήσεις να το μετονομάσεις; +rename.messages.is_modified = Παρακαλώ αποθήκευσε το Σχέδιο πριν το μετονομάσεις. +rename.messages.is_read_only = Το Σχέδιο είναι Μόνο για Ανάγνωση +rename.messages.is_read_only.description = Μερικά αρχεία είναι σημειωμένα \"Μόνο για Ανάγνωση\", οπότε θα χρειαστεί να ξανα-αποθηκεύσεις το Σχέδιο σε διαφορετική θέση,\nκαι να προσπαθήσεις ξανά. + +# Delete handler +delete.messages.cannot_delete = Αποτυχία Διαγραφής +delete.messages.cannot_delete.description = Δε μπορείς να διαγράψεις ένα Σχέδιο που δεν έχει αποθηκευτεί. +delete.messages.cannot_delete.file = Δεν τα κατάφερα +delete.messages.cannot_delete.file.description = Η διαγραφή δεν έγινε +delete.messages.is_read_only = Το Σχέδιο είναι Μόνο για Ανάγνωση +delete.messages.is_read_only.description = Μερικά αρχεία είναι σημειωμένα \"Μόνο για Ανάγνωση\", οπότε θα χρειαστεί να ξανα-αποθηκεύσεις το Σχέδιο σε διαφορετική θέση,\nκαι να προσπαθήσεις ξανά. # --------------------------------------- -# Contribution Panel +# Contributions +# Contribution Panel contrib = Διαχειριστής Συνεισφορών contrib.manager_title.update = Διαχειριστής Ενημερώσεων contrib.manager_title.mode = Διαχειριστής Λειτουργιών @@ -349,10 +407,24 @@ contrib.remove = Διαγραφή contrib.install = Εγκατάσταση contrib.progress.installing = Γίνεται εγκατάσταση contrib.progress.starting = Εκκίνηση -contrib.progress.downloading = Μεταφόρτωση -contrib.download_error = Προέκυψε σφάλμα κατά την μεταφόρτωση της συνεισφοράς. +contrib.progress.downloading = Λήψη +contrib.download_error = Προέκυψε σφάλμα κατά την λήψη της συνεισφοράς. contrib.unsupported_operating_system = Το λειτουργικό σας σύστημα μάλλον δεν υποστηρίζεται. Επισκευθείτε την βιβλιοθήκη των %s για περισσότερα. +# Install on Startup +contrib.startup.errors.download_install = Σφάλμα κατά τη λήψη και εγκατάσταση του %s +contrib.startup.errors.temp_dir = Αδύνατη η εγγραφή στον προσωρινό κατάλογο κατά τη λήψη και εγκατάσταση του %s +contrib.startup.errors.new_marker = The unupdated contribution marker seems to not like %s. You may have to install it manually to update... + +# Install on Import +contrib.import.dialog.title = Missing Libraries Available +contrib.import.dialog.primary_text = The following imported libraries are available for download, but have not been installed. +contrib.import.dialog.secondary_text = Would you like to install them now? +contrib.import.progress.download = Downloading %s... +contrib.import.progress.install = Installing %s... +contrib.import.progress.done = %s has been installed. +contrib.import.progress.final_list = The following libraries have been installed: +contrib.import.errors.link = Error: The library %s has a strange looking download link. # --------------------------------------- # Color Chooser