From 9b8cb729d5105f34eb4b1e5975166c6c5f867fa2 Mon Sep 17 00:00:00 2001 From: Niki Roo Date: Sat, 26 Mar 2016 07:21:24 +0100 Subject: [PATCH] Translation: update system to support arguments, add some translations --- src/be/nikiroo/jvcard/launcher/Main.java | 17 ++++--- src/be/nikiroo/jvcard/resources/Trans.java | 47 +++++++++++++------ .../jvcard/resources/resources.properties | 12 +++++ .../jvcard/resources/resources_en.properties | 12 +++++ .../jvcard/resources/resources_fr.properties | 12 +++++ .../nikiroo/jvcard/tui/panes/ContactList.java | 22 ++++++--- 6 files changed, 94 insertions(+), 28 deletions(-) diff --git a/src/be/nikiroo/jvcard/launcher/Main.java b/src/be/nikiroo/jvcard/launcher/Main.java index 178dff1..1a77291 100644 --- a/src/be/nikiroo/jvcard/launcher/Main.java +++ b/src/be/nikiroo/jvcard/launcher/Main.java @@ -36,15 +36,18 @@ public class Main { static private Trans transService; /** - * Translate the given {@link StringId}. + * Translate the given {@link StringId} into user text. * - * @param id + * @param stringId * the ID to translate + * @param values + * the values to insert instead of the place holders in the + * translation * - * @return the translation + * @return the translated text with the given value where required */ - static public String trans(StringId id) { - return transService.trans(id); + static public String trans(StringId id, String... values) { + return transService.trans(id, (String[]) values); } /** @@ -160,14 +163,14 @@ public class Main { System.exit(ERR_SYNTAX); return; } - + i18nDir = args[index]; } else { filesTried = true; files.addAll(open(arg)); } } - + // Force headless mode if we run in forced-text mode if (textMode != null && textMode) { // same as -Djava.awt.headless=true diff --git a/src/be/nikiroo/jvcard/resources/Trans.java b/src/be/nikiroo/jvcard/resources/Trans.java index 537b3a3..8dce6f1 100644 --- a/src/be/nikiroo/jvcard/resources/Trans.java +++ b/src/be/nikiroo/jvcard/resources/Trans.java @@ -19,6 +19,7 @@ import java.util.ResourceBundle; public class Trans { private ResourceBundle map; private boolean utf = true; + private Locale locale; /** * Create a translation service with the default language. @@ -43,11 +44,16 @@ public class Trans { * * @param stringId * the ID to translate + * @param values + * the values to insert instead of the place holders in the + * translation * - * @return the translated text + * @return the translated text with the given value where required */ - public String trans(StringId stringId) { + public String trans(StringId stringId, String... values) { StringId id = stringId; + String result = null; + if (!isUnicode()) { try { id = StringId.valueOf(stringId.name() + "_NOUTF"); @@ -57,18 +63,19 @@ public class Trans { } if (id == StringId.NULL) { - return ""; - } - - if (id == StringId.DUMMY) { - return "[dummy]"; - } - - if (map.containsKey(id.name())) { - return map.getString(id.name()); + result = ""; + } else if (id == StringId.DUMMY) { + result = "[dummy]"; + } else if (map.containsKey(id.name())) { + result = map.getString(id.name()); + } else { + result = id.toString(); } - return id.toString(); + if (values != null && values.length > 0) + return String.format(locale, result, (Object[]) values); + else + return result; } /** @@ -98,7 +105,8 @@ public class Trans { * instance */ private void setLanguage(String language) { - map = Bundles.getBundle("resources", getLocaleFor(language)); + locale = getLocaleFor(language); + map = Bundles.getBundle("resources", locale); } /** @@ -246,7 +254,10 @@ public class Trans { builder.append("FORMAT: " + format); } - builder.append(")\n# "); + builder.append(")"); + if (info.length() > 0) { + builder.append("\n# "); + } } builder.append(info); @@ -298,5 +309,13 @@ public class Trans { KEY_ACTION_FULLSCREEN, // @Meta(what = "", where = "", format = "", info = "") KEY_ACTION_SWITCH_FORMAT, // multi-usage + @Meta(what = "Action key", where = "Contact list, Edit Contact", format = "", info = "Add a new contact/field") + KEY_ACTION_ADD, // + @Meta(what = "User question: TEXT", where = "Contact list", format = "", info = "New contact") + ASK_USER_CONTACT_NAME, // + @Meta(what = "User question: [Y|N]", where = "Contact list", format = "%s = contact name", info = "Delete contact") + CONFIRM_USER_DELETE_CONTACT, // + @Meta(what = "Error", where = "Contact list", format = "%s = contact name", info = "cannot delete a contact") + ERR_CANNOT_DELETE_CONTACT, // }; } diff --git a/src/be/nikiroo/jvcard/resources/resources.properties b/src/be/nikiroo/jvcard/resources/resources.properties index c35e079..ac55df2 100644 --- a/src/be/nikiroo/jvcard/resources/resources.properties +++ b/src/be/nikiroo/jvcard/resources/resources.properties @@ -26,3 +26,15 @@ DEAULT_FIELD_SEPARATOR_NOUTF = | KEY_ACTION_INVERT = Invert colours KEY_ACTION_FULLSCREEN = Fullscreen KEY_ACTION_SWITCH_FORMAT = Change view +# (WHAT: Action key, WHERE: Contact list, Edit Contact) +# Add a new contact/field +KEY_ACTION_ADD = Add +# (WHAT: User question: TEXT, WHERE: Contact list) +# New contact +ASK_USER_CONTACT_NAME = New contact name: +# (WHAT: User question: [Y|N], WHERE: Contact list, FORMAT: %s = contact name) +# Delete contact +CONFIRM_USER_DELETE_CONTACT = Delete "%s"? [Y/N] +# (WHAT: Error, WHERE: Contact list, FORMAT: %s = contact name) +# cannot delete a contact +ERR_CANNOT_DELETE_CONTACT = Cannot delete "%s" diff --git a/src/be/nikiroo/jvcard/resources/resources_en.properties b/src/be/nikiroo/jvcard/resources/resources_en.properties index eb08a13..a2e41f2 100644 --- a/src/be/nikiroo/jvcard/resources/resources_en.properties +++ b/src/be/nikiroo/jvcard/resources/resources_en.properties @@ -26,3 +26,15 @@ DEAULT_FIELD_SEPARATOR_NOUTF = | KEY_ACTION_INVERT = Invert colours KEY_ACTION_FULLSCREEN = Fullscreen KEY_ACTION_SWITCH_FORMAT = Change view +# (WHAT: Action key, WHERE: Contact list, Edit Contact) +# Add a new contact/field +KEY_ACTION_ADD = Add +# (WHAT: User question: TEXT, WHERE: Contact list) +# New contact +ASK_USER_CONTACT_NAME = New contact name: +# (WHAT: User question: [Y|N], WHERE: Contact list, FORMAT: %s = contact name) +# Delete contact +CONFIRM_USER_DELETE_CONTACT = Delete "%s"? [Y/N] +# (WHAT: Error, WHERE: Contact list, FORMAT: %s = contact name) +# cannot delete a contact +ERR_CANNOT_DELETE_CONTACT = Cannot delete "%s" diff --git a/src/be/nikiroo/jvcard/resources/resources_fr.properties b/src/be/nikiroo/jvcard/resources/resources_fr.properties index 9f3841c..d7fca13 100644 --- a/src/be/nikiroo/jvcard/resources/resources_fr.properties +++ b/src/be/nikiroo/jvcard/resources/resources_fr.properties @@ -26,3 +26,15 @@ DEAULT_FIELD_SEPARATOR_NOUTF = | KEY_ACTION_INVERT = Couleurs inversées KEY_ACTION_FULLSCREEN = Plein écran KEY_ACTION_SWITCH_FORMAT = Autre affichage +# (WHAT: Action key, WHERE: Contact list, Edit Contact) +# Add a new contact/field +KEY_ACTION_ADD = Ajouter +# (WHAT: User question: TEXT, WHERE: Contact list) +# New contact +ASK_USER_CONTACT_NAME = Nom du nouveau contact: +# (WHAT: User question: [Y|N], WHERE: Contact list, FORMAT: %s = contact name) +# Delete contact +CONFIRM_USER_DELETE_CONTACT = Supprimer "%s"? [Y/N] +# (WHAT: Error, WHERE: Contact list, FORMAT: %s = contact name) +# cannot delete a contact +ERR_CANNOT_DELETE_CONTACT = Impossible de supprimer "%s" diff --git a/src/be/nikiroo/jvcard/tui/panes/ContactList.java b/src/be/nikiroo/jvcard/tui/panes/ContactList.java index 73c6a84..a68efa2 100644 --- a/src/be/nikiroo/jvcard/tui/panes/ContactList.java +++ b/src/be/nikiroo/jvcard/tui/panes/ContactList.java @@ -92,7 +92,8 @@ public class ContactList extends MainContentList { List actions = new LinkedList(); // TODO ui - actions.add(new KeyAction(Mode.ASK_USER, 'a', Trans.StringId.DUMMY) { + actions.add(new KeyAction(Mode.ASK_USER, 'a', + Trans.StringId.KEY_ACTION_ADD) { @Override public Object getObject() { return card; @@ -100,8 +101,7 @@ public class ContactList extends MainContentList { @Override public String getQuestion() { - // TODO i18n - return "new contact name: "; + return Main.trans(Trans.StringId.ASK_USER_CONTACT_NAME); } @Override @@ -125,8 +125,12 @@ public class ContactList extends MainContentList { @Override public String getQuestion() { - // TODO i18n - return "Delete contact? [Y/N]"; + Contact contact = getSelectedContact(); + String contactName = "null"; + if (contact != null) + contactName = "" + contact.getPreferredDataValue("FN"); + + return Main.trans(Trans.StringId.CONFIRM_USER_DELETE_CONTACT, contactName); } @Override @@ -138,8 +142,12 @@ public class ContactList extends MainContentList { return null; } - // TODO i18n - return "Cannot delete contact"; + String contactName = "null"; + if (contact != null) + contactName = "" + contact.getPreferredDataValue("FN"); + + return Main.trans(Trans.StringId.ERR_CANNOT_DELETE_CONTACT, + contactName); } return null; -- 2.27.0