From 6d7f8e05c8feda81e05a5a9adbea7669410e33ec Mon Sep 17 00:00:00 2001 From: j2blake Date: Thu, 9 May 2013 12:24:01 -0400 Subject: [PATCH 01/34] VIVO-84 Use language filtering on the display model This doesn't answer the questions: 1) How do we edit new pages or existing pages? 2) What is the generalized procedure for adding another language? --- .../vitro/webapp/controller/VitroRequest.java | 34 ++------ .../webapp/filters/VitroRequestPrep.java | 21 +++++ .../filters/WebappDaoFactorySDBPrep.java | 31 +++---- .../filter/LanguageFilteringRDFService.java | 5 ++ .../filter/LanguageFilteringUtils.java | 81 +++++++++++++++++++ 5 files changed, 127 insertions(+), 45 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/filter/LanguageFilteringUtils.java diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroRequest.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroRequest.java index 88416f911..53587eae2 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroRequest.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroRequest.java @@ -214,32 +214,14 @@ public class VitroRequest extends HttpServletRequestWrapper { } //Get the display and editing configuration model - public OntModel getDisplayModel(){ - //bdc34: I have no idea what the correct way to get this model is - - //try from the request - if( _req.getAttribute("displayOntModel") != null ){ - return (OntModel) _req.getAttribute(DISPLAY_ONT_MODEL); - - //try from the session - } else { - HttpSession session = _req.getSession(false); - if( session != null ){ - if( session.getAttribute(DISPLAY_ONT_MODEL) != null ){ - return (OntModel) session.getAttribute(DISPLAY_ONT_MODEL); - - //try from the context - }else{ - if( session.getServletContext().getAttribute(DISPLAY_ONT_MODEL) != null){ - return (OntModel)session.getServletContext().getAttribute(DISPLAY_ONT_MODEL); - } - } - } - } - - //nothing worked, could not find display model - log.error("No display model could be found."); - return null; + public OntModel getDisplayModel(){ + Object value = _req.getAttribute(DISPLAY_ONT_MODEL); + if (value instanceof OntModel) { + return (OntModel) value; + } else { + log.error("No display model on the VitroRequest. Expecting an OntModel but found " + value); + return null; + } } /** diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/VitroRequestPrep.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/VitroRequestPrep.java index f1d7a6e71..3f58cd191 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/VitroRequestPrep.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/VitroRequestPrep.java @@ -11,6 +11,7 @@ import static edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary.USE_MODEL_P import static edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary.USE_TBOX_MODEL_PARAM; import java.io.IOException; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -47,10 +48,14 @@ import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.FilterFactory; import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.HideFromDisplayByPolicyFilter; import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFilters; import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext; +import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceGraph; import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroModelSource; import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactoryJena; import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactorySDB; +import edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringRDFService; +import edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringUtils; import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceUtils; +import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.jena.model.RDFServiceModel; import edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetupBase; /** @@ -133,6 +138,22 @@ public class VitroRequestPrep implements Filter { log.debug("Found a WebappDaoFactory in the session and using it for this request"); } + // Set up the DisplayModel, with language filtering if appropriate. + OntModel displayModel; + Object displayModelObject = req.getSession().getAttribute(DISPLAY_ONT_MODEL); + if (displayModelObject instanceof OntModel) { + displayModel = (OntModel) displayModelObject; + } else { + displayModel = (OntModel) _context.getAttribute(DISPLAY_ONT_MODEL); + } + + if (Boolean.valueOf(ConfigurationProperties.getBean(vreq).getProperty( + "RDFService.languageFilter", "true"))) { + displayModel = LanguageFilteringUtils.wrapOntModelInALanguageFilter(displayModel, req); + } + vreq.setAttribute(DISPLAY_ONT_MODEL, displayModel); + + //Do model switching and replace the WebappDaoFactory with //a different version if requested by parameters wdf = checkForModelSwitching(vreq, wdf); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/WebappDaoFactorySDBPrep.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/WebappDaoFactorySDBPrep.java index 4bb7fda8e..5dd3652f7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/WebappDaoFactorySDBPrep.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/WebappDaoFactorySDBPrep.java @@ -3,10 +3,7 @@ package edu.cornell.mannlib.vitro.webapp.filters; import java.io.IOException; -import java.util.ArrayList; -import java.util.Enumeration; import java.util.List; -import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -22,6 +19,7 @@ import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.rdf.model.ModelFactory; @@ -38,6 +36,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactorySDB.SDBDatasetM import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceFactory; import edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringRDFService; +import edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringUtils; import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceUtils; public class WebappDaoFactorySDBPrep implements Filter { @@ -88,18 +87,10 @@ public class WebappDaoFactorySDBPrep implements Filter { String defaultNamespace = (String) _ctx.getAttribute("defaultNamespace"); WebappDaoFactory wadf = null; VitroRequest vreq = new VitroRequest((HttpServletRequest) request); - - List langs = new ArrayList(); + + log.debug("Accept-Language: " + vreq.getHeader("Accept-Language")); + List langs = LanguageFilteringUtils.localesToLanguages(vreq.getLocales()); - log.debug("Accept-Language: " + vreq.getHeader("Accept-Language")); - Enumeration locs = vreq.getLocales(); - while (locs.hasMoreElements()) { - Locale locale = locs.nextElement(); - langs.add(locale.toString().replace("_", "-")); - } - if (langs.isEmpty()) { - langs.add("en"); - } WebappDaoFactoryConfig config = new WebappDaoFactoryConfig(); config.setDefaultNamespace(defaultNamespace); config.setPreferredLanguages(langs); @@ -110,12 +101,14 @@ public class WebappDaoFactorySDBPrep implements Filter { RDFService unfilteredRDFService = factory.getShortTermRDFService(); RDFService rdfService = null; - if (!"false".equals( - ConfigurationProperties.getBean(vreq).getProperty( - "RDFService.languageFilter", "true"))) { - rdfService = new LanguageFilteringRDFService(unfilteredRDFService, langs); + if (Boolean.valueOf(ConfigurationProperties.getBean(vreq).getProperty( + "RDFService.languageFilter", "true"))) { + rdfService = new LanguageFilteringRDFService(unfilteredRDFService, langs); + oms = LanguageFilteringUtils.replaceDisplayModelInSelector(oms, + LanguageFilteringUtils.wrapOntModelInALanguageFilter(oms.getDisplayModel(), request)); + baseOms = LanguageFilteringUtils.replaceDisplayModelInSelector(baseOms, oms.getDisplayModel()); } else { - rdfService = unfilteredRDFService; + rdfService = unfilteredRDFService; } Dataset dataset = new RDFServiceDataset(rdfService); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/filter/LanguageFilteringRDFService.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/filter/LanguageFilteringRDFService.java index 1df269857..936462153 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/filter/LanguageFilteringRDFService.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/filter/LanguageFilteringRDFService.java @@ -8,8 +8,10 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.Enumeration; import java.util.Iterator; import java.util.List; +import java.util.Locale; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -368,17 +370,20 @@ public class LanguageFilteringRDFService implements RDFService { int index = langs.indexOf(lang); if (index >= 0) { + log.debug("languageIndex for '" + lang + "' is " + index); return index; } if (lang.length() > 2) { index = langs.indexOf(lang.substring(0, 2)); if (index >= 0) { + log.debug("languageIndex for '" + lang + "' is " + index + inexactMatchPenalty); return index + inexactMatchPenalty; } } if (lang.isEmpty()) { + log.debug("languageIndex for '" + lang + "' is " + noLanguage); return noLanguage; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/filter/LanguageFilteringUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/filter/LanguageFilteringUtils.java new file mode 100644 index 000000000..aae04c1b5 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/filter/LanguageFilteringUtils.java @@ -0,0 +1,81 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.rdfservice.filter; + +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.Locale; + +import javax.servlet.ServletRequest; + +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.ontology.OntModelSpec; +import com.hp.hpl.jena.rdf.model.ModelFactory; + +import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector; +import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelectorImpl; +import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceGraph; +import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.jena.model.RDFServiceModel; + +/** + * Some methods that will come in handy when dealing with Language Filtering + */ +public class LanguageFilteringUtils { + + /** + * Take an Enumeration of Locale objects, such as we might get from a + * request, and convert to a List of langauage strings, such as are needed + * by the LanguageFilteringRDFService. + * + * While converting, change all underscores (as in Locale names) to hyphens + * (as in RDF language specifiers). + */ + public static List localesToLanguages(Enumeration locales) { + List langs = new ArrayList<>(); + while (locales.hasMoreElements()) { + Locale locale = (Locale) locales.nextElement(); + langs.add(locale.toString().replace("_", "-")); + } + if (langs.isEmpty()) { + langs.add("en"); + } + return langs; + + } + + /** + * Make a new OntModelSelector that containing a new display model and all + * of the other models in the original OntModelSelector. + */ + public static OntModelSelector replaceDisplayModelInSelector( + OntModelSelector oldOms, OntModel newDisplayModel) { + OntModelSelectorImpl newOms = new OntModelSelectorImpl(); + newOms.setABoxModel(oldOms.getABoxModel()); + newOms.setApplicationMetadataModel(oldOms.getApplicationMetadataModel()); + newOms.setDisplayModel(newDisplayModel); + newOms.setFullModel(oldOms.getFullModel()); + newOms.setTBoxModel(oldOms.getTBoxModel()); + newOms.setUserAccountsModel(oldOms.getUserAccountsModel()); + return newOms; + } + + /** + * Add a Language Filtering layer to an OntModel by treating it as an RDFService. + */ + public static OntModel wrapOntModelInALanguageFilter(OntModel rawModel, + ServletRequest req) { + /** This is some nasty layering. Could we do this more easily? */ + List languages = localesToLanguages(req.getLocales()); + return ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, + RDFServiceGraph.createRDFServiceModel( + new RDFServiceGraph( + new LanguageFilteringRDFService( + new RDFServiceModel(rawModel), languages)))); + } + + private LanguageFilteringUtils() { + // Nothing to instantiate + } + +} From fa68e0c05775f13c08c9fd09506f5a92393ef0cb Mon Sep 17 00:00:00 2001 From: tworrall Date: Mon, 13 May 2013 12:17:39 -0400 Subject: [PATCH 02/34] template changes for internationalization -- replaced displayed text with calls to properties file containing actual strings --- webapp/web/i18n/all.properties | 148 ++++++++++++++++++ webapp/web/i18n/all_es.properties | 146 +++++++++++++++++ .../body/admin/admin-restrictLogins.ftl | 14 +- .../freemarker/body/admin/admin-showAuth.ftl | 36 ++--- .../body/admin/admin-showThreads.ftl | 10 +- .../freemarker/body/admin/searchIndex.ftl | 26 +-- .../body/admin/startupStatus-display.ftl | 12 +- .../body/admin/startupStatus-displayRaw.ftl | 16 +- .../body/contactForm/contactForm-backup.ftl | 4 +- .../contactForm/contactForm-confirmation.ftl | 6 +- .../body/contactForm/contactForm-email.ftl | 10 +- .../body/contactForm/contactForm-error.ftl | 4 +- .../body/contactForm/contactForm-form.ftl | 16 +- .../body/individual/individual-help.ftl | 4 +- .../body/individual/individual-menu.ftl | 6 +- .../body/individual/individual-vitro.ftl | 2 +- .../individual/manageLabelsForIndividual.ftl | 12 +- .../individual/individual-adminPanel.ftl | 12 +- .../individual/individual-properties.ftl | 12 +- .../individual-property-group-menus.ftl | 8 +- .../individual-property-group-tabs.ftl | 12 +- .../individual-propertyGroupMenu.ftl | 2 +- .../individual/propStatement-default.ftl | 2 +- .../individual/propStatement-simple.ftl | 3 +- 24 files changed, 407 insertions(+), 116 deletions(-) diff --git a/webapp/web/i18n/all.properties b/webapp/web/i18n/all.properties index ad5ec0618..72f4b4935 100644 --- a/webapp/web/i18n/all.properties +++ b/webapp/web/i18n/all.properties @@ -215,4 +215,152 @@ error_no_role = You must select a role. error_no_password = No password supplied. error_password_length = Password must be between {0} and {1} characters. error_password_mismatch = Passwords do not match. + +# +# "partial" individual templates ( /templates/freemarker/body/partials/individual ) +# +manage_publications = manage publications +manage_grants_and_projects = manage grants & projects +manage_affiliated_people = manage affiliated people + +group_name = group name +scroll_to_menus = scroll to property group menus +properties_capitalized = Properties +properties = properties +view_all = View All + +name = name + +admin_panel = Admin Panel +edit_this_individual = Edit this individual +verbose_status_on = on +verbose_status_off = off +verbose_property_status = Verbose property display is +verbose_control = verbose control +verbose_turn_on = Turn on +verbose_turn_off = Turn off +resource_uri = Resource URI + +individual_not_found = Individual not found: +entity_to_query_for = This id is the id of the entity to query for. netid also works. + +menu_ordering = Menu Ordering +refresh_page_after_reordering = Refresh page after reordering menu items +display_has_element_error = There was an error in the system. The display:hasElement property could not be retrieved. + +return_to = return to {0} + +# +# admin templates ( /templates/freemarker/body/admin ) +# +logins_already_restricted = Logins are already restricted. +logins_not_already_restricted = Logins are already not restricted. +logins_restricted = Logins are now restricted. +logins_not_restricted = Logins are no longer restricted. +remove_restrictions = Remove Restrictions +restrict_logins = Restrict Logins +error_alert_icon = Error alert icon + +current_user = Current user +ext_auth_id = External Auth ID +not_logged_in = Not logged in +identifiers = Identifiers +associated_individuals = Associated Individuals +match_by = match by {0} +matching_prop_not_defined = matching property is not defined +may_edit = May edit +may_not_edit = May not edit +none = none +identifier_factories = Identifier factories +policies = Policies +authenticator = Authenticator + +background_threads = Background Threads +name_capitalized = Name +work_level = Work level +since = Since +flags = Flags + +search_index_status = Search Index Status +search_index_not_connected = The search index is not connected. +failed = failed +check_startup_status = Check startup status page and/or Tomcat logs for more information. +search_indexer_idle = The search indexer is idle. +most_recent_update = The most recent update was at +rebuild_button = Rebuild +reset_search_index = Reset the search index and re-populate it. +preparing_to_rebuild_index = Preparing to rebuild the search index. +since_elapsed_time = since {0}, elapsed time {1} +current_task = {0} the search index +since_elapsed_time_est_total = since {0}, elapsed time {1}, estimated total time {2} +index_recs_completed = Completed {0} out of {1} index records. + +fatal_error = Fatal Error +fatal_error_detected = {0} detected a fatal error during startup. +warning = Warning +warnings_issued = {0} issued warnings during startup. +startup_trace = Startup trace +full_list_startup = The full list of startup events and messages. +startup_status = Startup Status +continue = Continue + +# +# contact form templates ( /templates/freemarker/body/contactForm ) +# +rejected_spam = REJECTED - SPAM +feedback_thanks_heading = Thank you for your feedback +feedback_thanks_text = Thank you for contacting our curation and development team. We will respond to your inquiry as soon as possible. +return_to_the = Return to the +home_page = home page +from = From +ip_address = IP address +viewing_page = Likely viewing page +comments = Comments +interest_thanks = Thank you for your interest in {0}. Please submit this form with questions, comments, or feedback about the content of this site. +full_name = Full name +comments_questions = Comments, questions, or suggestions +enter_in_security_field = Please enter the letters displayed below into the security field +send_mail = Send Mail + +# +# display edit template ( /templates/freemarker/body/displayEdit ) +# +display_admin_header = Display Admin and Configuration + +# +# error templates ( /templates/freemarker/body/error ) +# +we_have_an_error = There was an error in the system. +error_was_reported = This error has been reported to the site administrator. +error_message = Error message +stack_trace = Stack trace +trace_available = full trace available in the vivo log +caused_by = Caused by +requested_url = Requested url +error_occurred = An error occurred on the VIVO site +error_occurred_at = An error occurred on your VIVO site at {0}. + +# +# login templates ( /templates/freemarker/body/login ) +# +internal_login = Internal Login +no_email_supplied = No email supplied. +no_password_supplied = No password supplied. +logins_temporarily_disabled = User logins are temporarily disabled while the system is being maintained. +incorrect_email_password = Email or Password was incorrect. +password_length = Password must be between 6 and 12 characters. +password_mismatch = Passwords do not match. +new_pwd_matches_existing = Your new password must be different from your existing password. +enter_email_pasword = Enter the email address and password for your internal Vitro account. +change_password = You must change your password to log in. +new_password = New Password +confirm_password = Confirm Password +email_capitalized = Email +password_capitalized = Password +login_button = Log in +fake_external_auth = Fake External Authentication +enter_id_to_login = Enter the userID that you want to sign in as, or click Cancel. +username = Username +submit_button = Submit + \ No newline at end of file diff --git a/webapp/web/i18n/all_es.properties b/webapp/web/i18n/all_es.properties index ecb295fec..4e698c58d 100644 --- a/webapp/web/i18n/all_es.properties +++ b/webapp/web/i18n/all_es.properties @@ -41,3 +41,149 @@ submit_save = Guardar foto confirm_delete = ¿Seguro que quiere borrar esta foto? +# +# "partial" individual templates ( /templates/freemarker/body/partials/individual ) +# +manage_publications = gestionar las publicaciones +manage_grants_and_projects = gestión de subvenciones y proyectos +manage_affiliated_people = gestión de personas afiliadas + +group_name = nombre de grupo +scroll_to_menus = desplazarse a los menús de grupo de propiedad +properties_capitalized = Propiedades +properties = propiedades +view_all = Ver Todos + +name = nombre + +admin_panel = Panel de Admin +edit_this_individual = Editar esta Individuo +verbose_status_on = encendido +verbose_status_off = desconectado +verbose_property_status = Display propiedad verbosa es +verbose_control = mando del verboso +verbose_turn_on = encender +verbose_turn_off = desconectar +resource_uri = URI de recurso + +individual_not_found = translate: Individual not found: +entity_to_query_for = translate: This id is the id of the entity to query for. netid also works. + = translate: +menu_ordering = translate: Menu Ordering +refresh_page_after_reordering = translate: Refresh page after reordering menu items +display_has_element_error = translate: There was an error in the system. The display:hasElement property could not be retrieved. + +return_to = translate: return to {0} + +# +# admin templates ( /templates/freemarker/body/admin ) +# +logins_already_restricted = translate: Logins are already restricted. +logins_not_already_restricted = translate: Logins are already not restricted. +logins_restricted = translate: Logins are now restricted. +logins_not_restricted = translate: Logins are no longer restricted. +remove_restrictions = translate: Remove Restrictions +restrict_logins = translate: Restrict Logins +error_alert_icon = translate: Error alert icon + +current_user = translate: Current user +ext_auth_id = translate: External Auth ID +not_logged_in = translate: Not logged in +identifiers = translate: Identifiers +associated_individuals = translate: Associated Individuals +match_by = translate: match by {0} +matching_prop_not_defined = translate: matching property is not defined +may_edit = translate: May edit +may_not_edit = translate: May not edit +none = translate: none +identifier_factories = translate: Identifier factories +policies = translate: Policies +authenticator = translate: Authenticator + +background_threads = translate: Background Threads +name_capitalized = translate: Name +work_level = translate: Work level +since = translate: Since +flags = translate: Flags + +search_index_status = translate: Search Index Status +search_index_not_connected = translate: The search index is not connected. +failed = translate: failed +check_startup_status = translate: Check startup status page and/or Tomcat logs for more information. +search_indexer_idle = translate: The search indexer is idle. +most_recent_update = translate: The most recent update was at +rebuild_button = translate: Rebuild +reset_search_index = translate: Reset the search index and re-populate it. +preparing_to_rebuild_index = translate: Preparing to rebuild the search index. +since_elapsed_time = translate: since {0}, elapsed time {1} +current_task = translate: {0} the search index +since_elapsed_time_est_total = translate: since {0}, elapsed time {1}, estimated total time {2} +index_recs_completed = translate: Completed {0} out of {1} index records. + +fatal_error = translate: Fatal Error +fatal_error_detected = translate: {0} detected a fatal error during startup. +warning = translate: Warning +warnings_issued = translate: {0} issued warnings during startup. +startup_trace = translate: Startup trace +full_list_startup = translate: The full list of startup events and messages. +startup_status = translate: Startup Status +continue = translate: Continue + +# +# contact form templates ( /templates/freemarker/body/contactForm ) +# +rejected_spam = translate: REJECTED - SPAM +feedback_thanks_heading = translate: Thank you for your feedback +feedback_thanks_text = translate: Thank you for contacting our curation and development team. We will respond to your inquiry as soon as possible. +return_to_the = translate: Return to the +home_page = translate: home page +from = translate: From +ip_address = translate: IP address +viewing_page = translate: Likely viewing page +comments = translate: Comments +interest_thanks = translate: Thank you for your interest in {0}. Please submit this form with questions, comments, or feedback about the content of this site. +full_name = translate: Full name +comments_questions = translate: Comments, questions, or suggestions +enter_in_security_field = translate: Please enter the letters displayed below into the security field +send_mail = translate: Send Mail + +# +# display edit template ( /templates/freemarker/body/displayEdit ) +# +display_admin_header = translate: Display Admin and Configuration + +# +# error templates ( /templates/freemarker/body/error ) +# +we_have_an_error = translate: There was an error in the system. +error_was_reported = translate: This error has been reported to the site administrator. +error_message = translate: Error message +stack_trace = translate: Stack trace +trace_available = translate: full trace available in the vivo log +caused_by = translate: Caused by +requested_url = translate: Requested url +error_occurred = translate: An error occurred on the VIVO site +error_occurred_at = translate: An error occurred on your VIVO site at {0}. + +# +# login templates ( /templates/freemarker/body/login ) +# +internal_login = translate: Internal Login +no_email_supplied = translate: No email supplied. +no_password_supplied = translate: No password supplied. +logins_temporarily_disabled = translate: User logins are temporarily disabled while the system is being maintained. +incorrect_email_password = translate: Email or Password was incorrect. +password_length = translate: Password must be between 6 and 12 characters. +password_mismatch = translate: Passwords do not match. +new_pwd_matches_existing = translate: Your new password must be different from your existing password. +enter_email_pasword = translate: Enter the email address and password for your internal Vitro account. +change_password = translate: You must change your password to log in. +new_password = translate: New Password +confirm_password = translate: Confirm Password +email_capitalized = translate: Email +password_capitalized = translate: Password +login_button = translate: Log in +fake_external_auth = translate: Fake External Authentication +enter_id_to_login = translate: Enter the userID that you want to sign in as, or click Cancel. +username = translate: Username +submit_button = translate: Submit diff --git a/webapp/web/templates/freemarker/body/admin/admin-restrictLogins.ftl b/webapp/web/templates/freemarker/body/admin/admin-restrictLogins.ftl index bcea8f669..54f217d77 100644 --- a/webapp/web/templates/freemarker/body/admin/admin-restrictLogins.ftl +++ b/webapp/web/templates/freemarker/body/admin/admin-restrictLogins.ftl @@ -4,26 +4,26 @@

Restrict Logins

<#if messageAlreadyRestricted??> - <#assign errorMessage = "Logins are already restricted." /> + <#assign errorMessage = "${i18n().logins_already_restricted}" /> <#if messageAlreadyOpen??> - <#assign errorMessage = "Logins are already not restricted." /> + <#assign errorMessage = "${i18n().logins_not_already_restricted}" /> <#if errorMessage?has_content> <#if messageRestricting??> - <#assign successMessage = "Logins are now restricted." /> + <#assign successMessage = "${i18n().logins_restricted}" /> <#if messageOpening??> - <#assign successMessage = "Logins are no longer restricted." /> + <#assign successMessage = "${i18n().logins_not_restricted}" /> <#if successMessage?has_content> @@ -36,9 +36,9 @@
<#if restricted == true>

Logins are restricted

-

Remove Restrictions

+

${i18n().remove_restrictions}

<#else>

Logins are open to all

-

Restrict Logins

+

${i18n().Restrict Logins}

diff --git a/webapp/web/templates/freemarker/body/admin/admin-showAuth.ftl b/webapp/web/templates/freemarker/body/admin/admin-showAuth.ftl index 6a7c981f4..467cec196 100644 --- a/webapp/web/templates/freemarker/body/admin/admin-showAuth.ftl +++ b/webapp/web/templates/freemarker/body/admin/admin-showAuth.ftl @@ -7,24 +7,24 @@ ${stylesheets.add('Authorization Info
-

Current user

+

${i18n().current_user}

<#if currentUser?has_content> - - - - - + + + + + <#list currentUser.permissionSetUris as role> - + <#else> - +
URI:${currentUser.uri}
First name:${currentUser.firstName}
Last name:${currentUser.lastName}
Email:${currentUser.emailAddress}
External Auth ID:${currentUser.externalAuthId}
Login count:${currentUser.loginCount}
${i18n().first_name}:${currentUser.firstName}
${i18n().last_name}:${currentUser.lastName}
${i18n().email_Address}:${currentUser.emailAddress}
${i18n().external_auth_id}:${currentUser.externalAuthId}
${i18n().login_count}:${currentUser.loginCount}
Role:${role}
${i18n().role}:${role}
Not logged in
${i18n().not_logged_in}
-

Identifiers:

+

${i18n().identifiers}:

<#list identifiers as identifier> @@ -34,11 +34,11 @@ ${stylesheets.add('

- AssociatedIndividuals: + ${i18n().associated_individuals}: <#if matchingProperty??> - (match by ${matchingProperty}) + (${i18n().match_by(matchingProperty)}) <#else> - (matching property is not defined) + (${i18n().matching_prop_not_defined})

@@ -47,18 +47,18 @@ ${stylesheets.add(' <#if associatedIndividual.editable> - + <#else> - + <#else> - +
${associatedIndividual.uri}May edit${i18n().may_edit}May not edit${i18n().may_not_edit}
none
${i18n().none}
-

Identifier factories:

+

${i18n().identifier_factories}:

<#list factories as factory> @@ -67,7 +67,7 @@ ${stylesheets.add('
-

Policies:

+

${i18n().policies}:

<#list policies as policy> @@ -76,7 +76,7 @@ ${stylesheets.add('
-

Authenticator:

+

${i18n().authenticator}:

diff --git a/webapp/web/templates/freemarker/body/admin/admin-showThreads.ftl b/webapp/web/templates/freemarker/body/admin/admin-showThreads.ftl index 6b2b9a127..d9b5d8e38 100644 --- a/webapp/web/templates/freemarker/body/admin/admin-showThreads.ftl +++ b/webapp/web/templates/freemarker/body/admin/admin-showThreads.ftl @@ -17,15 +17,15 @@ table.threadInfo th { -

Background Threads

+

${i18n().background_threads}

<#list threads as threadInfo>
${authenticator}
- - - - + + + +
Name${threadInfo.name}
WorkLevel${threadInfo.workLevel}
Since${threadInfo.since}
Flags${threadInfo.flags}
${i18n().name}${threadInfo.name}
${i18n().work_level}${threadInfo.workLevel}
${i18n().since}${threadInfo.since}
${i18n().flags}${threadInfo.flags}
\ No newline at end of file diff --git a/webapp/web/templates/freemarker/body/admin/searchIndex.ftl b/webapp/web/templates/freemarker/body/admin/searchIndex.ftl index ab5ee849e..cfee9e280 100644 --- a/webapp/web/templates/freemarker/body/admin/searchIndex.ftl +++ b/webapp/web/templates/freemarker/body/admin/searchIndex.ftl @@ -4,40 +4,40 @@ Template for the page that controls the updating or rebuilding of the Search Index. --> -

Search Index Status

+

${i18n().search_index_status}

<#if !indexIsConnected> <#elseif worklevel == "IDLE"> -

The search indexer is idle.

+

${i18n().search_indexer_idle}

<#if hasPreviousBuild??> -

The most recent update was at ${since?string("hh:mm:ss a, MMMM dd, yyyy")}

+

${i18n().most_recent_update} ${since?string("hh:mm:ss a, MMMM dd, yyyy")}

- - Reset the search index and re-populate it. + + ${i18n().reset_search_index}

<#elseif totalToDo == 0> -

Preparing to rebuild the search index.

-

since ${since?string("hh:mm:ss a, MMMM dd, yyyy")}, elapsed time ${elapsed}

+

${i18n().preparing_to_rebuild_index}

+

${i18n().since_elapsed_time(since?string("hh:mm:ss a, MMMM dd, yyyy"),elapsed)}

<#else> -

${currentTask} the search index.

-

since ${since?string("hh:mm:ss a, MMMM dd, yyyy")}, elapsed time ${elapsed}, estimated total time ${expected}

-

Completed ${completedCount} out of ${totalToDo} index records.

+

${i18n().current_task(currentTask)}

+

${i18n().since_elapsed_time_est_total(since?string("hh:mm:ss a, MMMM dd, yyyy"),elapsed,expected)}

+

${i18n().index_recs_completed(completedCount,totalToDo)}

diff --git a/webapp/web/templates/freemarker/body/admin/startupStatus-display.ftl b/webapp/web/templates/freemarker/body/admin/startupStatus-display.ftl index f55cb53fc..1d8288d33 100644 --- a/webapp/web/templates/freemarker/body/admin/startupStatus-display.ftl +++ b/webapp/web/templates/freemarker/body/admin/startupStatus-display.ftl @@ -35,9 +35,9 @@ ${stylesheets.add('')} <#if status.errorItems?has_content> -

Fatal error

+

${i18n().fatal_error}

-

${applicationName} detected a fatal error during startup.

+

${i18n().fatal_error_detected(applicationName)}

diff --git a/webapp/web/templates/freemarker/body/partials/shortview/view-browse-default.ftl b/webapp/web/templates/freemarker/body/partials/shortview/view-browse-default.ftl index 6d799a037..bf0e84143 100644 --- a/webapp/web/templates/freemarker/body/partials/shortview/view-browse-default.ftl +++ b/webapp/web/templates/freemarker/body/partials/shortview/view-browse-default.ftl @@ -9,11 +9,11 @@ <#if (individual.thumbUrl)??> ${individual.name}

- ${individual.name} + ${individual.name}

<#else>

- ${individual.name} + ${individual.name}

diff --git a/webapp/web/templates/freemarker/body/partials/shortview/view-index-default.ftl b/webapp/web/templates/freemarker/body/partials/shortview/view-index-default.ftl index e732f00ab..e050ef4cb 100644 --- a/webapp/web/templates/freemarker/body/partials/shortview/view-index-default.ftl +++ b/webapp/web/templates/freemarker/body/partials/shortview/view-index-default.ftl @@ -4,6 +4,6 @@ <#import "lib-properties.ftl" as p> -${individual.name} +${individual.name} <@p.mostSpecificTypes individual /> \ No newline at end of file diff --git a/webapp/web/templates/freemarker/body/partials/shortview/view-search-default.ftl b/webapp/web/templates/freemarker/body/partials/shortview/view-search-default.ftl index 05273515e..a3a4db1c7 100644 --- a/webapp/web/templates/freemarker/body/partials/shortview/view-search-default.ftl +++ b/webapp/web/templates/freemarker/body/partials/shortview/view-search-default.ftl @@ -4,7 +4,7 @@ <#import "lib-properties.ftl" as p> -${individual.name} +${individual.name} <@p.mostSpecificTypes individual /> diff --git a/webapp/web/templates/freemarker/body/recomputeInferences.ftl b/webapp/web/templates/freemarker/body/recomputeInferences.ftl index 5c1d1638d..c6429e8d4 100644 --- a/webapp/web/templates/freemarker/body/recomputeInferences.ftl +++ b/webapp/web/templates/freemarker/body/recomputeInferences.ftl @@ -2,7 +2,7 @@ <#if formAction?has_content>
- +
diff --git a/webapp/web/templates/freemarker/body/revisionInfo.ftl b/webapp/web/templates/freemarker/body/revisionInfo.ftl index b5a947da3..ee7a72bd9 100644 --- a/webapp/web/templates/freemarker/body/revisionInfo.ftl +++ b/webapp/web/templates/freemarker/body/revisionInfo.ftl @@ -5,17 +5,17 @@ ${stylesheets.add('')}
-

Revision Information

+

${i18n().revision_info}

- + - - - + + + <#list revisionInfoBean.levelInfos as level> @@ -28,7 +28,7 @@ ${stylesheets.add('
-

Build date:

+

${i18n().build_date}:

${revisionInfoBean.buildDate?datetime?string.full}

diff --git a/webapp/web/templates/freemarker/body/samples.ftl b/webapp/web/templates/freemarker/body/samples.ftl index 4f8b63ead..3981bd6b8 100644 --- a/webapp/web/templates/freemarker/body/samples.ftl +++ b/webapp/web/templates/freemarker/body/samples.ftl @@ -9,60 +9,58 @@ <@widget name="test" /> -

Dates

+

${i18n().dates}

    -
  • Current date & time: ${.now?datetime}
  • -
  • Current date: ${.now?date}
  • -
  • Current time: ${.now?time}
  • +
  • ${i18n().current_date_time} ${.now?datetime}
  • +
  • ${i18n().current_date} ${.now?date}
  • +
  • ${i18n().current_time} ${.now?time}
-

Dates

- -

Formatted datetime

+

${i18n().formatted_date_time}

${dt.xsdDateTimeToYear(xsddatetime)}

-

Apples

+

${i18n().apples}

    <#list apples as apple>
  • ${apple}
-

Fruit

+

${i18n().fruit}

    <#list fruit as f>
  • ${f}
-

Animal: ${animal}

+

${i18n().animal} ${animal}

-

Book Title: ${bookTitle}

+

${i18n().book_title} ${bookTitle}

-

Zoo 1

+

${i18n().zoo_one}

    <#list zoo1.animals as animal>
  • ${animal}
-

Zoo 2

+

${i18n().zoo_two}

    <#list zoo2.animals as animal>
  • ${animal}
-

Berries: ${berries}

+

${i18n().berries} ${berries}

${year?number?c}

-

Raw String Literals

+

${i18n().raw_string_literals}

${r"#{title}"}

${r"${title}"}

-

Containers do not pick up changes to the value of their elements

+

${i18n().containers_do_not_pick_up_changes}

<#assign fruit = ["apples", "oranges", "bananas"] veg = ["beans", "peas", "carrots"] @@ -79,12 +77,12 @@ >
-

List elements of ${r"${fruit}"}

+

${i18n().list_elements_of} ${r"${fruit}"}

<#list fruit as f> ${f}
-

List elements of ${r"${food}"}: contains no pears

+

${i18n().list_elements_of} ${r"${food}"}: ${i18n().contains_no_pears}

<#list food as item> <#list item as i> ${i}
@@ -92,7 +90,7 @@ -

Numbers

+

${i18n().numbers}

<#assign one = 1 @@ -116,7 +114,7 @@ ${r"${two}"}: ${two}
${r"${numbers[1]}"}: ${numbers[1]}
${r"${numbers2[1]}"}: ${numbers2[1]}
-

Uncamelcasing

+

${i18n().undo_camelcasing}

<#assign s1 = "FreemarkerTest"> ${s1} => ${str.unCamelCase(s1)}
<#assign s2 = "Freemarker"> diff --git a/webapp/web/templates/freemarker/body/sdbSetup.ftl b/webapp/web/templates/freemarker/body/sdbSetup.ftl index abfe18e69..d861d677c 100644 --- a/webapp/web/templates/freemarker/body/sdbSetup.ftl +++ b/webapp/web/templates/freemarker/body/sdbSetup.ftl @@ -3,7 +3,7 @@ <#if link??>

${sdbstatus}

- + diff --git a/webapp/web/templates/freemarker/body/search/search-help_es.ftl b/webapp/web/templates/freemarker/body/search/search-help_es.ftl new file mode 100644 index 000000000..bde61733d --- /dev/null +++ b/webapp/web/templates/freemarker/body/search/search-help_es.ftl @@ -0,0 +1,42 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#if origination?has_content && origination == "helpLink"> +

Consejos Para la Búsqueda

+ + regresar a los resultados + +<#else> +

Consejos Para la Búsqueda

+ +
    +
  • Debe ser sencillo. Utilice corto, único a menos que las búsquedas están regresando muchos resultados.
  • +
  • Utilice comillas para buscar una frase entera -- por ejemplo, "el plegamiento de proteínas".
  • +
  • A excepción de los operadores booleanos, búsquedas no distinguen entre mayúsculas y minúsculas, por lo que "Ginebra" y "ginebra" son equivalentes
  • +
  • Si no está seguro de la ortografía correcta, ponga ~ al final de su término de búsqueda -- por ejemplo, cabage~ encuentra cabbage, steven~ encuentra Stephen y Stefan (así como otros nombres similares).
  • +
+ +

Consejos Avanzados

+ + +${stylesheets.add('')} + \ No newline at end of file diff --git a/webapp/web/templates/freemarker/body/search/search-pagedResults.ftl b/webapp/web/templates/freemarker/body/search/search-pagedResults.ftl index 5203b4fb3..0aa1a9d87 100644 --- a/webapp/web/templates/freemarker/body/search/search-pagedResults.ftl +++ b/webapp/web/templates/freemarker/body/search/search-pagedResults.ftl @@ -4,21 +4,21 @@

<#escape x as x?html> - Search results for '${querytext}' - <#if classGroupName?has_content>limited to type '${classGroupName}' - <#if typeName?has_content>limited to type '${typeName}' + ${i18n().search_results_for} '${querytext}' + <#if classGroupName?has_content>${i18n().limited_to_type} '${classGroupName}' + <#if typeName?has_content>${i18n().limited_to_type} '${typeName}'

-Not the results you expected? +${i18n().not_expected_results}
<#-- Refinement links --> <#if classGroupLinks?has_content>
-

Display only

+

${i18n().display_only}

@@ -27,13 +27,13 @@ <#if classLinks?has_content>
<#if classGroupName?has_content> -

Limit ${classGroupName} to

+

${i18n().limit} ${classGroupName} to

<#else> -

Limit to

+

${i18n().limit_to}

@@ -53,15 +53,15 @@ <#if (pagingLinks?size > 0)>
Pages: - <#if prevPage??> + <#if prevPage??> <#list pagingLinks as link> <#if link.url??> - ${link.text} + ${link.text} <#else> ${link.text} <#-- no link if current page --> - <#if nextPage??> + <#if nextPage??>

diff --git a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-advancedDataTools.ftl b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-advancedDataTools.ftl index ed95a2f4e..6485df7d5 100644 --- a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-advancedDataTools.ftl +++ b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-advancedDataTools.ftl @@ -4,23 +4,23 @@ <#if dataTools?has_content>
-

Advanced Data Tools

+

${i18n().advanced_data_tools}

diff --git a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-classHierarchy.ftl b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-classHierarchy.ftl index a5145a170..dc402f436 100644 --- a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-classHierarchy.ftl +++ b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-classHierarchy.ftl @@ -8,23 +8,23 @@ <#assign displayOption = "asserted">
- + - + <#if displayOption == "group"> - + <#if displayOption == "group"> - + <#else> - +
diff --git a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-dataInput.ftl b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-dataInput.ftl index f2ba1d995..f3092db01 100644 --- a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-dataInput.ftl +++ b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-dataInput.ftl @@ -6,18 +6,18 @@ <#if dataInput?has_content>
-

Data Input

+

${i18n().data_input}

- +
-

Please create a class group and associate classes with the group created.

+

${i18n().please_create} ${i18n().a_classgroup} ${i18n().associate_classes_with_group}

diff --git a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-indexCacheRebuild.ftl b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-indexCacheRebuild.ftl index cfe3d7554..70c73c4eb 100644 --- a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-indexCacheRebuild.ftl +++ b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-indexCacheRebuild.ftl @@ -4,19 +4,19 @@ <#if indexCacheRebuild?has_content>
-

Refresh Content

+

${i18n().refresh_content}

diff --git a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-main.ftl b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-main.ftl index ad539f33d..ef8bb2242 100644 --- a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-main.ftl +++ b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-main.ftl @@ -5,7 +5,7 @@ ${stylesheets.add('')}
-

Site Administration

+

${i18n().site_administration}

diff --git a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-objectPropHierarchy.ftl b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-objectPropHierarchy.ftl index a28f9bdcb..8bf02db0c 100644 --- a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-objectPropHierarchy.ftl +++ b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-objectPropHierarchy.ftl @@ -22,21 +22,21 @@ <#if propType == "group">
- + - + <#else>
Object<#else>DataPropertyHierarchy" method="post" role="classHierarchy"> - + - object<#else>data property"/> + ${i18n().object}<#else>${i18n().data} ${i18n().property}"/> - +
diff --git a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-ontologyEditor.ftl b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-ontologyEditor.ftl index 6d4c8c7dd..83bb18a4c 100644 --- a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-ontologyEditor.ftl +++ b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-ontologyEditor.ftl @@ -4,36 +4,36 @@ <#if ontologyEditor?has_content>
-

Ontology Editor

+

${i18n().ontology_editor}

<#if ontologyEditor.pellet?has_content>

${ontologyEditor.pellet.error}

<#if ontologyEditor.pellet.explanation?has_content> -

Cause: ${ontologyEditor.pellet.explanation}

+

${i18n().cause} ${ontologyEditor.pellet.explanation}

-

Class Management

+

${i18n().class_management}

-

Property Management

+

${i18n().property_management}

diff --git a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-siteConfiguration.ftl b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-siteConfiguration.ftl index d9b5ca049..1156f7847 100644 --- a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-siteConfiguration.ftl +++ b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-siteConfiguration.ftl @@ -4,44 +4,44 @@ <#if siteConfig?has_content>
-

Site Configuration

+

${i18n().site_config}

diff --git a/webapp/web/templates/freemarker/body/termsOfUse_es.ftl b/webapp/web/templates/freemarker/body/termsOfUse_es.ftl new file mode 100644 index 000000000..76a8ccdda --- /dev/null +++ b/webapp/web/templates/freemarker/body/termsOfUse_es.ftl @@ -0,0 +1,41 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +
+

Condiciones de uso

+ +

Aviso legal

+ +

Este ${termsOfUse.siteName} sitio web contiene material—información de texto, la publicación + citas, enlaces e imágenes—proporcionado por ${termsOfUse.siteHost} y varios terceros, tanto de los + individuos y las organizaciones, comerciales y de otro tipo. En la medida de derecho de autor, la información + presentada en el sitio web VIVO y disponible como Resource Description Framework (RDF) datos de VIVO en + ${termsOfUse.siteHost} se destina para uso público y se distribuye libremente bajo los términos de la + Creative Commons + CC-BY 3.0 licencia, que le permite copiar, distribuir, mostrar y hacer que los derivados de esta + información, siempre le das crédito a ${termsOfUse.siteHost}. Cualquier información que no sea derecho de autor + está disponible para usted en virtud de una + exención + CC0. Sin embargo, los documentos originales, imágenes o páginas web adjuntas o vinculado desde VIVO podrán + contener información con derechos de autor y sólo deben ser utilizados o distribuidos en los términos que se + incluyen con cada fuente o de acuerdo con los principios del uso justo.

+ +

Descargo de responsabilidad

+ +

${termsOfUse.siteHost?cap_first} ofrece ninguna garantía, expresa o implícita, incluyendo las garantías de + comerciabilidad y adecuación a un propósito particular, o asume cualquier responsabilidad legal o responsabilidad + por la exactitud, integridad, actualidad o utilidad de cualquier material mostrado o distribuido a través de la + página web ${termsOfUse.siteName} o representa que su uso no infringiría derechos de propiedad privada. + ${termsOfUse.siteHost?cap_first} renuncia a cualquier garantía con respecto a la información proporcionada. Si + usted confía en dicha información es a su propio riesgo. En ningún caso ${termsOfUse.siteHost} será responsable + ante usted por daños o pérdidas que resulten de o causados ​​por el sitio web ${termsOfUse.siteName} o su + contenido.

+ +

Renuncia de aprobación

+ +

La referencia en este documento a cualquier producto comercial específico, proceso o servicio por nombre + comercial, marca, fabricante, o de otro modo, no constituye necesariamente ni implica un endoso o recomendación + por parte de ${termsOfUse.siteHost}. Los puntos de vista y opiniones de los autores expresadas en este documento + no representan ni reflejan necesariamente las de Cornell y no podrá ser utilizado para fines publicitarios o + endoso de productos.

+ +
\ No newline at end of file diff --git a/webapp/web/templates/freemarker/body/unrecognizedUser.ftl b/webapp/web/templates/freemarker/body/unrecognizedUser.ftl index 8ff7a735e..398df7e74 100644 --- a/webapp/web/templates/freemarker/body/unrecognizedUser.ftl +++ b/webapp/web/templates/freemarker/body/unrecognizedUser.ftl @@ -3,13 +3,12 @@ <#-- Template for the Unrecognized User page. -->
-

Unrecognized user

+

${i18n().unrecognized_user}

- For some reason, there is no individual in VIVO that is associated with your Net ID. - Perhaps you should contact your VIVO administrator. + ${i18n().no_individual_associated_with_id}


- Continue + ${i18n().continue}
diff --git a/webapp/web/templates/freemarker/edit/forms/autoCompleteObjectPropForm.ftl b/webapp/web/templates/freemarker/edit/forms/autoCompleteObjectPropForm.ftl index 34afb30b8..8c4853db1 100644 --- a/webapp/web/templates/freemarker/edit/forms/autoCompleteObjectPropForm.ftl +++ b/webapp/web/templates/freemarker/edit/forms/autoCompleteObjectPropForm.ftl @@ -27,19 +27,19 @@ <#assign propertyNameForDisplay = editConfiguration.objectPropertyNameForDisplay /> <#if editMode = "edit" > - <#assign titleVerb = "Edit" /> + <#assign titleVerb = "${i18n().edit_capitalized}" /> <#assign objectLabel = editConfiguration.pageData.objectLabel /> <#assign selectedObjectUri = editConfiguration.objectUri /> - <#assign submitButtonText = "Save Change" /> + <#assign submitButtonText = "${i18n().save_button}" /> <#else> - <#assign titleVerb = "Add" > + <#assign titleVerb = "${i18n().add_capitalized}" > <#assign objectLabel = "" /> <#assign selectedObjectUri = ""/> - <#assign submitButtonText = "Create Entry" /> + <#assign submitButtonText = "${i18n().create_entry}" /> <#if editConfiguration.formTitle?contains("collaborator") > - <#assign formTitle = "Select an existing Collaborator for ${editConfiguration.subjectName}" /> + <#assign formTitle = i18n().select_existing_collaborator(editConfiguration.subjectName) /> <#else> <#assign formTitle = editConfiguration.formTitle /> @@ -58,16 +58,16 @@ <#---This section should become autocomplete instead-->

- +

- + - (Verify this match or - change selection) + (${i18n().verify_this_match} ${i18n().or} + ${i18n().change_selection})

@@ -78,11 +78,11 @@ or - Cancel + ${i18n().cancel_link}

<#else> -

There are no entries in the system from which to select.

+

${i18n().there_are_no_entries_for_selection}

 

@@ -92,7 +92,7 @@ <#if editConfiguration.propertySelectFromExisting = false && editConfiguration.propertyOfferCreateNewOption = false> -

This property is currently configured to prohibit editing.

+

${i18n().editing_prohibited}

diff --git a/webapp/web/templates/freemarker/edit/forms/confirmDeletePropertyForm.ftl b/webapp/web/templates/freemarker/edit/forms/confirmDeletePropertyForm.ftl index 74e540526..263c73053 100644 --- a/webapp/web/templates/freemarker/edit/forms/confirmDeletePropertyForm.ftl +++ b/webapp/web/templates/freemarker/edit/forms/confirmDeletePropertyForm.ftl @@ -16,7 +16,7 @@ <#assign deletionTemplateName = editConfiguration.deleteTemplate/>
-

Are you sure you want to delete the following entry from ${editConfiguration.propertyName}?

+

${i18n().confirm_entry_deletion_from} ${editConfiguration.propertyName}?

<#if editConfiguration.objectProperty = true> @@ -42,9 +42,9 @@ <#if editConfiguration.objectProperty = true>

- + or - Cancel + ${i18n().cancel_link} <#if editConfiguration.objectProperty = true>

diff --git a/webapp/web/templates/freemarker/edit/forms/dateTimeIntervalForm.ftl b/webapp/web/templates/freemarker/edit/forms/dateTimeIntervalForm.ftl index fac8f7651..c7139c5c6 100644 --- a/webapp/web/templates/freemarker/edit/forms/dateTimeIntervalForm.ftl +++ b/webapp/web/templates/freemarker/edit/forms/dateTimeIntervalForm.ftl @@ -7,12 +7,12 @@ <#assign htmlForElements = editConfiguration.pageData.htmlForElements /> <#if editMode == "edit"> - <#assign titleVerb="Edit"> - <#assign submitButtonText="Edit Date/Time Value"> + <#assign titleVerb="${i18n().edit_capitalized}"> + <#assign submitButtonText="${i18n().edit_date_time_value}"> <#assign disabledVal="disabled"> <#else> - <#assign titleVerb="Create"> - <#assign submitButtonText="Create Date/Time Value"> + <#assign titleVerb="${i18n().create_capitalized}"> + <#assign submitButtonText="${i18n().create_date_time_value}"> <#assign disabledVal=""/> <#--If edit submission exists, then retrieve validation errors if they exist--> @@ -21,25 +21,25 @@ -

${titleVerb} date time value for ${editConfiguration.subjectName}

+

${titleVerb} ${i18n().date_time_value_for} ${editConfiguration.subjectName}

<#--Display error messages if any--> <#if submissionErrors?has_content>
- + <#list currentUser.permissionSetUris as role> - + <#else> diff --git a/webapp/web/templates/freemarker/body/contactForm/contactForm-email.ftl b/webapp/web/templates/freemarker/body/contactForm/contactForm-email.ftl index 2b2672c95..5740cb0e6 100644 --- a/webapp/web/templates/freemarker/body/contactForm/contactForm-email.ftl +++ b/webapp/web/templates/freemarker/body/contactForm/contactForm-email.ftl @@ -12,7 +12,7 @@

${subject}

-

${i18n().from}: ${name}

+

${i18n().from_capitalized}: ${name}

${i18n().email_address}: ${emailAddress}

diff --git a/webapp/web/templates/freemarker/body/error/error-email.ftl b/webapp/web/templates/freemarker/body/error/error-email.ftl index e3c14b4b5..9f5b360c6 100644 --- a/webapp/web/templates/freemarker/body/error/error-email.ftl +++ b/webapp/web/templates/freemarker/body/error/error-email.ftl @@ -2,7 +2,7 @@ <#-- Template for email message sent to site administrator when an error occurs on the site. --> -<#assign subject = i18n().error_occurred /> +<#assign subject = "${i18n().error_occurred}" /> <#assign datetime = datetime?string("yyyy-MM-dd HH:mm:ss zzz")> diff --git a/webapp/web/templates/freemarker/body/login/adminLogin.ftl b/webapp/web/templates/freemarker/body/login/adminLogin.ftl index ef49f3e1a..d09934eb7 100644 --- a/webapp/web/templates/freemarker/body/login/adminLogin.ftl +++ b/webapp/web/templates/freemarker/body/login/adminLogin.ftl @@ -6,31 +6,31 @@

${i18n().internal_login}

<#if errorNoEmail??> - <#assign errorMessage = i18n().no_email_supplied /> + <#assign errorMessage = "${i18n().no_email_supplied}" /> <#if errorNoPassword??> - <#assign errorMessage = i18n().no_password_supplied /> + <#assign errorMessage = "${i18n().no_password_supplied}" /> <#if errorLoginDisabled??> - <#assign errorMessage = i18n().logins_temporarily_disabled /> + <#assign errorMessage = "${i18n().logins_temporarily_disabled}" /> <#if errorLoginFailed??> - <#assign errorMessage = i18n().incorrect_email_password /> + <#assign errorMessage = "${i18n().incorrect_email_password}" /> <#if errorNewPasswordWrongLength??> - <#assign errorMessage = i18n().password_length /> + <#assign errorMessage = "${i18n().password_length}" /> <#if errorNewPasswordsDontMatch??> - <#assign errorMessage = i18n().password_mismatch /> + <#assign errorMessage = "${i18n().password_mismatch}" /> <#if errorNewPasswordMatchesOld??> - <#assign errorMessage = i18n().new_pwd_matches_existing /> + <#assign errorMessage = "${i18n().new_pwd_matches_existing}" /> <#if errorMessage?has_content> diff --git a/webapp/web/templates/freemarker/body/partials/individual/individual-property-group-tabs.ftl b/webapp/web/templates/freemarker/body/partials/individual/individual-property-group-tabs.ftl index f14ce8a8c..3b77322c8 100644 --- a/webapp/web/templates/freemarker/body/partials/individual/individual-property-group-tabs.ftl +++ b/webapp/web/templates/freemarker/body/partials/individual/individual-property-group-tabs.ftl @@ -28,7 +28,7 @@ <#if (propertyGroups.all?size > 1) > -
  • ${i18n().view_all}
  • +
  • ${i18n().view_all_capitalized}
  •  
  • diff --git a/webapp/web/templates/freemarker/edit/forms/autoCompleteObjectPropForm.ftl b/webapp/web/templates/freemarker/edit/forms/autoCompleteObjectPropForm.ftl index 8c4853db1..d1ae02c59 100644 --- a/webapp/web/templates/freemarker/edit/forms/autoCompleteObjectPropForm.ftl +++ b/webapp/web/templates/freemarker/edit/forms/autoCompleteObjectPropForm.ftl @@ -39,7 +39,7 @@ <#if editConfiguration.formTitle?contains("collaborator") > - <#assign formTitle = i18n().select_existing_collaborator(editConfiguration.subjectName) /> + <#assign formTitle = "${i18n().select_existing_collaborator(editConfiguration.subjectName)}" /> <#else> <#assign formTitle = editConfiguration.formTitle /> diff --git a/webapp/web/templates/freemarker/page/partials/languageSelector.ftl b/webapp/web/templates/freemarker/page/partials/languageSelector.ftl index 8dad237ca..991602284 100644 --- a/webapp/web/templates/freemarker/page/partials/languageSelector.ftl +++ b/webapp/web/templates/freemarker/page/partials/languageSelector.ftl @@ -7,15 +7,14 @@ --> <#-- This is included by identity.ftl --> -<#if selectLocale??> -
  • - <#list selectLocale.locales as locale> - - ${locale.label} - - <#if locale_has_next>| - -
  • +<#if selectLocale??> + <#list selectLocale.locales as locale> +
  • + + ${locale.label} + +
  • + <#--
    Levels:${i18n().levels}:
    namereleaserevision${i18n().name}${i18n().release}${i18n().revision}
    URI:${currentUser.uri}
    ${i18n().first_name}:${currentUser.firstName}
    ${i18n().last_name}:${currentUser.lastName}
    ${i18n().email_Address}:${currentUser.emailAddress}
    ${i18n().email_address}:${currentUser.emailAddress}
    ${i18n().external_auth_id}:${currentUser.externalAuthId}
    ${i18n().login_count}:${currentUser.loginCount}
    ${i18n().role}:${role}
    ${i18n().user_role}:${role}
    ${i18n().not_logged_in}