Appsilon/shiny.i18n

[Feature]: Add support for translations of shinyBS collapse panels

rjzupkoii opened this issue · 0 comments

Guidelines

  • I agree to follow this project's Contributing Guidelines.

Description

Elements such as the bsCollapsePanel from the shinyBS library are frequency used to organize UI controls. As such, for international applications, being able to translate all elements in a UI is critical.

Problem

As currently implemented, translation cannot be directly enabled for the bsCollapsePanel since it doesn't appear to expose the appropriate data context for the shiny.i18n library to access. A work around is possible as demonstrated in the Proposed Solution, which suggests that it is is likely possible to add a cleaner (e.g., shiny.i18n::translate_panels(i18n) function call or the like) version to the library.

Proposed Solution

The following snippet enables translation of bsCollapsePanel elements:

# Add the i18n class and translation key to the bsCollapsePanel
HTML('
<script>
$(document).on("shiny:sessioninitialized", function(event) {
  $("a[id^=\'ui-collapse\']").each(function() {
    $(this).addClass("i18n");
    $(this).attr("data-key", $(this).text());
  }); 
});
</script>'),

Alternatives Considered

I've actually added the above code snippet to our own application, so the support is already present. Formalizing it as part of the shiny.i18n library would just make this more accessible to others for use.