0

我想在我的应用程序中使用 shiny.i18n,它使用工具提示来提供有关某些元素的更多信息(使用两种类型的工具提示,使用 tipify 或 bsTooltip)。但是,我找不到如何集成两者,并且工具提示没有正确呈现。

例如,这个:

library(shiny)
library(shinyjs)
library(shinyBS)
library(shiny.i18n)

i18n <- Translator$new(translation_csvs_path = "data_translation/")
i18n$set_translation_language("en")

ui <- fluidPage(
  useShinyjs(),
  shiny.i18n::usei18n(i18n),
  div(style = "float: left;",
      selectInput('selected_language',
                  i18n$t("Change language"),
                  choices = i18n$get_languages(),
                  selected = i18n$get_key_translation())
  ),
  
  mainPanel(
    i18n$t("This is some text without a tooltip"),
    
    textOutput("Text"),
    bsTooltip("Text", 
            i18n$t("This is some text"),
            placement="right", trigger = "hover", options=list(container="body")),
 
     tipify(
    actionButton("Button", "", icon = icon("house-user")),
    i18n$t("This is a button"), 
    placement="right", trigger = "hover", options=list(container="body"))
))


server <- function(input, output, session) {
  observeEvent(input$selected_language, {
    shiny.i18n::update_lang(session, input$selected_language)
  })
  output$Text <- renderText({i18n$t("This is some text with a tooltip")})
}

shinyApp(ui, server)

文件 translate_fr.csv:

"en","fr" 
"Hello","Bonjour" 
"This is some text without a tooltip","Ceci est un texte sans tooltip" 
"This is some text with a tooltip","Ceci est un texte avec tooltip"
"This is a button", "Ceci est un bouton" 
"This is some text", "Ceci est un texte" 
"Change language","Changer de langue"

返回:

在此处输入图像描述

而工具提示应该只包含“这是一个按钮”。我对这些工具很陌生——我错过了什么?

4

1 回答 1

0

问题是工具提示和tipify 不支持HTML。这就是为什么您的工具提示显示由 shiny.18n 创建的原始 HTML 的原因。

有两种方法可以实现您想要的。

第一个是使用来自 shinyBS 包的弹出框。这些支持 HTML 并将实现您正在寻找的语言功能。

另一种是在服务器端呈现闪亮的工具提示。这样,创建翻译就不会涉及 HTML。这种方式甚至可以让你使用你要求的tipify/tooltips。

这个问题的原因是,shiny.18n 有两种技巧来实现翻译。第一个是浏览器端。正如您所显示的,shiny.18n 在翻译周围包装了一个 span 标签,以便以后可以通过在浏览器中使用 JavaScript 对其进行修改。

另一种方法是在服务器端呈现所有新内容。这样就不需要 HTML,因为该过程无论如何都不会发生在浏览器上。

于 2021-07-18T22:26:29.553 回答