使用 updateInputSlider 更新格式的非标准评估:错误?

non-standard evaluation to update a format with updateInputSlider: bug?

我有一个 闪亮的应用程序,它具有在多种语言之间翻译其文本的功能,通过使用一些 RenderText 和一个 ActionButton 在语言之间切换。 这是我的应用程序:

library(shiny)
trads = list(text3=list("text3 in language 1", "text in other language"),
             titl3=list("widget label in language 1", "widget label in other language"))

ui <- fluidPage(
  actionButton("language",label="language", icon=icon("flag")),
  htmlOutput("text3", container = tags$h3),
  sliderInput("slider1", label=h2("slider1"), 0, 10, 5)
)

server <- function(input, output, session) {


     tr <- function(text){sapply(text, function(s) trads[[s]][[input$language%%2+1]], USE.NAMES=FALSE)}

     output$text3 = renderText({tr("text3")})

     observeEvent(input$language, {
          updateSliderInput(session, "slider1", label=tr("titl3"))
     })

}

shinyApp(ui, server)

它工作正常,除了我的滑块标签最初是用 html 标签 h3() 格式化的,当我使用 updatesliderinput 时,我松开了这个标签,它 returns到纯文本。我尝试使用 paste0 在翻译中添加标签,或使用 eval 的不同语法添加标签,但它在文本中打印粘贴的结果而不是 运行 它或给出错误。 在保持格式的同时翻译有什么想法吗?谢谢

注意:我对包含 URL link..

的文本有同样的问题

您在 updateSliderInput 中确实发现了一个错误。它只能处理纯字符串,不能处理 HTML 标签。作为解决方法,我建议您在 UI

的开头添加类似的内容
tags$head(
    tags$style(
      'label[for = "slider1"] {
    color: red;
    font-size: 20px;
    }'
    )
  )

但将 css 更改为您喜欢的任何内容(也许复制 h2 标签的 css 规则),然后始终只将字符串传递给标签参数。这样样式总是保持不变。

我的完整代码

library(shiny)
trads = list(text3=list("text3 in language 1", "text in other language"),
             titl3=list("widget label in language 1", "widget label in other language"))

ui <- fluidPage(
  tags$head(
    tags$style(
      'label[for = "slider1"] {
    color: red;
    font-size: 20px;
    }'
    )
  ),
  actionButton("language",label="language", icon=icon("flag")),
  htmlOutput("text3", container = tags$h3),
  sliderInput("slider1", label="slider1", 0, 10, 5)

)

server <- function(input, output, session) {


  tr <- function(text){sapply(text, function(s) trads[[s]][[input$language%%2+1]], USE.NAMES=FALSE)}

  output$text3 = renderText({tr("text3")})

  observeEvent(input$language, {
    updateSliderInput(session, "slider1", label=tr("titl3"))
  })

}

shinyApp(ui, server)

希望对您有所帮助!