我有一个闪亮的应用程序,它具有在几种语言之间翻译文本的功能,通过使用一些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
时,我松开了这个标签并返回纯文本。我尝试使用paste0
或与eval
不同的语法在翻译中添加标记,但它会在文本中打印粘贴的结果而不是运行它或给出错误。
在保持格式的同时翻译的任何想法?感谢
注意:我对包含URL链接的一个文本存在同样的问题。
答案 0 :(得分:2)
你真的发现你在updateSliderInput
发现了一个错误。它只能处理纯字符串而不能处理HTML标记。作为一种解决方法,我建议您在UI的开头添加类似的东西
tags$head(
tags$style(
'label[for = "slider1"] {
color: red;
font-size: 20px;
}'
)
)
但是将css更改为您喜欢的内容(可能会复制h2标记的css规则),然后始终只将字符串传递给label参数。这样,样式始终保持不变。
我的完整代码
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)
希望这有帮助!