使用 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)
希望对您有所帮助!
我有一个 闪亮的应用程序,它具有在多种语言之间翻译其文本的功能,通过使用一些 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)
希望对您有所帮助!